summaryrefslogtreecommitdiff
path: root/fs/io_uring.c
diff options
context:
space:
mode:
authorPavel Begunkov <asml.silence@gmail.com>2020-06-27 14:04:58 +0300
committerJens Axboe <axboe@kernel.dk>2020-06-28 08:10:17 -0600
commit710c2bfb66474a186b0196e3342d43db0e6c04e1 (patch)
tree134f39e34c3111421582a042629003b5e3174e50 /fs/io_uring.c
parenta6d45dd0d43e6d1275e002704540688b6768bc22 (diff)
downloadlwn-710c2bfb66474a186b0196e3342d43db0e6c04e1.tar.gz
lwn-710c2bfb66474a186b0196e3342d43db0e6c04e1.zip
io_uring: fix missing io_grab_files()
We won't have valid ring_fd, ring_file in task work. Grab files early. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'fs/io_uring.c')
-rw-r--r--fs/io_uring.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/fs/io_uring.c b/fs/io_uring.c
index 545b137c7b4a..4a9929c0b4ad 100644
--- a/fs/io_uring.c
+++ b/fs/io_uring.c
@@ -5270,15 +5270,15 @@ static int io_req_defer_prep(struct io_kiocb *req,
if (!sqe)
return 0;
- if (for_async || (req->flags & REQ_F_WORK_INITIALIZED)) {
+ if (io_op_defs[req->opcode].file_table) {
io_req_init_async(req);
+ ret = io_grab_files(req);
+ if (unlikely(ret))
+ return ret;
+ }
- if (io_op_defs[req->opcode].file_table) {
- ret = io_grab_files(req);
- if (unlikely(ret))
- return ret;
- }
-
+ if (for_async || (req->flags & REQ_F_WORK_INITIALIZED)) {
+ io_req_init_async(req);
io_req_work_grab_env(req, &io_op_defs[req->opcode]);
}