blk-wbt: fix performance regression in wbt scale_up/scale_down
authorHarshad Shirwadkar <harshadshirwadkar@gmail.com>
Sat, 5 Oct 2019 18:59:27 +0000 (11:59 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 17 Oct 2019 20:47:13 +0000 (13:47 -0700)
commitc7449e60701608e423452c9e9cac4f0f6093dca5
tree95520e317df1106c5f64f4fabb566b9e0ad65c7b
parent46ba0cfb4f6bfda76984d5c459bedfce0cde66b4
blk-wbt: fix performance regression in wbt scale_up/scale_down

commit b84477d3ebb96294f87dc3161e53fa8fe22d9bfd upstream.

scale_up wakes up waiters after scaling up. But after scaling max, it
should not wake up more waiters as waiters will not have anything to
do. This patch fixes this by making scale_up (and also scale_down)
return when threshold is reached.

This bug causes increased fdatasync latency when fdatasync and dd
conv=sync are performed in parallel on 4.19 compared to 4.14. This
bug was introduced during refactoring of blk-wbt code.

Fixes: a79050434b45 ("blk-rq-qos: refactor out common elements of blk-wbt")
Cc: stable@vger.kernel.org
Cc: Josef Bacik <jbacik@fb.com>
Signed-off-by: Harshad Shirwadkar <harshadshirwadkar@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
block/blk-rq-qos.c
block/blk-rq-qos.h
block/blk-wbt.c