summaryrefslogtreecommitdiffstats
path: root/mdadm.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2009-11-24 16:32:01 +1100
committerNeilBrown <neilb@suse.de>2009-11-24 16:32:01 +1100
commit9277cc7752ae6eb4b10dff7b5fc9ec75d3d52b66 (patch)
tree08d95ee3f170369863288356c84e45d87b93d876 /mdadm.c
parent40bc78f5cd292d90917cb0a8c177498a516494c3 (diff)
downloadmdadm-9277cc7752ae6eb4b10dff7b5fc9ec75d3d52b66.tar.gz
mdadm-9277cc7752ae6eb4b10dff7b5fc9ec75d3d52b66.tar.xz
mdadm-9277cc7752ae6eb4b10dff7b5fc9ec75d3d52b66.zip
Various fixes for --kill
- When --kill-superblock is used with --metadata, find every different superblock if there are several and kill them all. - When creating a new array, kill off any old metadata. The code to do this was already present but has become broken over time. Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'mdadm.c')
-rw-r--r--mdadm.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/mdadm.c b/mdadm.c
index 3dc8be9..74a39a8 100644
--- a/mdadm.c
+++ b/mdadm.c
@@ -1361,7 +1361,16 @@ int main(int argc, char *argv[])
export, test, homehost);
continue;
case 'K': /* Zero superblock */
- rv |= Kill(dv->devname, force, quiet,0);
+ if (ss)
+ rv |= Kill(dv->devname, ss, force, quiet,0);
+ else {
+ int q = quiet;
+ do {
+ rv |= Kill(dv->devname, NULL, force, q, 0);
+ q = 1;
+ } while ((rv & 2) == 0);
+ rv &= ~2;
+ }
continue;
case 'Q':
rv |= Query(dv->devname); continue;