• B
    block: Change a rcu_read_{lock,unlock}_sched() pair into rcu_read_{lock,unlock}() · 818e0fa2
    Bart Van Assche 提交于
    scsi_device_quiesce() uses synchronize_rcu() to guarantee that the
    effect of blk_set_preempt_only() will be visible for percpu_ref_tryget()
    calls that occur after the queue unfreeze by using the approach
    explained in https://lwn.net/Articles/573497/. The rcu read lock and
    unlock calls in blk_queue_enter() form a pair with the synchronize_rcu()
    call in scsi_device_quiesce(). Both scsi_device_quiesce() and
    blk_queue_enter() must either use regular RCU or RCU-sched.
    Since neither the RCU-protected code in blk_queue_enter() nor
    blk_queue_usage_counter_release() sleeps, regular RCU protection
    is sufficient. Note: scsi_device_quiesce() does not have to be
    modified since it already uses synchronize_rcu().
    Reported-by: NTejun Heo <tj@kernel.org>
    Fixes: 3a0a5299 ("block, scsi: Make SCSI quiesce and resume work reliably")
    Signed-off-by: NBart Van Assche <bart.vanassche@wdc.com>
    Acked-by: NTejun Heo <tj@kernel.org>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Hannes Reinecke <hare@suse.com>
    Cc: Ming Lei <ming.lei@redhat.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Johannes Thumshirn <jthumshirn@suse.de>
    Cc: Oleksandr Natalenko <oleksandr@natalenko.name>
    Cc: Martin Steigerwald <martin@lichtvoll.de>
    Cc: stable@vger.kernel.org # v4.15
    Signed-off-by: NJens Axboe <axboe@kernel.dk>
    818e0fa2
blk-core.c 104.6 KB