Skip to content

Commit

Permalink
io_uring: remove ctx->refs pinning on enter
Browse files Browse the repository at this point in the history
io_uring_enter() takes ctx->refs, which was previously preventing racing
with register quiesce. However, as register now doesn't touch the refs,
we can freely kill extra ctx pinning and rely on the fact that we're
holding a file reference preventing the ring from being destroyed.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/a11c57ad33a1be53541fce90669c1b79cf4d8940.1656153286.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
  • Loading branch information
Pavel Begunkov authored and Jens Axboe committed Jul 25, 2022
1 parent 3273c44 commit fbb8bb0
Showing 1 changed file with 4 additions and 12 deletions.
16 changes: 4 additions & 12 deletions io_uring/io_uring.c
Original file line number Diff line number Diff line change
Expand Up @@ -3049,14 +3049,10 @@ SYSCALL_DEFINE6(io_uring_enter, unsigned int, fd, u32, to_submit,
return -EBADF;
ret = -EOPNOTSUPP;
if (unlikely(!io_is_uring_fops(f.file)))
goto out_fput;
goto out;
}

ret = -ENXIO;
ctx = f.file->private_data;
if (unlikely(!percpu_ref_tryget(&ctx->refs)))
goto out_fput;

ret = -EBADFD;
if (unlikely(ctx->flags & IORING_SETUP_R_DISABLED))
goto out;
Expand Down Expand Up @@ -3141,10 +3137,7 @@ SYSCALL_DEFINE6(io_uring_enter, unsigned int, fd, u32, to_submit,
&ctx->check_cq);
}
}

out:
percpu_ref_put(&ctx->refs);
out_fput:
fdput(f);
return ret;
}
Expand Down Expand Up @@ -3730,11 +3723,10 @@ static int __io_uring_register(struct io_ring_ctx *ctx, unsigned opcode,
int ret;

/*
* We're inside the ring mutex, if the ref is already dying, then
* someone else killed the ctx or is already going through
* io_uring_register().
* We don't quiesce the refs for register anymore and so it can't be
* dying as we're holding a file ref here.
*/
if (percpu_ref_is_dying(&ctx->refs))
if (WARN_ON_ONCE(percpu_ref_is_dying(&ctx->refs)))
return -ENXIO;

if (ctx->restricted) {
Expand Down

0 comments on commit fbb8bb0

Please sign in to comment.