summaryrefslogtreecommitdiff
path: root/Monitor.c
diff options
context:
space:
mode:
Diffstat (limited to 'Monitor.c')
-rw-r--r--Monitor.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/Monitor.c b/Monitor.c
index bbf46d6..2ca5ee1 100644
--- a/Monitor.c
+++ b/Monitor.c
@@ -97,6 +97,10 @@ int Monitor(struct mddev_dev *devlist,
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;
@@ -391,6 +395,17 @@ int Monitor(struct mddev_dev *devlist,
} 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++) {
@@ -472,6 +487,10 @@ int Monitor(struct mddev_dev *devlist,
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;
}
@@ -483,6 +502,13 @@ int Monitor(struct mddev_dev *devlist,
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);