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 <maan@systemlinux.org>
Signed-off-by: Artur Wojcik <artur.wojcik@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
Artur Wojcik 2010-01-28 16:48:44 +01:00 committed by NeilBrown
parent fc7e81e54e
commit 4c619b292f
2 changed files with 6 additions and 3 deletions

7
Kill.c
View File

@ -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);

View File

@ -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;