@@ -4782,7 +4782,7 @@ static void sdebug_q_cmd_complete(struct sdebug_defer *sd_dp)
47824782 return ;
47834783 }
47844784 spin_lock_irqsave (& sqp -> qc_lock , iflags );
4785- sd_dp -> defer_t = SDEB_DEFER_NONE ;
4785+ WRITE_ONCE ( sd_dp -> defer_t , SDEB_DEFER_NONE ) ;
47864786 sqcp = & sqp -> qc_arr [qc_idx ];
47874787 scp = sqcp -> a_cmnd ;
47884788 if (unlikely (scp == NULL )) {
@@ -5103,8 +5103,8 @@ static bool stop_queued_cmnd(struct scsi_cmnd *cmnd)
51035103 sqcp -> a_cmnd = NULL ;
51045104 sd_dp = sqcp -> sd_dp ;
51055105 if (sd_dp ) {
5106- l_defer_t = sd_dp -> defer_t ;
5107- sd_dp -> defer_t = SDEB_DEFER_NONE ;
5106+ l_defer_t = READ_ONCE ( sd_dp -> defer_t ) ;
5107+ WRITE_ONCE ( sd_dp -> defer_t , SDEB_DEFER_NONE ) ;
51085108 } else
51095109 l_defer_t = SDEB_DEFER_NONE ;
51105110 spin_unlock_irqrestore (& sqp -> qc_lock , iflags );
@@ -5145,8 +5145,8 @@ static void stop_all_queued(bool done_with_no_conn)
51455145 sqcp -> a_cmnd = NULL ;
51465146 sd_dp = sqcp -> sd_dp ;
51475147 if (sd_dp ) {
5148- l_defer_t = sd_dp -> defer_t ;
5149- sd_dp -> defer_t = SDEB_DEFER_NONE ;
5148+ l_defer_t = READ_ONCE ( sd_dp -> defer_t ) ;
5149+ WRITE_ONCE ( sd_dp -> defer_t , SDEB_DEFER_NONE ) ;
51505150 } else
51515151 l_defer_t = SDEB_DEFER_NONE ;
51525152 spin_unlock_irqrestore (& sqp -> qc_lock , iflags );
@@ -5627,7 +5627,7 @@ static int schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip,
56275627 sd_dp -> sqa_idx = sqp - sdebug_q_arr ;
56285628 sd_dp -> qc_idx = k ;
56295629 }
5630- sd_dp -> defer_t = SDEB_DEFER_POLL ;
5630+ WRITE_ONCE ( sd_dp -> defer_t , SDEB_DEFER_POLL ) ;
56315631 spin_unlock_irqrestore (& sqp -> qc_lock , iflags );
56325632 } else {
56335633 if (!sd_dp -> init_hrt ) {
@@ -5639,7 +5639,7 @@ static int schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip,
56395639 sd_dp -> sqa_idx = sqp - sdebug_q_arr ;
56405640 sd_dp -> qc_idx = k ;
56415641 }
5642- sd_dp -> defer_t = SDEB_DEFER_HRT ;
5642+ WRITE_ONCE ( sd_dp -> defer_t , SDEB_DEFER_HRT ) ;
56435643 /* schedule the invocation of scsi_done() for a later time */
56445644 hrtimer_start (& sd_dp -> hrt , kt , HRTIMER_MODE_REL_PINNED );
56455645 }
@@ -5658,7 +5658,7 @@ static int schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip,
56585658 sd_dp -> sqa_idx = sqp - sdebug_q_arr ;
56595659 sd_dp -> qc_idx = k ;
56605660 }
5661- sd_dp -> defer_t = SDEB_DEFER_POLL ;
5661+ WRITE_ONCE ( sd_dp -> defer_t , SDEB_DEFER_POLL ) ;
56625662 spin_unlock_irqrestore (& sqp -> qc_lock , iflags );
56635663 } else {
56645664 if (!sd_dp -> init_wq ) {
@@ -5668,7 +5668,7 @@ static int schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip,
56685668 sd_dp -> qc_idx = k ;
56695669 INIT_WORK (& sd_dp -> ew .work , sdebug_q_cmd_wq_complete );
56705670 }
5671- sd_dp -> defer_t = SDEB_DEFER_WQ ;
5671+ WRITE_ONCE ( sd_dp -> defer_t , SDEB_DEFER_WQ ) ;
56725672 schedule_work (& sd_dp -> ew .work );
56735673 }
56745674 if (sdebug_statistics )
@@ -7436,7 +7436,7 @@ static int sdebug_blk_mq_poll(struct Scsi_Host *shost, unsigned int queue_num)
74367436 queue_num , qc_idx , __func__ );
74377437 break ;
74387438 }
7439- if (sd_dp -> defer_t == SDEB_DEFER_POLL ) {
7439+ if (READ_ONCE ( sd_dp -> defer_t ) == SDEB_DEFER_POLL ) {
74407440 if (kt_from_boot < sd_dp -> cmpl_ts )
74417441 continue ;
74427442
@@ -7470,7 +7470,7 @@ static int sdebug_blk_mq_poll(struct Scsi_Host *shost, unsigned int queue_num)
74707470 else
74717471 atomic_set (& retired_max_queue , k + 1 );
74727472 }
7473- sd_dp -> defer_t = SDEB_DEFER_NONE ;
7473+ WRITE_ONCE ( sd_dp -> defer_t , SDEB_DEFER_NONE ) ;
74747474 spin_unlock_irqrestore (& sqp -> qc_lock , iflags );
74757475 scsi_done (scp ); /* callback to mid level */
74767476 spin_lock_irqsave (& sqp -> qc_lock , iflags );
0 commit comments