diff options
author | NeilBrown <neilb@suse.de> | 2009-11-24 06:32:01 +0100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2009-11-24 06:32:01 +0100 |
commit | 9277cc7752ae6eb4b10dff7b5fc9ec75d3d52b66 (patch) | |
tree | 08d95ee3f170369863288356c84e45d87b93d876 /Kill.c | |
parent | Release mdadm-3.1.1 (diff) | |
download | 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 'Kill.c')
-rw-r--r-- | Kill.c | 10 |
1 files changed, 5 insertions, 5 deletions
@@ -29,7 +29,7 @@ #include "md_u.h" #include "md_p.h" -int Kill(char *dev, int force, int quiet, int noexcl) +int Kill(char *dev, struct supertype *st, int force, int quiet, int noexcl) { /* * Nothing fancy about Kill. It just zeroes out a superblock @@ -37,11 +37,10 @@ int Kill(char *dev, int force, int quiet, int noexcl) */ int fd, rv = 0; - struct supertype *st; if (force) noexcl = 1; - fd = open(dev, O_RDWR|(force ? 0 : O_EXCL)); + fd = open(dev, O_RDWR|(noexcl ? 0 : O_EXCL)); if (fd < 0) { if (!quiet) fprintf(stderr, Name ": Couldn't open %s for write - not zeroing\n", @@ -49,12 +48,13 @@ int Kill(char *dev, int force, int quiet, int noexcl) close(fd); return 1; } - st = guess_super(fd); + if (st == NULL) + st = guess_super(fd); if (st == NULL) { if (!quiet) fprintf(stderr, Name ": Unrecognised md component device - %s\n", dev); close(fd); - return 1; + return 2; } rv = st->ss->load_super(st, fd, dev); if (force && rv >= 2) |