summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2005-04-04 07:16:24 +0200
committerNeil Brown <neilb@suse.de>2005-04-04 07:16:24 +0200
commitd17c1f8cbddb322f61c0b1ab4a06b5539dce4c52 (patch)
tree8e8ec89ef4bfeb0e10b86f748a4a5cb45e1ae14e
parentReread partitions file for each array being assembled. (diff)
downloadmdadm-d17c1f8cbddb322f61c0b1ab4a06b5539dce4c52.tar.xz
mdadm-d17c1f8cbddb322f61c0b1ab4a06b5539dce4c52.zip
Reverse order of arrays when --stop --scan
so that stacked arrays are stopped properly. Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
-rw-r--r--ChangeLog2
-rw-r--r--mdadm.c10
2 files changed, 12 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 8a281815..9047116c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -13,6 +13,8 @@ Changes Prior to 1.9.0 release
- Add some missing closes of open file descriptors.
- Reread /proc/partition for every array assembled when using
it to find devices, rather than only once.
+ - Make "mdadm -Ss" stop stacked devices properly, by reversing the
+ order in which arrays are stopped.
Changes Prior to 1.8.0 release
- Makefile cleanup from Luca Berra <bluca@comedia.it>
diff --git a/mdadm.c b/mdadm.c
index 79f28860..798d6386 100644
--- a/mdadm.c
+++ b/mdadm.c
@@ -793,6 +793,16 @@ int main(int argc, char *argv[])
/* apply to all devices in /proc/mdstat */
struct mdstat_ent *ms = mdstat_read(0);
struct mdstat_ent *e;
+ if (devmode == 'S') {
+ /* reverse order so that arrays made of arrays are stopped properly */
+ struct mdstat_ent *sm = NULL;
+ while ((e=ms) != NULL) {
+ ms = e->next;
+ e->next = sm;
+ sm = e;
+ }
+ ms = sm;
+ }
for (e=ms ; e ; e=e->next) {
char *name = get_md_name(e->devnum);