X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=Kill.c;h=e73897857dd15df767f8975fb841664ad74d964d;hb=e259df4e63f553c1271fa7d7612c110d2518e572;hp=96b270f278db10d6361a8c45d17798db75dd3068;hpb=8a659c33212f85cc0dcecc759b7b36b0bb2b4fe4;p=thirdparty%2Fmdadm.git diff --git a/Kill.c b/Kill.c index 96b270f2..e7389785 100644 --- a/Kill.c +++ b/Kill.c @@ -1,7 +1,7 @@ /* * mdadm - manage Linux "md" devices aka RAID arrays. * - * Copyright (C) 2001-2006 Neil Brown + * Copyright (C) 2001-2009 Neil Brown * * * This program is free software; you can redistribute it and/or modify @@ -19,12 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Author: Neil Brown - * Email: - * Paper: Neil Brown - * School of Computer Science and Engineering - * The University of New South Wales - * Sydney, 2052 - * Australia + * Email: * * Added by Dale Stephenson * steph@snapserver.com @@ -34,32 +29,35 @@ #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 * 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; - 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", dev); - close(fd); - return 1; + return 2; } - 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)