Jens Axboe b63534c41e io_uring: re-issue block requests that failed because of resources
Mark the plug with nowait == true, which will cause requests to avoid
blocking on request allocation. If they do, we catch them and reissue
them from a task_work based handler.

Normally we can catch -EAGAIN directly, but the hard case is for split
requests. As an example, the application issues a 512KB request. The
block core will split this into 128KB if that's the max size for the
device. The first request issues just fine, but we run into -EAGAIN for
some latter splits for the same request. As the bio is split, we don't
get to see the -EAGAIN until one of the actual reads complete, and hence
we cannot handle it inline as part of submission.

This does potentially cause re-reads of parts of the range, as the whole
request is reissued. There's currently no better way to handle this.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
2020-06-21 20:44:25 -06:00
..
2020-03-27 09:29:56 +00:00
2020-06-14 09:47:25 -07:00
2020-06-01 12:10:17 -07:00
2020-06-05 16:43:16 -07:00
2020-06-02 20:16:55 -07:00
2020-06-09 11:24:59 -07:00
2020-06-09 11:28:59 -07:00
2020-06-09 15:48:24 -07:00
2020-06-08 12:47:09 -07:00
2020-06-02 15:29:19 -07:00
2020-06-13 12:44:30 -07:00
2020-06-02 15:29:19 -07:00
2020-06-02 20:11:35 -07:00
2020-06-11 12:22:41 -07:00
2020-06-11 10:33:13 -07:00
2020-06-09 15:40:50 -07:00
\n
2020-06-04 13:53:10 -07:00
2020-06-05 14:05:57 -07:00
2020-06-02 15:29:19 -07:00
2020-06-13 12:40:24 -07:00
2020-06-04 13:50:13 -07:00
2020-06-14 09:47:25 -07:00
2020-05-14 16:44:25 +02:00
2020-06-05 16:26:36 -07:00
2020-06-15 08:51:38 -06:00
2020-06-11 10:33:13 -07:00
2020-05-14 16:44:24 +02:00
2020-06-02 19:45:12 -07:00
2020-06-09 15:40:50 -07:00
2020-05-14 16:44:24 +02:00
2020-04-09 15:33:09 -04:00