If the IO is marked as readahead. When it is failed, it would better to pass it to upper layer to handle it. Consender the following situation: dm-verity is built over a dm device. 'dm_submit_bio()' will return IO error when dm device is suspended. And IO get nothing, but it will goto FEC, and trigger more IO on the suspended device. It's a vicious circle. Signed-off-by: Wu Bo <bo.wu@xxxxxxxx> --- drivers/md/dm-verity-target.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/md/dm-verity-target.c b/drivers/md/dm-verity-target.c index 26adcfea0302..253e65b4160e 100644 --- a/drivers/md/dm-verity-target.c +++ b/drivers/md/dm-verity-target.c @@ -667,7 +667,9 @@ static void verity_end_io(struct bio *bio) struct dm_verity_io *io = bio->bi_private; if (bio->bi_status && - (!verity_fec_is_enabled(io->v) || verity_is_system_shutting_down())) { + (!verity_fec_is_enabled(io->v) || + verity_is_system_shutting_down() || + (bio->bi_opf & REQ_RAHEAD))) { verity_finish_io(io, bio->bi_status); return; } -- 2.25.1