33 lines
1.2 KiB
Diff
33 lines
1.2 KiB
Diff
From f4511f63677bd3e7831561b1407a69a71cb519bc Mon Sep 17 00:00:00 2001
|
|
From: Ming Lei <ming.lei@redhat.com>
|
|
Date: Mon, 10 Mar 2025 19:54:53 +0800
|
|
Subject: block: make sure ->nr_integrity_segments is cloned in
|
|
blk_rq_prep_clone
|
|
|
|
Make sure ->nr_integrity_segments is cloned in blk_rq_prep_clone(),
|
|
otherwise requests cloned by device-mapper multipath will not have the
|
|
proper nr_integrity_segments values set, then BUG() is hit from
|
|
sg_alloc_table_chained().
|
|
|
|
Fixes: b0fd271d5fba ("block: add request clone interface (v2)")
|
|
Cc: stable@vger.kernel.org
|
|
Cc: Christoph Hellwig <hch@infradead.org>
|
|
Signed-off-by: Ming Lei <ming.lei@redhat.com>
|
|
Reviewed-by: Christoph Hellwig <hch@lst.de>
|
|
Link: https://lore.kernel.org/r/20250310115453.2271109-1-ming.lei@redhat.com
|
|
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
|
---
|
|
block/blk-mq.c | 1 +
|
|
1 file changed, 1 insertion(+)
|
|
|
|
--- a/block/blk-mq.c
|
|
+++ b/block/blk-mq.c
|
|
@@ -3314,6 +3314,7 @@ int blk_rq_prep_clone(struct request *rq
|
|
rq->special_vec = rq_src->special_vec;
|
|
}
|
|
rq->nr_phys_segments = rq_src->nr_phys_segments;
|
|
+ rq->nr_integrity_segments = rq_src->nr_integrity_segments;
|
|
|
|
if (rq->bio && blk_crypto_rq_bio_prep(rq, rq->bio, gfp_mask) < 0)
|
|
goto free_and_out;
|