From fabbfd48b6c2398a344d2d4f7cbf0ab98181a6d4 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Wed, 26 Nov 2008 15:39:50 -0700 Subject: [PATCH] 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 --- mdadm.8 | 9 +++++---- mdadm.c | 16 ++++++++++++---- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/mdadm.8 b/mdadm.8 index 43224195..539d499f 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 e0f51b7f..4101c5b6 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) { -- 2.39.2