diff mbox series

md/dm-raid: don't clear MD_RECOVERY_FROZEN after setting frozen

Message ID 20240601090608.2847814-1-linan666@huaweicloud.com (mailing list archive)
State New, archived
Headers show
Series md/dm-raid: don't clear MD_RECOVERY_FROZEN after setting frozen | expand

Commit Message

Li Nan June 1, 2024, 9:06 a.m. UTC
From: Li Nan <linan122@huawei.com>

MD_RECOVERY_FROZEN should always remain set after array is frozen. But
in raid_message(), this flag is cleared soon after frozen. Fix it. This
flag will be cleared in md_idle_sync_thread(), there is no need to clear
it again for idle.

Fixes: cd32b27a66db ("md/dm-raid: don't call md_reap_sync_thread() directly")
Signed-off-by: Li Nan <linan122@huawei.com>
---
 drivers/md/dm-raid.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Yu Kuai June 3, 2024, 2:50 a.m. UTC | #1
在 2024/06/01 17:06, linan666@huaweicloud.com 写道:
> From: Li Nan <linan122@huawei.com>
> 
> MD_RECOVERY_FROZEN should always remain set after array is frozen. But
> in raid_message(), this flag is cleared soon after frozen. Fix it. This
> flag will be cleared in md_idle_sync_thread(), there is no need to clear
> it again for idle.
> 
> Fixes: cd32b27a66db ("md/dm-raid: don't call md_reap_sync_thread() directly")
> Signed-off-by: Li Nan <linan122@huawei.com>
> ---
>   drivers/md/dm-raid.c | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c
> index abe88d1e6735..466740a3a522 100644
> --- a/drivers/md/dm-raid.c
> +++ b/drivers/md/dm-raid.c
> @@ -3744,9 +3744,10 @@ static int raid_message(struct dm_target *ti, unsigned int argc, char **argv,
>   
>   		md_idle_sync_thread(mddev);
>   		mddev_unlock(mddev);
> +	} else {
> +		clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
>   	}
>   
> -	clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);

LGTM
Reviewed-by: Yu Kuai <yukuai3@huawei.com>

>   	if (decipher_sync_action(mddev, mddev->recovery) != st_idle)
>   		return -EBUSY;
>   	else if (!strcasecmp(argv[0], "resync"))
>
diff mbox series

Patch

diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c
index abe88d1e6735..466740a3a522 100644
--- a/drivers/md/dm-raid.c
+++ b/drivers/md/dm-raid.c
@@ -3744,9 +3744,10 @@  static int raid_message(struct dm_target *ti, unsigned int argc, char **argv,
 
 		md_idle_sync_thread(mddev);
 		mddev_unlock(mddev);
+	} else {
+		clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
 	}
 
-	clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
 	if (decipher_sync_action(mddev, mddev->recovery) != st_idle)
 		return -EBUSY;
 	else if (!strcasecmp(argv[0], "resync"))