]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Create.c
Factor out add-disk code
[thirdparty/mdadm.git] / Create.c
index 69192abb23b415147a19c60c898dd221d722e329..20886d119c868609e15dd52d1f8dc65c4dfb278a 100644 (file)
--- a/Create.c
+++ b/Create.c
@@ -72,12 +72,13 @@ int Create(struct supertype *st, char *mddev, int mdfd,
        int rv;
        int bitmap_fd;
        int have_container = 0;
-       int container_fd;
+       int container_fd = -1;
        int need_mdmon = 0;
        unsigned long long bitmapsize;
        struct mdinfo *sra;
        struct mdinfo info, *infos;
        int did_default = 0;
+       unsigned long safe_mode_delay = 0;
 
        int major_num = BITMAP_MAJOR_HI;
 
@@ -523,7 +524,7 @@ int Create(struct supertype *st, char *mddev, int mdfd,
        st->ss->getinfo_super(st, &info);
 
        if (did_default && verbose >= 0) {
-               if (info.text_version[0] == '/') {
+               if (is_subarray(info.text_version)) {
                        int dnum = devname2devnum(info.text_version+1);
                        char *path;
                        int mdp = get_mdp_major();
@@ -703,6 +704,7 @@ int Create(struct supertype *st, char *mddev, int mdfd,
                                st->ss->add_to_super(st, &inf->disk,
                                                     fd, dv->devname);
                                st->ss->getinfo_super(st, inf);
+                               safe_mode_delay = inf->safe_mode_delay;
 
                                /* getinfo_super might have lost these ... */
                                inf->disk.major = major(stb.st_rdev);
@@ -712,11 +714,7 @@ int Create(struct supertype *st, char *mddev, int mdfd,
                                inf->errors = 0;
                                rv = 0;
 
-                               if (st->ss->external)
-                                       rv = sysfs_add_disk(sra, inf);
-                               else
-                                       rv = ioctl(mdfd, ADD_NEW_DISK,
-                                                  &inf->disk);
+                               rv = add_disk(mdfd, st, sra, inf);
 
                                if (rv) {
                                        fprintf(stderr,
@@ -757,6 +755,7 @@ int Create(struct supertype *st, char *mddev, int mdfd,
                                              "readonly");
                                break;
                        }
+                       sysfs_set_safemode(sra, safe_mode_delay);
                } else {
                        mdu_param_t param;
                        if (ioctl(mdfd, RUN_ARRAY, &param)) {