if (devlist == NULL) {
mddev_ident_t mdlist = conf_get_ident(NULL);
for (; mdlist; mdlist=mdlist->next) {
- struct state *st = malloc(sizeof *st);
+ struct state *st;
+ if (mdlist->devname == NULL)
+ continue;
+ st = malloc(sizeof *st);
if (st == NULL)
continue;
st->devname = strdup(mdlist->devname);
st->spare_group = NULL;
st->expected_spares = -1;
statelist = st;
+ if (test)
+ alert("TestMessage", st->devname, NULL, mailaddr, mailfrom, alert_cmd, dosyslog);
alert("NewArray", st->devname, NULL, mailaddr, mailfrom, alert_cmd, dosyslog);
new_found = 1;
}
break;
if (!e || e->percent < 0) {
- if (e &&
+ if (e && e->metadata_version &&
strncmp(e->metadata_version, "external:", 9) == 0) {
if (is_subarray(&e->metadata_version[9]))
ping_monitor(&e->metadata_version[9]);
free_mdstat(ms);
return rv;
}
- free(ms);
+ free_mdstat(ms);
rv = 0;
mdstat_wait(5);
}
static char *clean_states[] = {
"clear", "inactive", "readonly", "read-auto", "clean", NULL };
-int WaitClean(char *dev)
+int WaitClean(char *dev, int verbose)
{
int fd;
struct mdinfo *mdi;
fd = open(dev, O_RDONLY);
if (fd < 0) {
- fprintf(stderr, Name ": Couldn't open %s: %s\n", dev, strerror(errno));
+ if (verbose)
+ fprintf(stderr, Name ": Couldn't open %s: %s\n", dev, strerror(errno));
return 1;
}
devnum = fd2devnum(fd);
mdi = sysfs_read(fd, devnum, GET_VERSION|GET_LEVEL|GET_SAFEMODE);
if (!mdi) {
- fprintf(stderr, Name ": Failed to read sysfs attributes for "
- "%s\n", dev);
+ if (verbose)
+ fprintf(stderr, Name ": Failed to read sysfs attributes for "
+ "%s\n", dev);
close(fd);
return 0;
}
rv = 0;
} else
rv = 1;
- if (rv)
+ if (rv && verbose)
fprintf(stderr, Name ": Error waiting for %s to be clean\n",
dev);