Skip to contentSkip to conversation

io_uring: ensure read requests go through -ERESTART* transformation

PATCH New Jens Axboe 1 participant 1 message Aug 25, 2020

Subsystems (2)
lore
Share & tools
lore

Jens Axboe

author maintainer
#0 lore raw

PATCH 1/1 io_uring: ensure read requests go through -ERESTART* transformation

We need to call kiocb_done() for any ret < 0 to ensure that we always get the proper -ERESTARTSYS (and friends) transformation done.

At some point this should be tied into general error handling, so we can get rid of the various (mostly network) related commands that check and perform this substitution.

---

fs/io_uring.c +2 -1
index d15139088e4c..d9b88644d5e8 100644
@@ -3160,7 +3160,8 @@ static int io_read(struct io_kiocb *req, bool force_nonblock,
 			goto out_free;
 		return -EAGAIN;
 	} else if (ret < 0) {
-		goto out_free;
+		/* make sure -ERESTARTSYS -> -EINTR is done */
+		goto done;
 	}
 
 	/* read it all, or we did blocking attempt. no retry. */
Signature · 1 line
Jens Axboe