OSDN Git Service

io_uring: honour zeroes as io-wq worker limits
authorPavel Begunkov <asml.silence@gmail.com>
Mon, 8 Nov 2021 15:10:03 +0000 (15:10 +0000)
committerJens Axboe <axboe@kernel.dk>
Mon, 8 Nov 2021 15:39:48 +0000 (08:39 -0700)
When we pass in zero as an io-wq worker number limit it shouldn't
actually change the limits but return the old value, follow that
behaviour with deferred limits setup as well.

Cc: stable@kernel.org # 5.15
Reported-by: Beld Zhang <beldzhang@gmail.com>
Fixes: e139a1ec92f8d ("io_uring: apply max_workers limit to all future users")
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/1b222a92f7a78a24b042763805e891a4cdd4b544.1636384034.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c

index ac1bc8a..b07196b 100644 (file)
@@ -10791,7 +10791,9 @@ static __cold int io_register_iowq_max_workers(struct io_ring_ctx *ctx,
 
        BUILD_BUG_ON(sizeof(new_count) != sizeof(ctx->iowq_limits));
 
-       memcpy(ctx->iowq_limits, new_count, sizeof(new_count));
+       for (i = 0; i < ARRAY_SIZE(new_count); i++)
+               if (new_count[i])
+                       ctx->iowq_limits[i] = new_count[i];
        ctx->iowq_limits_set = true;
 
        if (tctx && tctx->io_wq) {