X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fmdadm.git;a=blobdiff_plain;f=Kill.c;h=d5c1e36df4d3724e6cf060238902cb897e01bfed;hp=ce692cea570bd3ee107f20993224fbff953b494e;hb=9fe32043178f221526b6d59f3bbce58f777089da;hpb=aba69144fd44fc261c943b0cec540751cfcd29bd diff --git a/Kill.c b/Kill.c index ce692cea..d5c1e36d 100644 --- a/Kill.c +++ b/Kill.c @@ -34,18 +34,17 @@ #include "md_u.h" #include "md_p.h" -int Kill(char *dev, int force, int quiet) +int Kill(char *dev, int force, int quiet, int noexcl) { /* * Nothing fancy about Kill. It just zeroes out a superblock * Definitely not safe. */ - void *super; int fd, rv = 0; struct supertype *st; - fd = open(dev, O_RDWR|O_EXCL); + fd = open(dev, O_DIRECT | (noexcl ? O_RDWR : (O_RDWR|O_EXCL))); if (fd < 0) { if (!quiet) fprintf(stderr, Name ": Couldn't open %s for write - not zeroing\n", @@ -60,15 +59,13 @@ int Kill(char *dev, int force, int quiet) close(fd); return 1; } - rv = st->ss->load_super(st, fd, &super, dev); + rv = st->ss->load_super(st, fd, dev); if (force && rv >= 2) rv = 0; /* ignore bad data in superblock */ if (rv== 0 || (force && rv >= 2)) { - mdu_array_info_t info; - info.major_version = -1; /* zero superblock */ - free(super); - st->ss->init_super(st, &super, &info, 0, "", NULL, NULL); - if (st->ss->store_super(st, fd, super)) { + st->ss->free_super(st); + st->ss->init_super(st, NULL, 0, "", NULL, NULL); + if (st->ss->store_super(st, fd)) { if (!quiet) fprintf(stderr, Name ": Could not zero superblock on %s\n", dev);