On Mon, 2018-03-19 at 07:31 -0700, Tejun Heo wrote: > On Fri, Mar 16, 2018 at 10:35:16AM -0700, Bart Van Assche wrote: > > Since blk_queue_enter() uses rcu_read_lock_sched() scsi_device_quiesce() > > must use synchronize_sched(). > > Is there a reason to use sched-RCU here instead of the regular one? > If not, it'd be better to switch to regular RCU than the other way > around. Hello Tejun, As explained in the comment in scsi_device_quiesce(), the effect of blk_set_preempt_only() must be visible for percpu_ref_tryget() calls that occur after the queue unfreeze triggered by scsi_device_quiesce(). Hence the RCU read lock calls in blk_queue_enter(). Since these RCU read lock calls surround a function call that uses rcu_read_lock_sched(), namely percpu_ref_tryget_live(), we have to use sched-RCU in both blk_queue_enter() and scsi_device_quiesce(). Bart.