int devstate[MaxDisks];
unsigned devid[MaxDisks];
int percent;
+ int parent_dev; /* For subarray, devnum of parent.
+ * For others, NoMdDev
+ */
+ struct supertype *metadata;
struct state *next;
} *statelist = NULL;
int finished = 0;
} else
info[i].major = info[i].minor = 0;
}
+
+ if (strncmp(mse->metadata_version, "external:", 9) == 0 &&
+ is_subarray(mse->metadata_version+9))
+ st->parent_dev =
+ devname2devnum(mse->metadata_version+10);
+ else
+ st->parent_dev = NoMdDev;
+ if (st->metadata == NULL &&
+ st->parent_dev == NoMdDev)
+ st->metadata = super_by_fd(fd, NULL);
+
close(fd);
for (i=0; i<MaxDisks; i++) {
if (fd >=0) close(fd);
put_md_name(st->devname);
free(st->devname);
+ if (st->metadata) {
+ st->metadata->ss->free_super(st->metadata);
+ free(st->metadata);
+ }
free(st);
continue;
}
st->percent = -2;
st->spare_group = NULL;
st->expected_spares = -1;
+ if (strncmp(mse->metadata_version, "external:", 9) == 0 &&
+ is_subarray(mse->metadata_version+9))
+ st->parent_dev =
+ devname2devnum(mse->metadata_version+10);
+ else
+ st->parent_dev = NoMdDev;
+ st->metadata = NULL;
statelist = st;
if (test)
alert("TestMessage", st->devname, NULL, mailaddr, mailfrom, alert_cmd, dosyslog);