summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2011-03-23 15:42:35 +1100
committerNeilBrown <neilb@suse.de>2011-03-23 15:42:35 +1100
commitebdc4d125346c3514600a8c2d7455e1817e10e2c (patch)
treee44acdb4516f4d52d72437672fe18219f99f7480
parentfb0d4b9ca2fca333d82fabd1a7aa55e138e83910 (diff)
downloadmdadm-ebdc4d125346c3514600a8c2d7455e1817e10e2c.tar.gz
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.c19
-rw-r--r--mdadm.h1
-rw-r--r--util.c7
3 files changed, 8 insertions, 19 deletions
diff --git a/Incremental.c b/Incremental.c
index 4d3d181..46badc9 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);
diff --git a/mdadm.h b/mdadm.h
index f5367bf..bb293f4 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -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);
diff --git a/util.c b/util.c
index cbefaba..b42056d 100644
--- a/util.c
+++ b/util.c
@@ -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