Re: [PATCH] md/raid5: complete discard bios while reshape is active
"genjian zhang" <[email protected]> Tue, 21 Jul 2026 14:48:19 +0800 (CST)
| Newsgroups | org.kernel.vger.linux-raid,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
At 2026-07-19 20:54:42, "yu kuai" <[email protected]> wrote: >Hi, > >在 2026/7/12 0:13, Genjian 写道: >> From: Genjian Zhang <[email protected]> >> >> make_discard_request() returns without completing the bio when reshape >> is in progress. Discard callers block in submit_bio_wait() >> waiting for a completion that never arrives. The caller hangs in >> uninterruptible sleep, and this does not resolve when reshape finishes. >> >> Complete the bio with BLK_STS_AGAIN so userspace can retry after reshape, >> consistent with the existing policy of not processing discard during >> reshape. >> >> Tested on a loop-backed RAID5 array during mdadm --grow: without this >> patch, blkdiscard hangs in bio_await() and remains in uninterruptible >> sleep after md reports "reshape done"; with this patch it returns >> -EAGAIN instead. >> >> Signed-off-by: Genjian Zhang <[email protected]> >> --- >> drivers/md/raid5.c | 4 +++- >> 1 file changed, 3 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c >> index ffb5fcde54a9..4c3b42b2af85 100644 >> --- a/drivers/md/raid5.c >> +++ b/drivers/md/raid5.c >> @@ -5722,9 +5722,11 @@ static void make_discard_request(struct mddev *mddev, struct bio *bi) >> if (WARN_ON_ONCE(bi->bi_opf & REQ_NOWAIT)) >> return; > >As nowait will be removed soon, I'm fine leaving it here. > >Reviewed-by: Yu Kuai <[email protected]> > >> >> - if (mddev->reshape_position != MaxSector) >> + if (mddev->reshape_position != MaxSector) { >> /* Skip discard while reshape is happening */ >> + bio_endio_status(bi, BLK_STS_AGAIN); >> return; >> + } >> >> if (!raid5_discard_limits(mddev, bi)) >> return; > >-- >Thanks, >Kuai Thanks for the review. I'll leave the REQ_NOWAIT path unchanged and won't send a v2 for it. Thanks, Genjian