Commit bee1d5be authored by Jens Axboe's avatar Jens Axboe

io_uring: disable io-wq execution of multishot NOWAIT requests

Do the same check for direct io-wq execution for multishot requests that
commit 2a975d42 did for the inline execution, and disable multishot
mode (and revert to single shot) if the file type doesn't support NOWAIT,
and isn't opened in O_NONBLOCK mode. For multishot to work properly, it's
a requirement that nonblocking read attempts can be done.

Cc: stable@vger.kernel.org
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 2a975d42
...@@ -1982,10 +1982,15 @@ void io_wq_submit_work(struct io_wq_work *work) ...@@ -1982,10 +1982,15 @@ void io_wq_submit_work(struct io_wq_work *work)
err = -EBADFD; err = -EBADFD;
if (!io_file_can_poll(req)) if (!io_file_can_poll(req))
goto fail; goto fail;
if (req->file->f_flags & O_NONBLOCK ||
req->file->f_mode & FMODE_NOWAIT) {
err = -ECANCELED; err = -ECANCELED;
if (io_arm_poll_handler(req, issue_flags) != IO_APOLL_OK) if (io_arm_poll_handler(req, issue_flags) != IO_APOLL_OK)
goto fail; goto fail;
return; return;
} else {
req->flags &= ~REQ_F_APOLL_MULTISHOT;
}
} }
if (req->flags & REQ_F_FORCE_ASYNC) { if (req->flags & REQ_F_FORCE_ASYNC) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment