Message ID | 20220527025400.51048-1-xiaoguang.wang@linux.alibaba.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | io_uring: ensure fput() called correspondingly when direct install fails | expand |
On 5/26/22 8:54 PM, Xiaoguang Wang wrote: > io_fixed_fd_install() may fail for short of free fixed file bitmap, > in this case, need to call fput() correspondingly. Good catch - but it's a bit confusing how we handle this case internally, and the other error case relies on that function doing the fput (which it does). Any chance we can get that cleaned up at the same time? Would make errors in this error less likely in the future.
hi, > On 5/26/22 8:54 PM, Xiaoguang Wang wrote: >> io_fixed_fd_install() may fail for short of free fixed file bitmap, >> in this case, need to call fput() correspondingly. > Good catch - but it's a bit confusing how we handle this case > internally, and the other error case relies on that function doing the > fput (which it does). > > Any chance we can get that cleaned up at the same time? Would make > errors in this error less likely in the future. OK, sure, will try to prepare a better one. Regards, Xiaoguang Wang >
On Fri, 27 May 2022 10:54:00 +0800, Xiaoguang Wang wrote: > io_fixed_fd_install() may fail for short of free fixed file bitmap, > in this case, need to call fput() correspondingly. > > Applied, thanks! [1/1] io_uring: ensure fput() called correspondingly when direct install fails commit: 1c145c7f3616ec48725edeac8edf26ee6ed4b661 Best regards,
diff --git a/fs/io_uring.c b/fs/io_uring.c index d50bbf8de4fb..0190947fb1bf 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -5438,6 +5438,10 @@ static int io_file_bitmap_get(struct io_ring_ctx *ctx) return -ENFILE; } +/* + * Note when io_fixed_fd_install() returns error value, it will ensure + * fput() is called correspondingly. + */ static int io_fixed_fd_install(struct io_kiocb *req, unsigned int issue_flags, struct file *file, unsigned int file_slot) { @@ -5450,6 +5454,7 @@ static int io_fixed_fd_install(struct io_kiocb *req, unsigned int issue_flags, ret = io_file_bitmap_get(ctx); if (unlikely(ret < 0)) { io_ring_submit_unlock(ctx, issue_flags); + fput(file); return ret; }
io_fixed_fd_install() may fail for short of free fixed file bitmap, in this case, need to call fput() correspondingly. Signed-off-by: Xiaoguang Wang <xiaoguang.wang@linux.alibaba.com> --- fs/io_uring.c | 5 +++++ 1 file changed, 5 insertions(+)