X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fmdadm.git;a=blobdiff_plain;f=Assemble.c;h=ace5717c310adb7dc932b21dd30bc67756025df9;hp=0d222512d0c271fc1a904ab37709ae8a283c2258;hb=d7eaf49f65ecb99e24255026331b0af7a9245cc2;hpb=98c6faba80e6db0693f99faf5c6525ef4f1fb680 diff --git a/Assemble.c b/Assemble.c index 0d222512..ace5717c 100644 --- a/Assemble.c +++ b/Assemble.c @@ -193,7 +193,7 @@ int Assemble(char *mddev, int mdfd, continue; } - dfd = open(devname, O_RDONLY, 0); + dfd = open(devname, O_RDONLY|O_EXCL, 0); if (dfd < 0) { if (inargv || verbose) fprintf(stderr, Name ": cannot open device %s: %s\n", @@ -288,7 +288,7 @@ int Assemble(char *mddev, int mdfd, if (strcmp(update, "super-minor") ==0) { struct stat stb2; fstat(mdfd, &stb2); - super.md_minor = MINOR(stb2.st_rdev); + super.md_minor = minor(stb2.st_rdev); if (verbose) fprintf(stderr, Name ": updating superblock of %s with minor number %d\n", devname, super.md_minor); @@ -320,8 +320,13 @@ int Assemble(char *mddev, int mdfd, } else if (i >= super.raid_disks && super.disks[i].number == 0) super.disks[i].state = 0; } + if (strcmp(update, "resync") == 0) { + /* make sure resync happens */ + super.state &= ~(1<