diff options
author | Ming Lei <ming.lei@redhat.com> | 2022-04-01 16:47:32 +0300 |
---|---|---|
committer | Mike Snitzer <snitzer@kernel.org> | 2022-04-01 20:23:12 +0300 |
commit | 5291984004edfcc7510024e52eaed044573b79c7 (patch) | |
tree | 886bcb0cc01c81100aa0cff22679cf942ddb5db2 /include | |
parent | aad5b23ebf21573a32b6f07644f028d64492a5d6 (diff) | |
download | linux-5291984004edfcc7510024e52eaed044573b79c7.tar.xz |
dm: fix bio polling to handle possibile BLK_STS_AGAIN
Expanded testing of DM's bio polling support (using more fio threads
to dm-linear ontop of null_blk) exposed the possibility for polled
bios to hang (repeatedly polling in io_uring) when null_blk responds
with BLK_STS_AGAIN (due to lack of resources):
1) io_complete_rw_iopoll() is called from blkdev_bio_end_io_async() to
notify kiocb is done, that is the completion interface between block
layer and io_uring
2) io_complete_rw_iopoll() is called from io_do_iopoll()
3) dm returns BLK_STS_AGAIN for one bio (on behalf of underlying
driver), then io_complete_rw_iopoll is called, but io_do_iopoll()
doesn't handle -EAGAIN at all (due to logic in io_rw_should_reissue)
4) reason for dm's BLK_STS_AGAIN is underlying null_blk driver ran out
of requests (easier to reproduce by setting low hw_queue_depth).
5) dm should handle BLK_STS_AGAIN for POLLED underlying IO, and may
retry in dm layer.
This fix adds REQ_POLLED specific BLK_STS_AGAIN handling to
dm_io_complete() that clears REQ_POLLED and requeues the bio to DM
using queue_io().
Fixes: b99fdcdc3636 ("dm: support bio polling")
Signed-off-by: Ming Lei <ming.lei@redhat.com>
[snitzer: revised header, reused dm_io_complete's REQ_POLLED case]
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
Diffstat (limited to 'include')
0 files changed, 0 insertions, 0 deletions