Linux RAID subsystem development
 help / color / mirror / Atom feed
* [PATCH 0/3] md: raid helper cleanups
@ 2026-08-27  7:56 Li Youhong
  2026-08-27  7:56 ` [PATCH 1/3] md: add rdev_record_write_error() helper Li Youhong
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Li Youhong @ 2026-08-27  7:56 UTC (permalink / raw)
  To: song, yukuai; +Cc: magiclinan, xiao, linux-raid, Li Youhong

From: Li Youhong <liyouhong@kylinos.cn>

This series factors a few repeated md/raid patterns into small helpers.
There is no intentional behaviour change; each patch is a mechanical
extract of existing logic.

Patch 1 adds rdev_record_write_error() in md.h for the
WriteErrorSeen + WantReplacement + MD_RECOVERY_NEEDED sequence shared by
raid1, raid10 and raid5.

Patches 2 and 3 move raid1/raid10-only helpers into raid1-10.c, which is
#included by both drivers:

  - rdev_bb_block_sectors() for the badblocks-aligned block size used in
    narrow_write_error()
  - flush_bio_list() for the bitmap plug flush path previously duplicated
    in raid10's flush_pending_writes() and raid10_unplug()

The helpers in raid1-10.c follow the existing static inline convention
used by raid1_submit_write(), check_decay_read_errors(), and others in
that file.

Li Youhong (3):
      md: add rdev_record_write_error() helper
      md/raid1-10: add rdev_bb_block_sectors() helper
      md/raid1-10: share flush_bio_list between raid1 and raid10
---
 drivers/md/md.h       |  7 +++++++
 drivers/md/raid1-10.c | 27 +++++++++++++++++++++++++++
 drivers/md/raid1.c    | 42 +++++++-----------------------------------
 drivers/md/raid10.c   | 50 +++++++-------------------------------------------
 drivers/md/raid5.c    |  5 +----
 5 files changed, 48 insertions(+), 83 deletions(-)


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/3] md: add rdev_record_write_error() helper
  2026-08-27  7:56 [PATCH 0/3] md: raid helper cleanups Li Youhong
@ 2026-08-27  7:56 ` Li Youhong
  2026-08-27  7:56 ` [PATCH 2/3] md/raid1-10: add rdev_bb_block_sectors() helper Li Youhong
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Li Youhong @ 2026-08-27  7:56 UTC (permalink / raw)
  To: song, yukuai; +Cc: magiclinan, xiao, linux-raid, Li Youhong

From: Li Youhong <liyouhong@kylinos.cn>

The WriteErrorSeen + WantReplacement + MD_RECOVERY_NEEDED sequence is
duplicated across raid1, raid10 and raid5. Factor it into a small
inline helper for readability. No functional change.

Signed-off-by: Li Youhong <liyouhong@kylinos.cn>
---
 drivers/md/md.h     |  7 +++++++
 drivers/md/raid1.c  | 16 +++-------------
 drivers/md/raid10.c | 21 ++++-----------------
 drivers/md/raid5.c  |  5 +----
 4 files changed, 15 insertions(+), 34 deletions(-)

diff --git a/drivers/md/md.h b/drivers/md/md.h
index b6d2e8929a0f..6440da292105 100644
--- a/drivers/md/md.h
+++ b/drivers/md/md.h
@@ -989,6 +989,13 @@ static inline void rdev_dec_pending(struct md_rdev *rdev, struct mddev *mddev)
 	}
 }
 
+static inline void rdev_record_write_error(struct md_rdev *rdev)
+{
+	set_bit(WriteErrorSeen, &rdev->flags);
+	if (!test_and_set_bit(WantReplacement, &rdev->flags))
+		set_bit(MD_RECOVERY_NEEDED, &rdev->mddev->recovery);
+}
+
 static inline int mddev_is_clustered(struct mddev *mddev)
 {
 	return mddev->cluster_info && mddev->bitmap_info.nodes > 1;
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index f0646fb24371..9d8441348f14 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -483,10 +483,7 @@ static void raid1_end_write_request(struct bio *bio)
 	 * 'one mirror IO has finished' event handler:
 	 */
 	if (bio->bi_status && !ignore_error) {
-		set_bit(WriteErrorSeen,	&rdev->flags);
-		if (!test_and_set_bit(WantReplacement, &rdev->flags))
-			set_bit(MD_RECOVERY_NEEDED, &
-				conf->mddev->recovery);
+		rdev_record_write_error(rdev);
 
 		if (test_bit(FailFast, &rdev->flags) &&
 		    (bio->bi_opf & MD_FAILFAST) &&
@@ -2067,10 +2064,7 @@ static void end_sync_write(struct bio *bio)
 
 	if (bio->bi_status) {
 		abort_sync_write(mddev, r1_bio);
-		set_bit(WriteErrorSeen, &rdev->flags);
-		if (!test_and_set_bit(WantReplacement, &rdev->flags))
-			set_bit(MD_RECOVERY_NEEDED, &
-				mddev->recovery);
+		rdev_record_write_error(rdev);
 		set_bit(R1BIO_WriteError, &r1_bio->state);
 	} else if (rdev_has_badblock(rdev, r1_bio->sector, r1_bio->sectors) &&
 		   !rdev_has_badblock(conf->mirrors[r1_bio->read_disk].rdev,
@@ -2088,11 +2082,7 @@ static int r1_sync_page_io(struct md_rdev *rdev, sector_t sector,
 		/* success */
 		return 1;
 	if (rw == REQ_OP_WRITE) {
-		set_bit(WriteErrorSeen, &rdev->flags);
-		if (!test_and_set_bit(WantReplacement,
-				      &rdev->flags))
-			set_bit(MD_RECOVERY_NEEDED, &
-				rdev->mddev->recovery);
+		rdev_record_write_error(rdev);
 	}
 	/* need to record an error - either for the block or the device */
 	rdev_set_badblocks(rdev, sector, sectors, 0);
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 1093c798d9dd..c4218d6483ed 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -496,10 +496,7 @@ static void raid10_end_write_request(struct bio *bio)
 			 */
 			md_error(rdev->mddev, rdev);
 		else {
-			set_bit(WriteErrorSeen,	&rdev->flags);
-			if (!test_and_set_bit(WantReplacement, &rdev->flags))
-				set_bit(MD_RECOVERY_NEEDED,
-					&rdev->mddev->recovery);
+			rdev_record_write_error(rdev);
 
 			dec_rdev = 0;
 			if (test_bit(FailFast, &rdev->flags) &&
@@ -2299,10 +2296,7 @@ static void end_sync_write(struct bio *bio)
 		if (repl)
 			md_error(mddev, rdev);
 		else {
-			set_bit(WriteErrorSeen, &rdev->flags);
-			if (!test_and_set_bit(WantReplacement, &rdev->flags))
-				set_bit(MD_RECOVERY_NEEDED,
-					&rdev->mddev->recovery);
+			rdev_record_write_error(rdev);
 			set_bit(R10BIO_WriteError, &r10_bio->state);
 		}
 	} else if (rdev_has_badblock(rdev, r10_bio->devs[slot].addr,
@@ -2500,11 +2494,7 @@ static void fix_recovery_read_error(struct r10bio *r10_bio)
 					  pages[idx],
 					  REQ_OP_WRITE, false);
 			if (!ok) {
-				set_bit(WriteErrorSeen, &rdev->flags);
-				if (!test_and_set_bit(WantReplacement,
-						      &rdev->flags))
-					set_bit(MD_RECOVERY_NEEDED,
-						&rdev->mddev->recovery);
+				rdev_record_write_error(rdev);
 			}
 		}
 		if (!ok) {
@@ -2585,10 +2575,7 @@ static int r10_sync_page_io(struct md_rdev *rdev, sector_t sector,
 		/* success */
 		return 1;
 	if (op == REQ_OP_WRITE) {
-		set_bit(WriteErrorSeen, &rdev->flags);
-		if (!test_and_set_bit(WantReplacement, &rdev->flags))
-			set_bit(MD_RECOVERY_NEEDED,
-				&rdev->mddev->recovery);
+		rdev_record_write_error(rdev);
 	}
 	/* need to record an error - either for the block or the device */
 	rdev_set_badblocks(rdev, sector, sectors, 0);
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index b91545ce090d..caacc06c52c5 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -2888,11 +2888,8 @@ static void raid5_end_write_request(struct bio *bi)
 			set_bit(R5_MadeGoodRepl, &sh->dev[i].flags);
 	} else {
 		if (bi->bi_status) {
-			set_bit(WriteErrorSeen, &rdev->flags);
+			rdev_record_write_error(rdev);
 			set_bit(R5_WriteError, &sh->dev[i].flags);
-			if (!test_and_set_bit(WantReplacement, &rdev->flags))
-				set_bit(MD_RECOVERY_NEEDED,
-					&rdev->mddev->recovery);
 		} else if (rdev_has_badblock(rdev, sh->sector,
 					     RAID5_STRIPE_SECTORS(conf))) {
 			set_bit(R5_MadeGood, &sh->dev[i].flags);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/3] md/raid1-10: add rdev_bb_block_sectors() helper
  2026-08-27  7:56 [PATCH 0/3] md: raid helper cleanups Li Youhong
  2026-08-27  7:56 ` [PATCH 1/3] md: add rdev_record_write_error() helper Li Youhong
@ 2026-08-27  7:56 ` Li Youhong
  2026-08-27  8:15   ` sashiko-bot
  2026-08-27  7:56 ` [PATCH 3/3] md/raid1-10: share flush_bio_list between raid1 and raid10 Li Youhong
  2026-09-05  2:43 ` [PATCH 0/3] md: raid helper cleanups yu kuai
  3 siblings, 1 reply; 6+ messages in thread
From: Li Youhong @ 2026-08-27  7:56 UTC (permalink / raw)
  To: song, yukuai; +Cc: magiclinan, xiao, linux-raid, Li Youhong

From: Li Youhong <liyouhong@kylinos.cn>

raid1 and raid10 narrow_write_error() use the same logic to compute the
badblocks-aligned block size. Factor it into an inline helper in
raid1-10.c. No functional change.

Signed-off-by: Li Youhong <liyouhong@kylinos.cn>
---
 drivers/md/raid1-10.c | 10 ++++++++++
 drivers/md/raid1.c    |  7 +------
 drivers/md/raid10.c   |  7 +------
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/drivers/md/raid1-10.c b/drivers/md/raid1-10.c
index 3b0e230692ba..c7ddf136771d 100644
--- a/drivers/md/raid1-10.c
+++ b/drivers/md/raid1-10.c
@@ -155,6 +155,16 @@ static inline bool raid1_add_bio_to_plug(struct mddev *mddev, struct bio *bio,
 	return true;
 }
 
+/* Block size used when narrowing a write error down to badblocks granularity. */
+static inline int rdev_bb_block_sectors(struct md_rdev *rdev)
+{
+	int lbs = bdev_logical_block_size(rdev->bdev) >> 9;
+
+	if (rdev->badblocks.shift < 0)
+		return lbs;
+	return roundup(1 << rdev->badblocks.shift, lbs);
+}
+
 /*
  * current->bio_list will be set under submit_bio() context, in this case bitmap
  * io will be added to the list and wait for current io submission to finish,
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index 9d8441348f14..8a40c69d70a3 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -2465,16 +2465,11 @@ static void narrow_write_error(struct r1bio *r1_bio, int i)
 	 * We currently own a reference on the rdev.
 	 */
 
-	int block_sectors, lbs = bdev_logical_block_size(rdev->bdev) >> 9;
+	int block_sectors = rdev_bb_block_sectors(rdev);
 	sector_t sector;
 	int sectors;
 	int sect_to_write = r1_bio->sectors;
 
-	if (rdev->badblocks.shift < 0)
-		block_sectors = lbs;
-	else
-		block_sectors = roundup(1 << rdev->badblocks.shift, lbs);
-
 	sector = r1_bio->sector;
 	sectors = ((sector + block_sectors)
 		   & ~(sector_t)(block_sectors - 1))
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index c4218d6483ed..5b1dbb0b7f5a 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -2762,16 +2762,11 @@ static void narrow_write_error(struct r10bio *r10_bio, int i)
 	 * We currently own a reference to the rdev.
 	 */
 
-	int block_sectors, lbs = bdev_logical_block_size(rdev->bdev) >> 9;
+	int block_sectors = rdev_bb_block_sectors(rdev);
 	sector_t sector;
 	int sectors;
 	int sect_to_write = r10_bio->sectors;
 
-	if (rdev->badblocks.shift < 0)
-		block_sectors = lbs;
-	else
-		block_sectors = roundup(1 << rdev->badblocks.shift, lbs);
-
 	sector = r10_bio->sector;
 	sectors = ((r10_bio->sector + block_sectors)
 		   & ~(sector_t)(block_sectors - 1))
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/3] md/raid1-10: share flush_bio_list between raid1 and raid10
  2026-08-27  7:56 [PATCH 0/3] md: raid helper cleanups Li Youhong
  2026-08-27  7:56 ` [PATCH 1/3] md: add rdev_record_write_error() helper Li Youhong
  2026-08-27  7:56 ` [PATCH 2/3] md/raid1-10: add rdev_bb_block_sectors() helper Li Youhong
@ 2026-08-27  7:56 ` Li Youhong
  2026-09-05  2:43 ` [PATCH 0/3] md: raid helper cleanups yu kuai
  3 siblings, 0 replies; 6+ messages in thread
From: Li Youhong @ 2026-08-27  7:56 UTC (permalink / raw)
  To: song, yukuai; +Cc: magiclinan, xiao, linux-raid, Li Youhong

From: Li Youhong <liyouhong@kylinos.cn>

raid1 already had flush_bio_list(); raid10 open-coded the same
prepare/wake/submit loop in flush_pending_writes() and
raid10_unplug(). Move a shared helper into raid1-10.c.

The shared helper uses wq_has_sleeper() before wake_up(), matching
raid1's wake_up_barrier() and raid10_unplug(). No intentional
functional change.

Signed-off-by: Li Youhong <liyouhong@kylinos.cn>
---
 drivers/md/raid1-10.c | 17 +++++++++++++++++
 drivers/md/raid1.c    | 19 ++-----------------
 drivers/md/raid10.c   | 22 ++--------------------
 3 files changed, 21 insertions(+), 37 deletions(-)

diff --git a/drivers/md/raid1-10.c b/drivers/md/raid1-10.c
index c7ddf136771d..476682110ea3 100644
--- a/drivers/md/raid1-10.c
+++ b/drivers/md/raid1-10.c
@@ -176,6 +176,23 @@ static inline void raid1_prepare_flush_writes(struct mddev *mddev)
 	mddev->bitmap_ops->unplug(mddev, current->bio_list == NULL);
 }
 
+static inline void flush_bio_list(struct mddev *mddev, struct bio *bio,
+				wait_queue_head_t *wait)
+{
+	/* flush any pending bitmap writes to disk before proceeding w/ I/O */
+	raid1_prepare_flush_writes(mddev);
+	if (wq_has_sleeper(wait))
+		wake_up(wait);
+
+	while (bio) { /* submit pending writes */
+		struct bio *next = bio->bi_next;
+
+		raid1_submit_write(bio);
+		bio = next;
+		cond_resched();
+	}
+}
+
 /*
  * Used by fix_read_error() to decay the per rdev read_errors.
  * We halve the read error count for every hour that has elapsed
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index 8a40c69d70a3..894efb50c6d5 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -919,21 +919,6 @@ static void wake_up_barrier(struct r1conf *conf)
 		wake_up(&conf->wait_barrier);
 }
 
-static void flush_bio_list(struct r1conf *conf, struct bio *bio)
-{
-	/* flush any pending bitmap writes to disk before proceeding w/ I/O */
-	raid1_prepare_flush_writes(conf->mddev);
-	wake_up_barrier(conf);
-
-	while (bio) { /* submit pending writes */
-		struct bio *next = bio->bi_next;
-
-		raid1_submit_write(bio);
-		bio = next;
-		cond_resched();
-	}
-}
-
 static void flush_pending_writes(struct r1conf *conf)
 {
 	/* Any writes that have been queued but are awaiting
@@ -959,7 +944,7 @@ static void flush_pending_writes(struct r1conf *conf)
 		 */
 		__set_current_state(TASK_RUNNING);
 		blk_start_plug(&plug);
-		flush_bio_list(conf, bio);
+		flush_bio_list(conf->mddev, bio, &conf->wait_barrier);
 		blk_finish_plug(&plug);
 	} else
 		spin_unlock_irq(&conf->device_lock);
@@ -1289,7 +1274,7 @@ static void raid1_unplug(struct blk_plug_cb *cb, bool from_schedule)
 
 	/* we aren't scheduling, so we can do the write-out directly. */
 	bio = bio_list_get(&plug->pending);
-	flush_bio_list(conf, bio);
+	flush_bio_list(conf->mddev, bio, &conf->wait_barrier);
 	kfree(plug);
 }
 
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 5b1dbb0b7f5a..85d2c9364565 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -895,16 +895,7 @@ static void flush_pending_writes(struct r10conf *conf)
 		__set_current_state(TASK_RUNNING);
 
 		blk_start_plug(&plug);
-		raid1_prepare_flush_writes(conf->mddev);
-		wake_up(&conf->wait_barrier);
-
-		while (bio) { /* submit pending writes */
-			struct bio *next = bio->bi_next;
-
-			raid1_submit_write(bio);
-			bio = next;
-			cond_resched();
-		}
+		flush_bio_list(conf->mddev, bio, &conf->wait_barrier);
 		blk_finish_plug(&plug);
 	} else
 		spin_unlock_irq(&conf->device_lock);
@@ -1101,16 +1092,7 @@ static void raid10_unplug(struct blk_plug_cb *cb, bool from_schedule)
 
 	/* we aren't scheduling, so we can do the write-out directly. */
 	bio = bio_list_get(&plug->pending);
-	raid1_prepare_flush_writes(mddev);
-	wake_up_barrier(conf);
-
-	while (bio) { /* submit pending writes */
-		struct bio *next = bio->bi_next;
-
-		raid1_submit_write(bio);
-		bio = next;
-		cond_resched();
-	}
+	flush_bio_list(mddev, bio, &conf->wait_barrier);
 	kfree(plug);
 }
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 2/3] md/raid1-10: add rdev_bb_block_sectors() helper
  2026-08-27  7:56 ` [PATCH 2/3] md/raid1-10: add rdev_bb_block_sectors() helper Li Youhong
@ 2026-08-27  8:15   ` sashiko-bot
  0 siblings, 0 replies; 6+ messages in thread
From: sashiko-bot @ 2026-08-27  8:15 UTC (permalink / raw)
  To: Li Youhong; +Cc: linux-raid, yukuai

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:

Pre-existing issues:
- [High] Converting a data-less bio (e.g., REQ_OP_SECURE_ERASE) to REQ_OP_WRITE causes a NULL pointer dereference in error handling.
--

commit 7d28d3b35b9395eb9bc70edade7e6a8cd0c8563e
Author: Li Youhong <liyouhong@kylinos.cn>

md/raid1-10: add rdev_bb_block_sectors() helper

This commit factors out the badblocks-aligned block size computation
logic used in both RAID1 and RAID10 into a new inline helper function,
rdev_bb_block_sectors(). The refactoring simplifies narrow_write_error()
in both drivers.

> diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
> index 9d8441348f14a..8a40c69d70a37 100644
> --- a/drivers/md/raid1.c
> +++ b/drivers/md/raid1.c
> @@ -2465,16 +2465,11 @@ static void narrow_write_error(struct r1bio *r1_bio, int i)
>  	 * We currently own a reference on the rdev.
>  	 */
>  
> -	int block_sectors, lbs = bdev_logical_block_size(rdev->bdev) >> 9;
> +	int block_sectors = rdev_bb_block_sectors(rdev);

[Severity: High]
This is a pre-existing issue, but while reviewing the refactoring in
narrow_write_error(), I noticed a potential problem further down in the
function.

If a dataless write operation such as REQ_OP_SECURE_ERASE is issued and fails
on an underlying drive, the error handling path clones the failing dataless
master bio (which lacks data buffers and has bi_io_vec == NULL) and does the
following:

drivers/md/raid1.c:narrow_write_error() {
    ...
    wbio->bi_opf = REQ_OP_WRITE;
    wbio->bi_iter.bi_sector = r1_bio->sector;
    wbio->bi_iter.bi_size = r1_bio->sectors << 9;
    ...
}

By unconditionally setting REQ_OP_WRITE without providing a data vector, does
this turn a dataless operation into an illegal write?

When this modified bio is trimmed or submitted to the block layer, the block
core and underlying drivers will treat it as a standard data-carrying write
and attempt to iterate over its missing data bvecs. Can this cause a NULL
pointer dereference and kernel panic?

The exact same buggy behavior also exists in raid10 error handling:

drivers/md/raid10.c:narrow_write_error() {
    ...
    wbio->bi_iter.bi_sector = wsector +
                              choose_data_offset(r10_bio, rdev);
    wbio->bi_opf = REQ_OP_WRITE;
    ...
}

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260827075620.3599227-1-dayou5941@163.com?part=2

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/3] md: raid helper cleanups
  2026-08-27  7:56 [PATCH 0/3] md: raid helper cleanups Li Youhong
                   ` (2 preceding siblings ...)
  2026-08-27  7:56 ` [PATCH 3/3] md/raid1-10: share flush_bio_list between raid1 and raid10 Li Youhong
@ 2026-09-05  2:43 ` yu kuai
  3 siblings, 0 replies; 6+ messages in thread
From: yu kuai @ 2026-09-05  2:43 UTC (permalink / raw)
  To: Li Youhong, song, yu kuai; +Cc: magiclinan, xiao, linux-raid, Li Youhong

在 2026/8/27 15:56, Li Youhong 写道:

> From: Li Youhong <liyouhong@kylinos.cn>
>
> This series factors a few repeated md/raid patterns into small helpers.
> There is no intentional behaviour change; each patch is a mechanical
> extract of existing logic.
>
> Patch 1 adds rdev_record_write_error() in md.h for the
> WriteErrorSeen + WantReplacement + MD_RECOVERY_NEEDED sequence shared by
> raid1, raid10 and raid5.
>
> Patches 2 and 3 move raid1/raid10-only helpers into raid1-10.c, which is
> #included by both drivers:
>
>    - rdev_bb_block_sectors() for the badblocks-aligned block size used in
>      narrow_write_error()
>    - flush_bio_list() for the bitmap plug flush path previously duplicated
>      in raid10's flush_pending_writes() and raid10_unplug()
>
> The helpers in raid1-10.c follow the existing static inline convention
> used by raid1_submit_write(), check_decay_read_errors(), and others in
> that file.
>
> Li Youhong (3):
>        md: add rdev_record_write_error() helper
>        md/raid1-10: add rdev_bb_block_sectors() helper
>        md/raid1-10: share flush_bio_list between raid1 and raid10
> ---
>   drivers/md/md.h       |  7 +++++++
>   drivers/md/raid1-10.c | 27 +++++++++++++++++++++++++++
>   drivers/md/raid1.c    | 42 +++++++-----------------------------------
>   drivers/md/raid10.c   | 50 +++++++-------------------------------------------
>   drivers/md/raid5.c    |  5 +----
>   5 files changed, 48 insertions(+), 83 deletions(-)

Reviewed-by: Yu Kuai <yukuai@fygo.io>

Noted only bug fix can be accepted for current merge window, cleanup patches
will be applied later for 6.4.

-- 
Thanks,
Kuai

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-09-05  2:44 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-27  7:56 [PATCH 0/3] md: raid helper cleanups Li Youhong
2026-08-27  7:56 ` [PATCH 1/3] md: add rdev_record_write_error() helper Li Youhong
2026-08-27  7:56 ` [PATCH 2/3] md/raid1-10: add rdev_bb_block_sectors() helper Li Youhong
2026-08-27  8:15   ` sashiko-bot
2026-08-27  7:56 ` [PATCH 3/3] md/raid1-10: share flush_bio_list between raid1 and raid10 Li Youhong
2026-09-05  2:43 ` [PATCH 0/3] md: raid helper cleanups yu kuai

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox