You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
2.0 KiB
58 lines
2.0 KiB
2 months ago
|
From 568259859cafeefbf54354c19405cf2292da4b4a Mon Sep 17 00:00:00 2001
|
||
|
From: Xiao Ni <xni@redhat.com>
|
||
|
Date: Wed, 11 Sep 2024 16:54:24 +0800
|
||
|
Subject: [PATCH 175/201] mdadm/Grow: Update reshape_progress to need_back
|
||
|
after reshape finishes
|
||
|
|
||
|
It tries to update data offset when kicking off reshape. If it can't
|
||
|
change data offset, it needs to use child_monitor to monitor reshape
|
||
|
progress and do back up job. And it needs to update reshape_progress
|
||
|
to need_back when reshape finishes. If not, it will be in a infinite
|
||
|
loop.
|
||
|
|
||
|
Signed-off-by: Xiao Ni <xni@redhat.com>
|
||
|
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||
|
---
|
||
|
Grow.c | 14 ++++++++++----
|
||
|
1 file changed, 10 insertions(+), 4 deletions(-)
|
||
|
|
||
|
diff --git a/Grow.c b/Grow.c
|
||
|
index 533f3014..3b9f9942 100644
|
||
|
--- a/Grow.c
|
||
|
+++ b/Grow.c
|
||
|
@@ -4148,8 +4148,8 @@ int progress_reshape(struct mdinfo *info, struct reshape *reshape,
|
||
|
* waiting forever on a dead array
|
||
|
*/
|
||
|
char action[SYSFS_MAX_BUF_SIZE];
|
||
|
- if (sysfs_get_str(info, NULL, "sync_action", action, sizeof(action)) <= 0 ||
|
||
|
- strncmp(action, "reshape", 7) != 0)
|
||
|
+
|
||
|
+ if (sysfs_get_str(info, NULL, "sync_action", action, sizeof(action)) <= 0)
|
||
|
break;
|
||
|
/* Some kernels reset 'sync_completed' to zero
|
||
|
* before setting 'sync_action' to 'idle'.
|
||
|
@@ -4157,12 +4157,18 @@ int progress_reshape(struct mdinfo *info, struct reshape *reshape,
|
||
|
*/
|
||
|
if (completed == 0 && advancing &&
|
||
|
strncmp(action, "idle", 4) == 0 &&
|
||
|
- info->reshape_progress > 0)
|
||
|
+ info->reshape_progress > 0) {
|
||
|
+ info->reshape_progress = need_backup;
|
||
|
break;
|
||
|
+ }
|
||
|
if (completed == 0 && !advancing &&
|
||
|
strncmp(action, "idle", 4) == 0 &&
|
||
|
info->reshape_progress <
|
||
|
- (info->component_size * reshape->after.data_disks))
|
||
|
+ (info->component_size * reshape->after.data_disks)) {
|
||
|
+ info->reshape_progress = need_backup;
|
||
|
+ break;
|
||
|
+ }
|
||
|
+ if (strncmp(action, "reshape", 7) != 0)
|
||
|
break;
|
||
|
sysfs_wait(fd, NULL);
|
||
|
if (sysfs_fd_get_ll(fd, &completed) < 0)
|
||
|
--
|
||
|
2.41.0
|
||
|
|