Attention.
You have successfully been granted the cumulative sum of $4.8 Million
USD as a family donation from Warren Edward Buffett. We decided to
give this amount to randomly selected individuals worldwide to help
fight against poverty in your region.
Kindly get back to me at your earliest convenience so I know your
email is still valid: Thank you for accepting our family donation, we
are indeed grateful.
Regards,
Warren Edward Buffett
Hi
This is backport of patches d208b89401e0 ("dm: fix mempool NULL pointer
race when completing IO") and 9f6dc6337610 ("dm: interlock pending dm_io
and dm_wait_for_bios_completion") for the kernel 4.19.
The bugs fixed by these patches can cause random crashing when reloading
dm table, so it is eligible for stable backport.
This patch is different from the upstream patches because the code
diverged significantly.
Signed-off-by: Mikulas Patocka <mpatocka(a)redhat.com>
---
drivers/md/dm.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
Index: linux-stable/drivers/md/dm.c
===================================================================
--- linux-stable.orig/drivers/md/dm.c 2022-04-19 16:28:24.000000000 +0200
+++ linux-stable/drivers/md/dm.c 2022-04-19 16:32:16.000000000 +0200
@@ -647,6 +647,8 @@ static void end_io_acct(struct dm_io *io
bio->bi_iter.bi_sector, bio_sectors(bio),
true, duration, &io->stats_aux);
+ free_io(md, io);
+
/*
* After this is decremented the bio must not be touched if it is
* a flush.
@@ -899,7 +901,6 @@ static void dec_pending(struct dm_io *io
io_error = io->status;
bio = io->orig_bio;
end_io_acct(io);
- free_io(md, io);
if (io_error == BLK_STS_DM_REQUEUE)
return;
@@ -2472,6 +2473,8 @@ static int dm_wait_for_completion(struct
}
finish_wait(&md->wait, &wait);
+ smp_rmb();
+
return r;
}