diff options
author | Mike Snitzer <snitzer@kernel.org> | 2022-06-21 19:37:06 +0200 |
---|---|---|
committer | Mike Snitzer <snitzer@kernel.org> | 2022-06-21 19:48:52 +0200 |
commit | 78ccef91234ba331c04d71f3ecb1377451d21056 (patch) | |
tree | d61a1bcc7c4b2491559b983349c767403d2d8f22 /drivers/md/dm.c | |
parent | dm era: commit metadata in postsuspend after worker stops (diff) | |
download | linux-78ccef91234ba331c04d71f3ecb1377451d21056.tar.xz linux-78ccef91234ba331c04d71f3ecb1377451d21056.zip |
dm: do not return early from dm_io_complete if BLK_STS_AGAIN without polling
Commit 5291984004edf ("dm: fix bio polling to handle possibile
BLK_STS_AGAIN") inadvertently introduced an early return from
dm_io_complete() without first queueing the bio to DM if BLK_STS_AGAIN
occurs and bio-polling is _not_ being used.
Fix this by only returning early from dm_io_complete() if the bio has
first been properly queued to DM. Otherwise, the bio will never finish
via bio_endio.
Fixes: 5291984004edf ("dm: fix bio polling to handle possibile BLK_STS_AGAIN")
Cc: stable@vger.kernel.org
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
Diffstat (limited to 'drivers/md/dm.c')
-rw-r--r-- | drivers/md/dm.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/md/dm.c b/drivers/md/dm.c index b6b25d319ef7..9ede55278eec 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -939,9 +939,11 @@ static void dm_io_complete(struct dm_io *io) if (io_error == BLK_STS_AGAIN) { /* io_uring doesn't handle BLK_STS_AGAIN (yet) */ queue_io(md, bio); + return; } } - return; + if (io_error == BLK_STS_DM_REQUEUE) + return; } if (bio_is_flush_with_data(bio)) { |