6e2d10d9a3
Resolves: bz#1303380 Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
57 lines
1.8 KiB
Diff
57 lines
1.8 KiB
Diff
From df2647fa5bbe84960dae11531e34bafef549b8ff Mon Sep 17 00:00:00 2001
|
|
From: Pawel Baldysiak <pawel.baldysiak@intel.com>
|
|
Date: Tue, 17 May 2016 13:24:41 +0200
|
|
Subject: [PATCH] IMSM: retry reading sync_completed during reshape
|
|
|
|
The sync_completed after restarting a reshape
|
|
(for example - after reboot) is set to "delayed" until
|
|
mdmon changes the state. Mdadm does not wait for that change with
|
|
old kernels. If this condition occurs - it exits and reshape
|
|
is not continuing. This patch adds retry of reading sync_complete
|
|
with a delay. It gives time for mdmon to change the "delayed" state.
|
|
|
|
Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
|
|
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
|
|
---
|
|
super-intel.c | 17 ++++++++++++-----
|
|
1 file changed, 12 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/super-intel.c b/super-intel.c
|
|
index ba3ee48..7e2860c 100644
|
|
--- a/super-intel.c
|
|
+++ b/super-intel.c
|
|
@@ -10378,6 +10378,7 @@ exit_imsm_reshape_super:
|
|
int wait_for_reshape_imsm(struct mdinfo *sra, int ndata)
|
|
{
|
|
int fd = sysfs_get_fd(sra, NULL, "sync_completed");
|
|
+ int retry = 3;
|
|
unsigned long long completed;
|
|
/* to_complete : new sync_max position */
|
|
unsigned long long to_complete = sra->reshape_progress;
|
|
@@ -10388,11 +10389,17 @@ int wait_for_reshape_imsm(struct mdinfo *sra, int ndata)
|
|
return 1;
|
|
}
|
|
|
|
- if (sysfs_fd_get_ll(fd, &completed) < 0) {
|
|
- dprintf("cannot read reshape_position (no reshape in progres)\n");
|
|
- close(fd);
|
|
- return 1;
|
|
- }
|
|
+ do {
|
|
+ if (sysfs_fd_get_ll(fd, &completed) < 0) {
|
|
+ if (!retry) {
|
|
+ dprintf("cannot read reshape_position (no reshape in progres)\n");
|
|
+ close(fd);
|
|
+ return 1;
|
|
+ }
|
|
+ usleep(30000);
|
|
+ } else
|
|
+ break;
|
|
+ } while (retry--);
|
|
|
|
if (completed > position_to_set) {
|
|
dprintf("wrong next position to set %llu (%llu)\n",
|
|
--
|
|
2.5.5
|
|
|