Commit b23df91b authored by Pavel Begunkov's avatar Pavel Begunkov Committed by Jens Axboe
Browse files

io_uring: highlight read-retry loop



We already have implicit do-while for read-retries but with goto in the
end. Convert it to an actual do-while, it highlights it so making a
bit more understandable and is cleaner in general.

Signed-off-by: default avatarPavel Begunkov <asml.silence@gmail.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 5ea5dd45
Loading
Loading
Loading
Loading
+20 −20
Original line number Diff line number Diff line
@@ -3566,7 +3566,8 @@ static int io_read(struct io_kiocb *req, bool force_nonblock,
	rw = req->async_data;
	/* now use our persistent iterator, if we aren't already */
	iter = &rw->iter;
retry:

	do {
		io_size -= ret;
		rw->bytes_done += ret;
		/* if we can retry, do so with the callbacks armed */
@@ -3576,17 +3577,16 @@ static int io_read(struct io_kiocb *req, bool force_nonblock,
		}

		/*
	 * Now retry read with the IOCB_WAITQ parts set in the iocb. If we
	 * get -EIOCBQUEUED, then we'll get a notification when the desired
	 * page gets unlocked. We can also get a partial read here, and if we
	 * do, then just retry at the new offset.
		 * Now retry read with the IOCB_WAITQ parts set in the iocb. If
		 * we get -EIOCBQUEUED, then we'll get a notification when the
		 * desired page gets unlocked. We can also get a partial read
		 * here, and if we do, then just retry at the new offset.
		 */
		ret = io_iter_do_read(req, iter);
		if (ret == -EIOCBQUEUED)
			return 0;
		/* we got some bytes, but not all. retry. */
	if (ret > 0 && ret < io_size)
		goto retry;
	} while (ret > 0 && ret < io_size);
done:
	kiocb_done(kiocb, ret, cs);
	return 0;