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>
This commit is contained in:
parent
45a87c2f31
commit
df2647fa5b
|
@ -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;
|
||||
}
|
||||
|
||||
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",
|
||||
|
|
Loading…
Reference in New Issue