diff options
author | NeilBrown <neilb@suse.de> | 2011-03-23 05:42:35 +0100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2011-03-23 05:42:35 +0100 |
commit | ebdc4d125346c3514600a8c2d7455e1817e10e2c (patch) | |
tree | e44acdb4516f4d52d72437672fe18219f99f7480 | |
parent | --stop: separate 'is busy' test for 'did it stop properly'. (diff) | |
download | mdadm-ebdc4d125346c3514600a8c2d7455e1817e10e2c.tar.xz mdadm-ebdc4d125346c3514600a8c2d7455e1817e10e2c.zip |
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 <neilb@suse.de>
-rw-r--r-- | Incremental.c | 19 | ||||
-rw-r--r-- | mdadm.h | 1 | ||||
-rw-r--r-- | util.c | 7 |
3 files changed, 8 insertions, 19 deletions
diff --git a/Incremental.c b/Incremental.c index 4d3d181b..46badc9d 100644 --- a/Incremental.c +++ b/Incremental.c @@ -375,20 +375,15 @@ int Incremental(char *devname, int verbose, int runstop, * they failed. However if runstop is 1, then the * array was possibly started early and our best be is * to add this anyway. It would probably be good to - * allow explicit policy statement about this. + * allow explicit policy statement about this.. + * 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<<MD_DISK_SYNC)) != 0 + if (!st->ss->external + && (info.disk.state & (1<<MD_DISK_SYNC)) != 0 && 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); @@ -936,7 +936,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, struct supertype *st, int quiet); extern struct superswitch *version_to_superswitch(char *vers); @@ -1471,7 +1471,7 @@ int is_subarray_active(char *subarray, char *container) if (is_container_member(ent, container)) { char *inst = &ent->metadata_version[10+strlen(container)+1]; - if (!subarray || strcmp(inst, subarray) == 0) + if (strcmp(inst, subarray) == 0) break; } } @@ -1481,11 +1481,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: supertype with only ->subarray set |