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