diff options
author | NeilBrown <neilb@suse.de> | 2009-10-22 11:13:13 +1100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2009-10-22 11:13:13 +1100 |
commit | 4a997737a14f580e3addfa1db6be005c37e7c0f4 (patch) | |
tree | 2bb5c80319e81728d54822d5b930098746c07057 /mdadm.c | |
parent | 9739642288555dae607ee4aa0eec0e9245cecf74 (diff) | |
parent | 0eb26465c0a14d707ca00f4f7bcdb67bde36f706 (diff) | |
download | mdadm-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.c | 23 |
1 files changed, 20 insertions, 3 deletions
@@ -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: |