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.