On 5/12/22 2:21 AM, Hao Xu wrote: > ? 2022/5/9 ??11:50, Jens Axboe ??: >> If the application passes in IORING_FILE_INDEX_ALLOC as the file_slot, >> then that's a hint to allocate a fixed file descriptor rather than have >> one be passed in directly. >> >> This can be useful for having io_uring manage the direct descriptor space. >> >> Normal open direct requests will complete with 0 for success, and < 0 >> in case of error. If io_uring is asked to allocated the direct descriptor, >> then the direct descriptor is returned in case of success. >> >> Signed-off-by: Jens Axboe <axboe@xxxxxxxxx> >> --- >> fs/io_uring.c | 32 +++++++++++++++++++++++++++++--- >> include/uapi/linux/io_uring.h | 9 +++++++++ >> 2 files changed, 38 insertions(+), 3 deletions(-) >> >> diff --git a/fs/io_uring.c b/fs/io_uring.c >> index 8c40411a7e78..ef999d0e09de 100644 >> --- a/fs/io_uring.c >> +++ b/fs/io_uring.c >> @@ -4697,7 +4697,7 @@ static int io_openat2_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) >> return __io_openat_prep(req, sqe); >> } >> -static int __maybe_unused io_file_bitmap_get(struct io_ring_ctx *ctx) >> +static int io_file_bitmap_get(struct io_ring_ctx *ctx) >> { >> struct io_file_table *table = &ctx->file_table; >> unsigned long nr = ctx->nr_user_files; >> @@ -4722,6 +4722,32 @@ static int __maybe_unused io_file_bitmap_get(struct io_ring_ctx *ctx) >> return -ENFILE; >> } >> +static int io_fixed_fd_install(struct io_kiocb *req, unsigned int issue_flags, >> + struct file *file, unsigned int file_slot) >> +{ >> + int alloc_slot = file_slot == IORING_FILE_INDEX_ALLOC; >> + struct io_ring_ctx *ctx = req->ctx; >> + int ret; >> + >> + if (alloc_slot) { >> + io_ring_submit_lock(ctx, issue_flags); >> + file_slot = io_file_bitmap_get(ctx); >> + if (unlikely(file_slot < 0)) { >> + io_ring_submit_unlock(ctx, issue_flags); >> + return file_slot; >> + } >> + } > > if (alloc_slot) { > ... > } else { > file_slot -= 1; > } > > Otherwise there is off-by-one error. > > Others looks good, > > Reviewed-by: Hao Xu <howeyxu@xxxxxxxxxxx> Thanks, you are correct, I've folded that in. -- Jens Axboe