io_uring: don't use retry based buffered reads for non-async bdev
authorJens Axboe <axboe@kernel.dk>
Mon, 14 Sep 2020 15:30:38 +0000 (09:30 -0600)
committerJens Axboe <axboe@kernel.dk>
Mon, 21 Sep 2020 13:50:56 +0000 (07:50 -0600)
commitf5cac8b156e8b7b67bb0fdfd19900855bf9569f3
treea54a7b2a1818cfb0b2996d6683a2d8620b17113a
parent8f3d749685e48c44dbe877ac9781079d85f914c8
io_uring: don't use retry based buffered reads for non-async bdev

Some block devices, like dm, bubble back -EAGAIN through the completion
handler. We check for this in io_read(), but don't honor it for when
we have copied the iov. Return -EAGAIN for this case before retrying,
to force punt to io-wq.

Fixes: bcf5a06304d6 ("io_uring: support true async buffered reads, if file provides it")
Reported-by: Zorro Lang <zlang@redhat.com>
Tested-by: Zorro Lang <zlang@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c