summaryrefslogtreecommitdiffstats
path: root/mdadm.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2009-10-22 11:13:13 +1100
committerNeilBrown <neilb@suse.de>2009-10-22 11:13:13 +1100
commit4a997737a14f580e3addfa1db6be005c37e7c0f4 (patch)
tree2bb5c80319e81728d54822d5b930098746c07057 /mdadm.c
parent9739642288555dae607ee4aa0eec0e9245cecf74 (diff)
parent0eb26465c0a14d707ca00f4f7bcdb67bde36f706 (diff)
downloadmdadm-4a997737a14f580e3addfa1db6be005c37e7c0f4.tar.gz
mdadm-4a997737a14f580e3addfa1db6be005c37e7c0f4.tar.xz
mdadm-4a997737a14f580e3addfa1db6be005c37e7c0f4.zip
Merge branch 'master' into devel-3.1
Diffstat (limited to 'mdadm.c')
-rw-r--r--mdadm.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/mdadm.c b/mdadm.c
index a4f2d90..0c51d63 100644
--- a/mdadm.c
+++ b/mdadm.c
@@ -91,6 +91,7 @@ int main(int argc, char *argv[])
int require_homehost = 1;
char *mailaddr = NULL;
char *program = NULL;
+ int increments = 20;
int delay = 0;
int daemonise = 0;
char *pidfile = NULL;
@@ -714,6 +715,14 @@ int main(int argc, char *argv[])
program = optarg;
continue;
+ case O(MONITOR,'r'): /* rebuild increments */
+ increments = atoi(optarg);
+ if (increments>99 || increments<1) {
+ fprintf(stderr, Name ": please specify positive integer between 1 and 99 as rebuild increments.\n");
+ exit(2);
+ }
+ continue;
+
case O(MONITOR,'d'): /* delay in seconds */
case O(GROW, 'd'):
case O(BUILD,'d'): /* delay for bitmap updates */
@@ -1270,11 +1279,18 @@ int main(int argc, char *argv[])
struct mdstat_ent *ms = mdstat_read(0, 1);
struct mdstat_ent *e;
struct map_ent *map = NULL;
+ int members;
int v = verbose>1?0:verbose+1;
+ for (members = 0; members <= 1; members++) {
for (e=ms ; e ; e=e->next) {
char *name;
struct map_ent *me;
+ int member = e->metadata_version &&
+ strncmp(e->metadata_version,
+ "external:/", 10) == 0;
+ if (members != member)
+ continue;
me = map_by_devnum(&map, e->devnum);
if (me && me->path
&& strcmp(me->path, "/unknown") != 0)
@@ -1292,9 +1308,10 @@ int main(int argc, char *argv[])
export, test,
homehost);
else
- rv |= WaitClean(name, v);
+ rv |= WaitClean(name, -1, v);
put_md_name(name);
}
+ }
free_mdstat(ms);
} else if (devmode == 'S' && scan) {
/* apply --stop to all devices in /proc/mdstat */
@@ -1353,7 +1370,7 @@ int main(int argc, char *argv[])
case 'W':
rv |= Wait(dv->devname); continue;
case Waitclean:
- rv |= WaitClean(dv->devname, verbose-quiet); continue;
+ rv |= WaitClean(dv->devname, -1, verbose-quiet); continue;
}
mdfd = open_mddev(dv->devname, 1);
if (mdfd>=0) {
@@ -1393,7 +1410,7 @@ int main(int argc, char *argv[])
}
rv= Monitor(devlist, mailaddr, program,
delay?delay:60, daemonise, scan, oneshot,
- dosyslog, test, pidfile);
+ dosyslog, test, pidfile, increments);
break;
case GROW: