summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Busch <kbusch@kernel.org>2025-11-11 17:06:20 +0300
committerJens Axboe <axboe@kernel.dk>2025-11-11 18:35:59 +0300
commitfd9ecd005252b595fd02ff7fcc4056251027404d (patch)
tree7ef88830c6c123267abdaa22f419a844d069359b
parent727a44027815aea13d34c28254d386562efc3bab (diff)
downloadlinux-fd9ecd005252b595fd02ff7fcc4056251027404d.tar.xz
block: fix merging data-less bios
The data segment gaps the block layer tracks doesn't apply to bio's that don't have data. Skip calculating this to fix a NULL pointer access. Fixes: 2f6b2565d43cdb5 ("block: accumulate memory segment gaps per bio") Reported-by: Matthew Wilcox <willy@infradead.org> Signed-off-by: Keith Busch <kbusch@kernel.org> Reviewed-by: Yu Kuai <yukuai@fnnas.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--block/blk-merge.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/block/blk-merge.c b/block/blk-merge.c
index 3ca6fbf8b787..d3115d7469df 100644
--- a/block/blk-merge.c
+++ b/block/blk-merge.c
@@ -737,6 +737,9 @@ u8 bio_seg_gap(struct request_queue *q, struct bio *prev, struct bio *next,
{
struct bio_vec pb, nb;
+ if (!bio_has_data(prev))
+ return 0;
+
gaps_bit = min_not_zero(gaps_bit, prev->bi_bvec_gap_bit);
gaps_bit = min_not_zero(gaps_bit, next->bi_bvec_gap_bit);