[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250805141123.332298-2-kbusch@meta.com>
Date: Tue, 5 Aug 2025 07:11:17 -0700
From: Keith Busch <kbusch@...a.com>
To: <linux-block@...r.kernel.org>, <linux-fsdevel@...r.kernel.org>,
<linux-kernel@...r.kernel.org>
CC: <snitzer@...nel.org>, <axboe@...nel.dk>, <dw@...idwei.uk>,
<brauner@...nel.org>, Keith Busch <kbusch@...nel.org>,
Hannes Reinecke
<hare@...e.de>
Subject: [PATCHv2 1/7] block: check for valid bio while splitting
From: Keith Busch <kbusch@...nel.org>
We're already iterating every segment, so check these for a valid IO at
the same time.
Signed-off-by: Keith Busch <kbusch@...nel.org>
Reviewed-by: Hannes Reinecke <hare@...e.de>
---
block/blk-merge.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/block/blk-merge.c b/block/blk-merge.c
index 70d704615be52..81bdad915699a 100644
--- a/block/blk-merge.c
+++ b/block/blk-merge.c
@@ -298,6 +298,9 @@ int bio_split_rw_at(struct bio *bio, const struct queue_limits *lim,
unsigned nsegs = 0, bytes = 0;
bio_for_each_bvec(bv, bio, iter) {
+ if (bv.bv_offset & lim->dma_alignment)
+ return -EINVAL;
+
/*
* If the queue doesn't support SG gaps and adding this
* offset would create a gap, disallow it.
@@ -341,6 +344,8 @@ int bio_split_rw_at(struct bio *bio, const struct queue_limits *lim,
* we do not use the full hardware limits.
*/
bytes = ALIGN_DOWN(bytes, bio_split_alignment(bio, lim));
+ if (!bytes)
+ return -EINVAL;
/*
* Bio splitting may cause subtle trouble such as hang when doing sync
--
2.47.3
Powered by blists - more mailing lists