summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2008-11-26 15:39:50 -0700
committerNeilBrown <neilb@suse.de>2008-11-27 15:30:21 +1100
commitfabbfd48b6c2398a344d2d4f7cbf0ab98181a6d4 (patch)
treea3e73bc19b2350fe7741073618221e6a8e5b4dff
parent614825ea825ac70ba847cd87e3beafcc557c6273 (diff)
downloadmdadm-fabbfd48b6c2398a344d2d4f7cbf0ab98181a6d4.tar.gz
mdadm-fabbfd48b6c2398a344d2d4f7cbf0ab98181a6d4.tar.xz
mdadm-fabbfd48b6c2398a344d2d4f7cbf0ab98181a6d4.zip
Support --wait-clean --scan
Its cumbersome to determine which devices to wait for in a system shutdown script, so hook up --scan. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
-rw-r--r--mdadm.89
-rw-r--r--mdadm.c16
2 files changed, 17 insertions, 8 deletions
diff --git a/mdadm.8 b/mdadm.8
index 4322419..539d499 100644
--- a/mdadm.8
+++ b/mdadm.8
@@ -1081,10 +1081,11 @@ listed, otherwise it will return failure.
.TP
.BR \-\-wait\-clean
-For each md device given, arrange for the array to be marked clean as
-soon as possible. Also, quiesce resync so that the monitor for external
-metadata arrays (mdmon) has an opportunity to checkpoint the resync
-position.
+For each md device given, or each device in /proc/mdstat if
+.B \-\-scan
+is given, arrange for the array to be marked clean as soon as possible.
+Also, quiesce resync so that the monitor for external metadata arrays
+(mdmon) has an opportunity to checkpoint the resync position.
.I mdadm
will return with success if the array uses external metadata and we
successfully waited. For native arrays this returns immediately as the
diff --git a/mdadm.c b/mdadm.c
index e0f51b7..4101c5b 100644
--- a/mdadm.c
+++ b/mdadm.c
@@ -1213,10 +1213,14 @@ int main(int argc, char *argv[])
SparcAdjust, ss, homehost);
} else {
if (devlist == NULL) {
- if (devmode=='D' && scan) {
- /* apply --detail to all devices in /proc/mdstat */
+ if ((devmode=='D' || devmode == Waitclean) && scan) {
+ /* apply --detail or --wait-clean to
+ * all devices in /proc/mdstat
+ */
struct mdstat_ent *ms = mdstat_read(0, 1);
struct mdstat_ent *e;
+ int v = verbose>1?0:verbose+1;
+
for (e=ms ; e ; e=e->next) {
char *name = get_md_name(e->devnum);
@@ -1225,8 +1229,12 @@ int main(int argc, char *argv[])
e->dev);
continue;
}
- rv |= Detail(name, verbose>1?0:verbose+1,
- export, test, homehost);
+ if (devmode == 'D')
+ rv |= Detail(name, v,
+ export, test,
+ homehost);
+ else
+ rv |= WaitClean(name, v);
put_md_name(name);
}
} else if (devmode == 'S' && scan) {