From: NeilBrown Date: Tue, 1 Feb 2011 02:07:36 +0000 (+1100) Subject: Incr: don't exclude 'active' devices from auto inclusion in a container. X-Git-Tag: mdadm-3.2~9 X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fmdadm.git;a=commitdiff_plain;h=e5e5d7cea390fd33d6be09ee6d8a47bc7695eb50;hp=ac597b1c2134b4342df3c957fa054c34e522bee9 Incr: don't exclude 'active' devices from auto inclusion in a container. For containers, it is always appropriate to include a device in the container. Whether it should then be included in an array is a separate question. Signed-off-by: NeilBrown --- diff --git a/Incremental.c b/Incremental.c index 7a4906dd..0d0a1fdc 100644 --- a/Incremental.c +++ b/Incremental.c @@ -358,22 +358,17 @@ int Incremental(char *devname, int verbose, int runstop, * array was possibly started early and our best bet is * to add this anyway. * Also if action policy is re-add or better we allow - * re-add + * re-add. + * This doesn't apply to containers as the 'non-spare' + * flag has a different meaning. The test has to happen + * at the device level there */ - if ((info.disk.state & (1<ss->external + && (info.disk.state & (1<ss->name, act_re_add) && runstop < 1) { - int active = 0; - - if (st->ss->external) { - char *devname = devnum2devname(fd2devnum(mdfd)); - - active = devname && is_container_active(devname); - free(devname); - } else if (ioctl(mdfd, GET_ARRAY_INFO, &ainf) == 0) - active = 1; - if (active) { + if (ioctl(mdfd, GET_ARRAY_INFO, &ainf) == 0) { fprintf(stderr, Name ": not adding %s to active array (without --run) %s\n", devname, chosen_name); diff --git a/mdadm.h b/mdadm.h index 8fa3af46..608095f4 100644 --- a/mdadm.h +++ b/mdadm.h @@ -1164,7 +1164,6 @@ extern int open_mddev(char *dev, int report_errors); extern int open_container(int fd); extern int is_container_member(struct mdstat_ent *ent, char *devname); extern int is_subarray_active(char *subarray, char *devname); -int is_container_active(char *devname); extern int open_subarray(char *dev, char *subarray, struct supertype *st, int quiet); extern struct superswitch *version_to_superswitch(char *vers); diff --git a/util.c b/util.c index 38750b24..a0d8283c 100644 --- a/util.c +++ b/util.c @@ -1490,8 +1490,7 @@ int is_subarray_active(char *subarray, char *container) for (ent = mdstat; ent; ent = ent->next) if (is_container_member(ent, container)) - if (!subarray || - strcmp(to_subarray(ent, container), subarray) == 0) + if (strcmp(to_subarray(ent, container), subarray) == 0) break; free_mdstat(mdstat); @@ -1499,11 +1498,6 @@ int is_subarray_active(char *subarray, char *container) return ent != NULL; } -int is_container_active(char *container) -{ - return is_subarray_active(NULL, container); -} - /* open_subarray - opens a subarray in a container * @dev: container device name * @st: empty supertype