io_uring: apply max_workers limit to all future users
authorPavel Begunkov <asml.silence@gmail.com>
Tue, 19 Oct 2021 22:43:46 +0000 (23:43 +0100)
committerJens Axboe <axboe@kernel.dk>
Wed, 20 Oct 2021 15:54:06 +0000 (09:54 -0600)
commite139a1ec92f8dbaaa7380d7e7ea17e148d473d06
tree50c714e7246dc6131dcba3dec1ed51a67f7648d9
parentbc369921d6708542eb93da33478762f1162a5805
io_uring: apply max_workers limit to all future users

Currently, IORING_REGISTER_IOWQ_MAX_WORKERS applies only to the task
that issued it, it's unexpected for users. If one task creates a ring,
limits workers and then passes it to another task the limit won't be
applied to the other task.

Another pitfall is that a task should either create a ring or submit at
least one request for IORING_REGISTER_IOWQ_MAX_WORKERS to work at all,
furher complicating the picture.

Change the API, save the limits and apply to all future users. Note, it
should be done first before giving away the ring or submitting new
requests otherwise the result is not guaranteed.

Fixes: 2e480058ddc2 ("io-wq: provide a way to limit max number of workers")
Link: https://github.com/axboe/liburing/issues/460
Reported-by: Beld Zhang <beldzhang@gmail.com>
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/51d0bae97180e08ab722c0d5c93e7439cfb6f697.1634683237.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c