io-wq: ensure free/busy list browsing see all items
authorJens Axboe <axboe@kernel.dk>
Wed, 13 Nov 2019 20:54:49 +0000 (13:54 -0700)
committerJens Axboe <axboe@kernel.dk>
Thu, 14 Nov 2019 02:40:57 +0000 (19:40 -0700)
commite61df66c69b11bc050d233dc95714a6339192c28
tree9cdf9136edac5778032ad517a7f72c2bd8e033c7
parent36c2f9223e84c1aa84bfba90cb2e74b517c92a54
io-wq: ensure free/busy list browsing see all items

We have two lists for workers in io-wq, a busy and a free list. For
certain operations we want to browse all workers, and we currently do
that by browsing the two separate lists. But since these lists are RCU
protected, we can potentially miss workers if they move between the two
lists while we're browsing them.

Add a third list, all_list, that simply holds all workers. A worker is
added to that list when it starts, and removed when it exits. This makes
the worker iteration cleaner, too.

Reported-by: Paul E. McKenney <paulmck@kernel.org>
Reviewed-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io-wq.c