From: Artur Wojcik Date: Thu, 28 Jan 2010 15:48:44 +0000 (+0100) Subject: Kill: fix when zeroing busy devices. X-Git-Tag: mdadm-3.1.2~48 X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fmdadm.git;a=commitdiff_plain;h=4c619b292f7e6b69a817b96d2001ff8f10b7a6bd Kill: fix when zeroing busy devices. mdadm should not wait indefinitely when it trys to reset superblock on device which is busy (cannot be opened). Acked-by: Andre Noll Signed-off-by: Artur Wojcik Signed-off-by: NeilBrown --- diff --git a/Kill.c b/Kill.c index 63442a62..e7389785 100644 --- a/Kill.c +++ b/Kill.c @@ -34,6 +34,10 @@ int Kill(char *dev, struct supertype *st, int force, int quiet, int noexcl) /* * Nothing fancy about Kill. It just zeroes out a superblock * Definitely not safe. + * 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. */ int fd, rv = 0; @@ -45,8 +49,7 @@ int Kill(char *dev, struct supertype *st, int force, int quiet, int noexcl) if (!quiet) fprintf(stderr, Name ": Couldn't open %s for write - not zeroing\n", dev); - close(fd); - return 1; + return 2; } if (st == NULL) st = guess_super(fd); diff --git a/mdadm.c b/mdadm.c index d235b2a9..be4fbf6d 100644 --- a/mdadm.c +++ b/mdadm.c @@ -1367,7 +1367,7 @@ int main(int argc, char *argv[]) do { rv |= Kill(dv->devname, NULL, force, q, 0); q = 1; - } while ((rv & 2) == 0); + } while (rv == 0); rv &= ~2; } continue;