On 13/03/2020 23:28, Pavel Begunkov wrote: > Hmm, found unreliably failing the across-fork test. I don't know whether it's > this patch specific, but need to take a look there first. It's good to go, just used outdated tests. The reproducer is attached. > >> >> Signed-off-by: Pavel Begunkov >> --- >> fs/io_uring.c | 8 ++++++++ >> 1 file changed, 8 insertions(+) >> >> diff --git a/fs/io_uring.c b/fs/io_uring.c >> index 55afae6f0cf4..9d43efbec960 100644 >> --- a/fs/io_uring.c >> +++ b/fs/io_uring.c >> @@ -4813,6 +4813,9 @@ static int io_req_defer_prep(struct io_kiocb *req, >> { >> ssize_t ret = 0; >> >> + if (!sqe) >> + return 0; >> + >> if (io_op_defs[req->opcode].file_table) { >> ret = io_grab_files(req); >> if (unlikely(ret)) >> @@ -5655,6 +5658,11 @@ static bool io_submit_sqe(struct io_kiocb *req, const struct io_uring_sqe *sqe, >> if (sqe_flags & (IOSQE_IO_LINK|IOSQE_IO_HARDLINK)) { >> req->flags |= REQ_F_LINK; >> INIT_LIST_HEAD(&req->link_list); >> + >> + if (io_alloc_async_ctx(req)) { >> + ret = -EAGAIN; >> + goto err_req; >> + } >> ret = io_req_defer_prep(req, sqe); >> if (ret) >> req->flags |= REQ_F_FAIL_LINK; >> > -- Pavel Begunkov