]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Create.c
Use O_EXCL when opening component devices to be assembled into an array
[thirdparty/mdadm.git] / Create.c
index 7b4988e64c9d514eaa72d8efcdcaa6b20f7065a6..66a88d2008bd03a950971048437c753207df4bb6 100644 (file)
--- a/Create.c
+++ b/Create.c
@@ -187,7 +187,7 @@ int Create(char *mddev, int mdfd,
                array.working_disks++;
                if (dnum < raiddisks)
                        array.active_disks++;
-               fd = open(dname, O_RDONLY, 0);
+               fd = open(dname, O_RDONLY|O_EXCL, 0);
                if (fd <0 ) {
                        fprintf(stderr, Name ": Cannot open %s: %s\n",
                                dname, strerror(errno));
@@ -305,7 +305,7 @@ int Create(char *mddev, int mdfd,
         */
        array.md_minor = 0;
        if (fstat(mdfd, &stb)==0)
-               array.md_minor = MINOR(stb.st_rdev);
+               array.md_minor = minor(stb.st_rdev);
        array.not_persistent = 0;
        /*** FIX: Need to do something about RAID-6 here ***/
        if ( ( (level == 5) &&
@@ -368,15 +368,15 @@ int Create(char *mddev, int mdfd,
                        disk.minor = 0;
                        disk.state = 1; /* faulty */
                } else {
-                       fd = open(dv->devname, O_RDONLY, 0);
+                       fd = open(dv->devname, O_RDONLY|O_EXCL, 0);
                        if (fd < 0) {
                                fprintf(stderr, Name ": failed to open %s after earlier success - aborting\n",
                                        dv->devname);
                                return 1;
                        }
                        fstat(fd, &stb);
-                       disk.major = MAJOR(stb.st_rdev);
-                       disk.minor = MINOR(stb.st_rdev);
+                       disk.major = major(stb.st_rdev);
+                       disk.minor = minor(stb.st_rdev);
                        close(fd);
                }
                if (ioctl(mdfd, ADD_NEW_DISK, &disk)) {