One customer reports a bug: raid5 is hung when changing thread cnt while resync is running. The stripes are all in conf->handle_list and new threads can't handle them. Commit b39f35ebe86d ("md: don't quiesce in mddev_suspend()") removes pers->quiesce from mddev_suspend/resume, then we can't guarantee sync requests finish in suspend operation. One personality knows itself the best. So pers->quiesce is a proper way to let personality quiesce. Fixes: b39f35ebe86d ("md: don't quiesce in mddev_suspend()") Signed-off-by: Xiao Ni <xni@xxxxxxxxxx> --- drivers/md/md.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/md/md.c b/drivers/md/md.c index 67108c397c5a..7409ecb2df68 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -482,6 +482,9 @@ int mddev_suspend(struct mddev *mddev, bool interruptible) return err; } + if (mddev->pers) + mddev->pers->quiesce(mddev, 1); + /* * For raid456, io might be waiting for reshape to make progress, * allow new reshape to start while waiting for io to be done to @@ -514,6 +517,9 @@ static void __mddev_resume(struct mddev *mddev, bool recovery_needed) percpu_ref_resurrect(&mddev->active_io); wake_up(&mddev->sb_wait); + if (mddev->pers) + mddev->pers->quiesce(mddev, 0); + if (recovery_needed) set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); md_wakeup_thread(mddev->thread); -- 2.32.0 (Apple Git-132)