• Justin TerAvest's avatar
    cfq-iosched: Don't wait if queue already has requests. · 02a8f01b
    Justin TerAvest authored
    Commit 7667aa06 added logic to wait for
    the last queue of the group to become busy (have at least one request),
    so that the group does not lose out for not being continuously
    backlogged. The commit did not check for the condition that the last
    queue already has some requests. As a result, if the queue already has
    requests, wait_busy is set. Later on, cfq_select_queue() checks the
    flag, and decides that since the queue has a request now and wait_busy
    is set, the queue is expired.  This results in early expiration of the
    queue.
    
    This patch fixes the problem by adding a check to see if queue already
    has requests. If it does, wait_busy is not set. As a result, time slices
    do not expire early.
    
    The queues with more than one request are usually buffered writers.
    Testing shows improvement in isolation between buffered writers.
    
    Cc: stable@kernel.org
    Signed-off-by: default avatarJustin TerAvest <teravest@google.com>
    Reviewed-by: default avatarGui Jianfeng <guijianfeng@cn.fujitsu.com>
    Acked-by: default avatarVivek Goyal <vgoyal@redhat.com>
    Signed-off-by: default avatarJens Axboe <jaxboe@fusionio.com>
    02a8f01b
cfq-iosched.c 105 KB