Commit 7cae596b authored by Dylan Yudaken's avatar Dylan Yudaken Committed by Jens Axboe

io_uring: register single issuer task at creation

Instead of picking the task from the first submitter task, rather use the
creator task or in the case of disabled (IORING_SETUP_R_DISABLED) the
enabling task.

This approach allows a lot of simplification of the logic here. This
removes init logic from the submission path, which can always be a bit
confusing, but also removes the need for locking to write (or read) the
submitter_task.

Users that want to move a ring before submitting can create the ring
disabled and then enable it on the submitting task.
Signed-off-by: default avatarDylan Yudaken <dylany@fb.com>
Fixes: 97bbdc06 ("io_uring: add IORING_SETUP_SINGLE_ISSUER")
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent e775f93f
...@@ -3357,6 +3357,10 @@ static __cold int io_uring_create(unsigned entries, struct io_uring_params *p, ...@@ -3357,6 +3357,10 @@ static __cold int io_uring_create(unsigned entries, struct io_uring_params *p,
goto err; goto err;
} }
if (ctx->flags & IORING_SETUP_SINGLE_ISSUER
&& !(ctx->flags & IORING_SETUP_R_DISABLED))
ctx->submitter_task = get_task_struct(current);
file = io_uring_get_file(ctx); file = io_uring_get_file(ctx);
if (IS_ERR(file)) { if (IS_ERR(file)) {
ret = PTR_ERR(file); ret = PTR_ERR(file);
...@@ -3548,6 +3552,9 @@ static int io_register_enable_rings(struct io_ring_ctx *ctx) ...@@ -3548,6 +3552,9 @@ static int io_register_enable_rings(struct io_ring_ctx *ctx)
if (!(ctx->flags & IORING_SETUP_R_DISABLED)) if (!(ctx->flags & IORING_SETUP_R_DISABLED))
return -EBADFD; return -EBADFD;
if (ctx->flags & IORING_SETUP_SINGLE_ISSUER && !ctx->submitter_task)
ctx->submitter_task = get_task_struct(current);
if (ctx->restrictions.registered) if (ctx->restrictions.registered)
ctx->restricted = 1; ctx->restricted = 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment