mdadm.c: Fix error handling for --zero-superblock

When Kill() cannot open device or find superblock it return the same
error and mdadm ignores it.
Change error handling in Kill() function. Return error if device is
busy, ignore it only when superblock doesn't exist- assume that metadata
is zeroed.

Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com>
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
This commit is contained in:
Mariusz Tkaczyk 2018-09-03 13:52:55 +02:00 committed by Jes Sorensen
parent a882c7b1ec
commit 29d7f182a5
2 changed files with 4 additions and 3 deletions

5
Kill.c
View File

@ -37,7 +37,8 @@ int Kill(char *dev, struct supertype *st, int force, int verbose, int noexcl)
* Returns:
* 0 - a zero superblock was successfully written out
* 1 - failed to write the zero superblock
* 2 - failed to open the device or find a superblock.
* 2 - failed to open the device.
* 4 - failed to find a superblock.
*/
int fd, rv = 0;
@ -57,7 +58,7 @@ int Kill(char *dev, struct supertype *st, int force, int verbose, int noexcl)
if (verbose >= 0)
pr_err("Unrecognised md component device - %s\n", dev);
close(fd);
return 2;
return 4;
}
st->ignore_hw_compat = 1;
rv = st->ss->load_super(st, fd, dev);

View File

@ -1959,7 +1959,7 @@ static int misc_list(struct mddev_dev *devlist,
rv |= Kill(dv->devname, NULL, c->force, v, 0);
v = -1;
} while (rv == 0);
rv &= ~2;
rv &= ~4;
}
continue;
case 'Q':