if (mdstat)
free_mdstat(mdstat);
- mdstat = mdstat_read();
+ mdstat = mdstat_read(oneshot?0:1);
for (st=statelist; st; st=st->next) {
mdu_array_info_t array;
- struct mdstat_ent *mse;
+ struct mdstat_ent *mse = NULL, *mse2;
char *dev = st->devname;
int fd;
unsigned int i;
struct stat stb;
if (fstat(fd, &stb) == 0 &&
(S_IFMT&stb.st_mode)==S_IFBLK) {
- if (MINOR(stb.st_rdev) == 9)
+ if (MAJOR(stb.st_rdev) == MD_MAJOR)
st->devnum = MINOR(stb.st_rdev);
else
st->devnum = -1- (MINOR(stb.st_rdev)>>6);
}
}
- for (mse = mdstat ; mse ; mse=mse->next)
- if (mse->devnum == st->devnum)
- mse->devnum = MAXINT; /* flag it as "used" */
+ for (mse2 = mdstat ; mse2 ; mse2=mse2->next)
+ if (mse2->devnum == st->devnum) {
+ mse2->devnum = MAXINT; /* flag it as "used" */
+ mse = mse2;
+ }
if (st->utime == array.utime &&
st->failed == array.failed_disks &&
free(st);
continue;
}
+ close(fd);
st->utime = 0;
st->next = statelist;
st->err = 1;
if (oneshot)
break;
else
- sleep(period);
+ mdstat_wait(period);
}
test = 0;
}