Message ID | 20220122111054.1126146-8-ming.lei@redhat.com |
---|---|
State | New |
Headers | show |
Series | block: don't drain file system I/O on del_gendisk | expand |
On Sat, Jan 22, 2022 at 07:10:48PM +0800, Ming Lei wrote: > After blk_cleanup_queue() returns, disk may not be released yet, so > probably bio may still be submitted and ->q_usage_counter may be > touched, so far this way seems safe, but not good from API's viewpoint. > > Move the release ofq_usage_counter into blk_queue_release(). Looks good, Reviewed-by: Christoph Hellwig <hch@lst.de>
On 1/22/22 03:10, Ming Lei wrote: > After blk_cleanup_queue() returns, disk may not be released yet, so > probably bio may still be submitted and ->q_usage_counter may be > touched, so far this way seems safe, but not good from API's viewpoint. > > Move the release ofq_usage_counter into blk_queue_release(). ^^ Please change "ofq_usage_counter" into "of q_usage_counter". Anyway: Reviewed-by: Bart Van Assche <bvanassche@acm.org>
diff --git a/block/blk-core.c b/block/blk-core.c index d9477191b303..bcb4d982cd80 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -341,8 +341,6 @@ void blk_cleanup_queue(struct request_queue *q) blk_mq_sched_free_rqs(q); mutex_unlock(&q->sysfs_lock); - percpu_ref_exit(&q->q_usage_counter); - /* @q is and will stay empty, shutdown and put */ blk_put_queue(q); } diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c index 6f326b44fb00..5f14fd333182 100644 --- a/block/blk-sysfs.c +++ b/block/blk-sysfs.c @@ -780,6 +780,8 @@ static void blk_release_queue(struct kobject *kobj) might_sleep(); + percpu_ref_exit(&q->q_usage_counter); + if (q->poll_stat) blk_stat_remove_callback(q, q->poll_cb); blk_stat_free_callback(q->poll_cb);
After blk_cleanup_queue() returns, disk may not be released yet, so probably bio may still be submitted and ->q_usage_counter may be touched, so far this way seems safe, but not good from API's viewpoint. Move the release ofq_usage_counter into blk_queue_release(). Signed-off-by: Ming Lei <ming.lei@redhat.com> --- block/blk-core.c | 2 -- block/blk-sysfs.c | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-)