aboutsummaryrefslogtreecommitdiffstats
path: root/block/blk-iolatency.c
diff options
context:
space:
mode:
authorPaolo Valente <paolo.valente@linaro.org>2020-02-03 11:40:54 +0100
committerJens Axboe <axboe@kernel.dk>2020-02-03 06:58:14 -0700
commitf718b093277df582fbf8775548a4f163e664d282 (patch)
tree2536f43e3c22ff201630e1561c928c465d13e466 /block/blk-iolatency.c
parentbcache: check return value of prio_read() (diff)
downloadlinux-dev-f718b093277df582fbf8775548a4f163e664d282.tar.xz
linux-dev-f718b093277df582fbf8775548a4f163e664d282.zip
block, bfq: do not plug I/O for bfq_queues with no proc refs
Commit 478de3380c1c ("block, bfq: deschedule empty bfq_queues not referred by any process") fixed commit 3726112ec731 ("block, bfq: re-schedule empty queues if they deserve I/O plugging") by descheduling an empty bfq_queue when it remains with not process reference. Yet, this still left a case uncovered: an empty bfq_queue with not process reference that remains in service. This happens for an in-service sync bfq_queue that is deemed to deserve I/O-dispatch plugging when it remains empty. Yet no new requests will arrive for such a bfq_queue if no process sends requests to it any longer. Even worse, the bfq_queue may happen to be prematurely freed while still in service (because there may remain no reference to it any longer). This commit solves this problem by preventing I/O dispatch from being plugged for the in-service bfq_queue, if the latter has no process reference (the bfq_queue is then prevented from remaining in service). Fixes: 3726112ec731 ("block, bfq: re-schedule empty queues if they deserve I/O plugging") Tested-by: Oleksandr Natalenko <oleksandr@natalenko.name> Reported-by: Patrick Dung <patdung100@gmail.com> Tested-by: Patrick Dung <patdung100@gmail.com> Signed-off-by: Paolo Valente <paolo.valente@linaro.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block/blk-iolatency.c')
0 files changed, 0 insertions, 0 deletions