diff --git a/block/blk-core.c b/block/blk-core.c index 2746db5f54d7355a53662064275418ea93f9a5e8..06fb25bd24df5ec0709e4d4669c9489dcd7d5b73 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -431,8 +431,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 780f02cbda84ff6d3c5c3d151510d36e1926902d..35cd1df556805f05173789c3f2933233493fafc1 100644 --- a/block/blk-sysfs.c +++ b/block/blk-sysfs.c @@ -784,6 +784,8 @@ static void blk_release_queue(struct kobject *kobj) might_sleep(); + percpu_ref_exit(&q->q_usage_counter); + if (test_bit(QUEUE_FLAG_POLL_STATS, &q->queue_flags)) blk_stat_remove_callback(q, q->poll_cb); blk_stat_free_callback(q->poll_cb);