summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMikulas Patocka <mpatocka@redhat.com>2023-01-22 20:03:31 +0100
committerMike Snitzer <snitzer@kernel.org>2023-02-01 17:35:30 +0100
commit8eb29c4fbf9661e6bd4dd86197a37ffe0ecc9d50 (patch)
tree2dbe9302f36506cf8d632053d813ad9b427d45cc
parentdm flakey: don't corrupt the zero page (diff)
downloadlinux-8eb29c4fbf9661e6bd4dd86197a37ffe0ecc9d50.tar.xz
linux-8eb29c4fbf9661e6bd4dd86197a37ffe0ecc9d50.zip
dm flakey: fix a bug with 32-bit highmem systems
The function page_address does not work with 32-bit systems with high memory. Use bvec_kmap_local/kunmap_local instead. Cc: stable@vger.kernel.org Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Reviewed-by: Sweet Tea Dorminy <sweettea-kernel@dorminy.me> Signed-off-by: Mike Snitzer <snitzer@kernel.org>
-rw-r--r--drivers/md/dm-flakey.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c
index ff9ca5b2a47e..33608d436cec 100644
--- a/drivers/md/dm-flakey.c
+++ b/drivers/md/dm-flakey.c
@@ -307,8 +307,9 @@ static void corrupt_bio_data(struct bio *bio, struct flakey_c *fc)
struct page *page = bio_iter_page(bio, iter);
if (unlikely(page == ZERO_PAGE(0)))
break;
- segment = (page_address(page) + bio_iter_offset(bio, iter));
+ segment = bvec_kmap_local(&bvec);
segment[corrupt_bio_byte] = fc->corrupt_bio_value;
+ kunmap_local(segment);
DMDEBUG("Corrupting data bio=%p by writing %u to byte %u "
"(rw=%c bi_opf=%u bi_sector=%llu size=%u)\n",
bio, fc->corrupt_bio_value, fc->corrupt_bio_byte,