]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Manage.c
Release 1.10.0
[thirdparty/mdadm.git] / Manage.c
index 56cc1ad7ff1ffc77c331333590a26f05fabe7f5c..b323fd3c241b514c24a3138b7f332e09c8841fd8 100644 (file)
--- a/Manage.c
+++ b/Manage.c
@@ -194,6 +194,14 @@ int Manage_subdevs(char *devname, int fd,
                        return 1;
                case 'a':
                        /* add the device - hot or cold */
+                       /* Make sure it isn' in use (in 2.6 or later) */
+                       fd = open(dv->devname, O_RDONLY|O_EXCL);
+                       if (fd < 0) {
+                               fprintf(stderr, Name ": Cannot open %s: %s\n",
+                                       dv->devname, strerror(errno));
+                               return 1;
+                       }
+                       close(fd);
                        if (ioctl(fd, HOT_ADD_DISK, (unsigned long)stb.st_rdev)==0) {
                                fprintf(stderr, Name ": hot added %s\n",
                                        dv->devname);
@@ -226,8 +234,8 @@ int Manage_subdevs(char *devname, int fd,
                        disc.number =j;
                        disc.raid_disk = j;
                        disc.state = 0;
-                       disc.major = MAJOR(stb.st_rdev);
-                       disc.minor = MINOR(stb.st_rdev);
+                       disc.major = major(stb.st_rdev);
+                       disc.minor = minor(stb.st_rdev);
                        if (ioctl(fd,ADD_NEW_DISK, &disc)) {
                                fprintf(stderr, Name ": add new device failed for %s: %s\n",
                                        dv->devname, strerror(errno));