io-wq: check max_worker limits if a worker transitions bound state
authorJens Axboe <axboe@kernel.dk>
Sun, 29 Aug 2021 22:13:03 +0000 (16:13 -0600)
committerJens Axboe <axboe@kernel.dk>
Mon, 30 Aug 2021 13:28:19 +0000 (07:28 -0600)
commitecc53c48c13d995e6fe5559e30ffee48d92784fd
treed799be2ca72e07c0f3ebf5aa9697b85963e5a374
parentf1042b6ccb887f07301f6b096b3d0cfcf9189323
io-wq: check max_worker limits if a worker transitions bound state

For the two places where new workers are created, we diligently check if
we are allowed to create a new worker. If we're currently at the limit
of how many workers of a given type we can have, then we don't create
any new ones.

If you have a mixed workload with various types of bound and unbounded
work, then it can happen that a worker finishes one type of work and
is then transitioned to the other type. For this case, we don't check
if we are actually allowed to do so. This can cause io-wq to temporarily
exceed the allowed number of workers for a given type.

When retrieving work, check that the types match. If they don't, check
if we are allowed to transition to the other type. If not, then don't
handle the new work.

Cc: stable@vger.kernel.org
Reported-by: Johannes Lundberg <johalun0@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io-wq.c