io_uring: honor IOSQE_ASYNC for linked reqs
authorPavel Begunkov <asml.silence@gmail.com>
Wed, 22 Jan 2020 20:09:36 +0000 (23:09 +0300)
committerJens Axboe <axboe@kernel.dk>
Wed, 22 Jan 2020 20:57:48 +0000 (13:57 -0700)
REQ_F_FORCE_ASYNC is checked only for the head of a link. Fix it.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c

index cdbc711..9f73586 100644 (file)
@@ -4512,6 +4512,7 @@ again:
         */
        if (ret == -EAGAIN && (!(req->flags & REQ_F_NOWAIT) ||
            (req->flags & REQ_F_MUST_PUNT))) {
+punt:
                if (req->work.flags & IO_WQ_WORK_NEEDS_FILES) {
                        ret = io_grab_files(req);
                        if (ret)
@@ -4547,6 +4548,9 @@ done_req:
        if (nxt) {
                req = nxt;
                nxt = NULL;
+
+               if (req->flags & REQ_F_FORCE_ASYNC)
+                       goto punt;
                goto again;
        }
 }