• Paolo Valente's avatar
    block, bfq: do not plug I/O for bfq_queues with no proc refs · f718b093
    Paolo Valente authored
    Commit 478de338 ("block, bfq: deschedule empty bfq_queues not
    referred by any process") fixed commit 3726112e ("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: 3726112e ("block, bfq: re-schedule empty queues if they deserve I/O plugging")
    Tested-by: default avatarOleksandr Natalenko <oleksandr@natalenko.name>
    Reported-by: default avatarPatrick Dung <patdung100@gmail.com>
    Tested-by: default avatarPatrick Dung <patdung100@gmail.com>
    Signed-off-by: default avatarPaolo Valente <paolo.valente@linaro.org>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    f718b093
bfq-iosched.c 236 KB