summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOmar Sandoval <osandov@fb.com>2017-03-28 16:12:17 -0700
committerJens Axboe <axboe@fb.com>2017-03-29 08:09:08 -0600
commit02ba8893ac9aa34fcb4ce2a9baef5615b190335a (patch)
tree772bf87a8074d74b8748e878249568627a2cce0b
parent0c9539a431bd4e4cbe475eb17e587f3ac06f2ae2 (diff)
downloadlinux-02ba8893ac9aa34fcb4ce2a9baef5615b190335a.tar.gz
linux-02ba8893ac9aa34fcb4ce2a9baef5615b190335a.tar.bz2
linux-02ba8893ac9aa34fcb4ce2a9baef5615b190335a.zip
block: fix leak of q->rq_wb
CONFIG_DEBUG_TEST_DRIVER_REMOVE found a possible leak of q->rq_wb when a request queue is reregistered. This has been a problem since wbt was introduced, but the WARN_ON(!list_empty(&stats->callbacks)) in the blk-stat rework exposed it. Fix it by cleaning up wbt when we unregister the queue. Fixes: 87760e5eef35 ("block: hook up writeback throttling") Signed-off-by: Omar Sandoval <osandov@fb.com> Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r--block/blk-sysfs.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
index 833fb7f9ce9d..45854266e398 100644
--- a/block/blk-sysfs.c
+++ b/block/blk-sysfs.c
@@ -795,7 +795,6 @@ static void blk_release_queue(struct kobject *kobj)
struct request_queue *q =
container_of(kobj, struct request_queue, kobj);
- wbt_exit(q);
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);
@@ -938,6 +937,9 @@ void blk_unregister_queue(struct gendisk *disk)
queue_flag_clear_unlocked(QUEUE_FLAG_REGISTERED, q);
+ wbt_exit(q);
+
+
if (q->mq_ops)
blk_mq_unregister_dev(disk_to_dev(disk), q);