]> git.baikalelectronics.ru Git - kernel.git/commit
blk-wbt: improve waking of tasks
authorJens Axboe <axboe@kernel.dk>
Sun, 26 Aug 2018 16:10:05 +0000 (10:10 -0600)
committerJens Axboe <axboe@kernel.dk>
Mon, 27 Aug 2018 17:27:26 +0000 (11:27 -0600)
commit10704ed6c236a29198028fb31e4aa186b8bcee95
treea85aa2ef3699f6a42256efbf23705993f6da6d98
parent5c7c22b290ca8be615b949099bc69a739ded3f4f
blk-wbt: improve waking of tasks

We have two potential issues:

1) After commit 08d7b77c060a, we only wake one process at the time when
   we finish an IO. We really want to wake up as many tasks as can
   queue IO. Before this commit, we woke up everyone, which could cause
   a thundering herd issue.

2) A task can potentially consume two wakeups, causing us to (in
   practice) miss a wakeup.

Fix both by providing our own wakeup function, which stops
__wake_up_common() from waking up more tasks if we fail to get a
queueing token. With the strict ordering we have on the wait list, this
wakes the right tasks and the right amount of tasks.

Based on a patch from Jianchao Wang <jianchao.w.wang@oracle.com>.

Tested-by: Agarwal, Anchal <anchalag@amazon.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-wbt.c