block: make sure ->nr_integrity_segments is cloned in blk_rq_prep_clone

JIRA: https://issues.redhat.com/browse/RHEL-80794

commit fc0e982b8a3a169b1c654d9a1aa45bf292943ef2
Author: Ming Lei <ming.lei@redhat.com>
Date:   Mon Mar 10 19:54:53 2025 +0800

    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: b0fd271d5f ("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>

Signed-off-by: Ming Lei <ming.lei@redhat.com>
This commit is contained in:
Ming Lei 2025-03-10 19:54:53 +08:00
parent 1f469896e7
commit 832f0eaadd
1 changed files with 1 additions and 0 deletions

View File

@ -3314,6 +3314,7 @@ int blk_rq_prep_clone(struct request *rq, struct request *rq_src,
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;