From 29d7f182a5dd60d04365ef061021f403c5eb5402 Mon Sep 17 00:00:00 2001 From: Mariusz Tkaczyk Date: Mon, 3 Sep 2018 13:52:55 +0200 Subject: [PATCH] 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 Signed-off-by: Jes Sorensen --- Kill.c | 5 +++-- mdadm.c | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Kill.c b/Kill.c index ff52561d..d4767e29 100644 --- a/Kill.c +++ b/Kill.c @@ -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); diff --git a/mdadm.c b/mdadm.c index 1cf5c189..25a1abd2 100644 --- a/mdadm.c +++ b/mdadm.c @@ -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': -- 2.39.2