Re: [PATCH] md/raid5: complete discard bios while reshape is active
"yu kuai" <[email protected]> Fri, 31 Jul 2026 13:17:25 +0800
| Newsgroups | org.kernel.vger.linux-raid,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
=E5=9C=A8 2026/7/12 0:13, Genjian =E5=86=99=E9=81=93: > 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 *mdd= ev, struct bio *bi) > if (WARN_ON_ONCE(bi->bi_opf & REQ_NOWAIT)) > return; > =20 > - if (mddev->reshape_position !=3D MaxSector) > + if (mddev->reshape_position !=3D MaxSector) { > /* Skip discard while reshape is happening */ > + bio_endio_status(bi, BLK_STS_AGAIN); > return; > + } Rebase and applied to md-7.3 > =20 > if (!raid5_discard_limits(mddev, bi)) > return; --=20 Thanks, Kuai