summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--managemon.c2
-rw-r--r--mdadm.h5
-rw-r--r--util.c11
3 files changed, 10 insertions, 8 deletions
diff --git a/managemon.c b/managemon.c
index b6f99252..fbf61888 100644
--- a/managemon.c
+++ b/managemon.c
@@ -511,7 +511,7 @@ static void manage_new(struct mdstat_ent *mdstat,
new->container = container;
- inst = &mdstat->metadata_version[10+strlen(container->devname)+1];
+ inst = to_subarray(mdstat, container->devname);
new->info.array = mdi->array;
new->info.component_size = mdi->component_size;
diff --git a/mdadm.h b/mdadm.h
index 22e3d2cf..a44bb2a9 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -1110,6 +1110,11 @@ static inline int is_subarray(char *vers)
return (*vers == '/' || *vers == '-');
}
+static inline char *to_subarray(struct mdstat_ent *ent, char *container)
+{
+ return &ent->metadata_version[10+strlen(container)+1];
+}
+
#ifdef DEBUG
#define dprintf(fmt, arg...) \
fprintf(stderr, fmt, ##arg)
diff --git a/util.c b/util.c
index 1ecce3b8..ad2ec923 100644
--- a/util.c
+++ b/util.c
@@ -1449,14 +1449,11 @@ int is_subarray_active(char *subarray, char *container)
struct mdstat_ent *mdstat = mdstat_read(0, 0);
struct mdstat_ent *ent;
- for (ent = mdstat; ent; ent = ent->next) {
- if (is_container_member(ent, container)) {
- char *inst = &ent->metadata_version[10+strlen(container)+1];
-
- if (!subarray || strcmp(inst, subarray) == 0)
+ for (ent = mdstat; ent; ent = ent->next)
+ if (is_container_member(ent, container))
+ if (!subarray ||
+ strcmp(to_subarray(ent, container), subarray) == 0)
break;
- }
- }
free_mdstat(mdstat);