Grow: use mdstat_wait to wait for delayed reshape.
Having a fix time for a wait is clumsy and can make us wait much too long. So use mdstat_wait and keep the mdstat_fd open. This requires an 'mdstat_close' so it doesn't stay open forever. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
b4924f46c0
commit
a7a0d8a116
6
Grow.c
6
Grow.c
|
@ -3228,7 +3228,7 @@ started:
|
|||
do {
|
||||
struct mdstat_ent *mds, *m;
|
||||
delayed = 0;
|
||||
mds = mdstat_read(0, 0);
|
||||
mds = mdstat_read(1, 0);
|
||||
for (m = mds; m; m = m->next)
|
||||
if (strcmp(m->devnm, sra->sys_name) == 0) {
|
||||
if (m->resync &&
|
||||
|
@ -3248,9 +3248,9 @@ started:
|
|||
delayed = 0;
|
||||
}
|
||||
if (delayed)
|
||||
sleep(30 - (delayed-1) * 25);
|
||||
mdstat_wait(30 - (delayed-1) * 25);
|
||||
} while (delayed);
|
||||
|
||||
mdstat_close();
|
||||
close(fd);
|
||||
if (check_env("MDADM_GROW_VERIFY"))
|
||||
fd = open(devname, O_RDONLY | O_DIRECT);
|
||||
|
|
1
mdadm.h
1
mdadm.h
|
@ -465,6 +465,7 @@ struct mdstat_ent {
|
|||
};
|
||||
|
||||
extern struct mdstat_ent *mdstat_read(int hold, int start);
|
||||
extern void mdstat_close(void);
|
||||
extern void free_mdstat(struct mdstat_ent *ms);
|
||||
extern void mdstat_wait(int seconds);
|
||||
extern void mdstat_wait_fd(int fd, const sigset_t *sigmask);
|
||||
|
|
Loading…
Reference in New Issue