--- /dev/null
+From 355afaeb578abac907217c256a844cfafb0337b2 Mon Sep 17 00:00:00 2001
+From: Jens Axboe <axboe@kernel.dk>
+Date: Wed, 2 Sep 2020 09:30:31 -0600
+Subject: io_uring: no read/write-retry on -EAGAIN error and O_NONBLOCK marked file
+
+From: Jens Axboe <axboe@kernel.dk>
+
+commit 355afaeb578abac907217c256a844cfafb0337b2 upstream.
+
+Actually two things that need fixing up here:
+
+- The io_rw_reissue() -EAGAIN retry is explicit to block devices and
+ regular files, so don't ever attempt to do that on other types of
+ files.
+
+- If we hit -EAGAIN on a nonblock marked file, don't arm poll handler for
+ it. It should just complete with -EAGAIN.
+
+Cc: stable@vger.kernel.org
+Reported-by: Norman Maurer <norman.maurer@googlemail.com>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/io_uring.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+--- a/fs/io_uring.c
++++ b/fs/io_uring.c
+@@ -2697,8 +2697,15 @@ static int io_read(struct io_kiocb *req,
+ else
+ ret2 = -EINVAL;
+
++ /* no retry on NONBLOCK marked file */
++ if (ret2 == -EAGAIN && (req->file->f_flags & O_NONBLOCK)) {
++ ret = 0;
++ goto done;
++ }
++
+ /* Catch -EAGAIN return for forced non-blocking submission */
+ if (!force_nonblock || ret2 != -EAGAIN) {
++ done:
+ kiocb_done(kiocb, ret2);
+ } else {
+ copy_iov:
+@@ -2823,7 +2830,13 @@ static int io_write(struct io_kiocb *req
+ */
+ if (ret2 == -EOPNOTSUPP && (kiocb->ki_flags & IOCB_NOWAIT))
+ ret2 = -EAGAIN;
++ /* no retry on NONBLOCK marked file */
++ if (ret2 == -EAGAIN && (req->file->f_flags & O_NONBLOCK)) {
++ ret = 0;
++ goto done;
++ }
+ if (!force_nonblock || ret2 != -EAGAIN) {
++done:
+ kiocb_done(kiocb, ret2);
+ } else {
+ copy_iov: