]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Create.c
Factor common code into new "start_mdmon".
[thirdparty/mdadm.git] / Create.c
index 8abc2990a0a2bd215b87bc682ee8114e2400eb06..692a74ccde8e452533e0d069e88359d651c5267d 100644 (file)
--- a/Create.c
+++ b/Create.c
@@ -448,11 +448,13 @@ int Create(struct supertype *st, char *mddev, int mdfd,
             ( level <= 0 )
             ||
             assume_clean
-               )
+               ) {
                info.array.state = 1; /* clean, but one+ drive will be missing*/
-       else
+               info.resync_start = ~0ULL;
+       } else {
                info.array.state = 0; /* not clean, but no errors */
-
+               info.resync_start = 0;
+       }
        if (level == 10) {
                /* for raid10, the bitmap size is the capacity of the array,
                 * which is array.size * raid_disks / ncopies;
@@ -520,9 +522,27 @@ int Create(struct supertype *st, char *mddev, int mdfd,
        total_slots = info.array.nr_disks;
        st->ss->getinfo_super(st, &info);
 
-       if (did_default)
-               fprintf(stderr, Name ": Defaulting to version"
-                       " %s metadata\n", info.text_version);
+       if (did_default && verbose >= 0) {
+               if (info.text_version[0] == '/') {
+                       int dnum = devname2devnum(info.text_version+1);
+                       char *path;
+                       int mdp = get_mdp_major();
+                       struct mdinfo *mdi;
+                       if (dnum > 0)
+                               path = map_dev(MD_MAJOR, dnum, 1);
+                       else
+                               path = map_dev(mdp, (-1-dnum)<< 6, 1);
+
+                       mdi = sysfs_read(-1, dnum, GET_VERSION);
+
+                       fprintf(stderr, Name ": Creating array inside "
+                               "%s container %s\n", 
+                               mdi?mdi->text_version:"managed", path);
+                       sysfs_free(mdi);
+               } else
+                       fprintf(stderr, Name ": Defaulting to version"
+                               " %s metadata\n", info.text_version);
+       }
 
        if (bitmap_file && vers < 9003) {
                major_num = BITMAP_MAJOR_HOSTENDIAN;
@@ -749,28 +769,10 @@ int Create(struct supertype *st, char *mddev, int mdfd,
                if (verbose >= 0)
                        fprintf(stderr, Name ": array %s started.\n", mddev);
                if (st->ss->external && st->subarray[0]) {
-                       if (need_mdmon) {
-                               int dn = st->container_dev;
-                               int i;
-                               switch(fork()) {
-                               case 0:
-                                       /* FIXME yuk. CLOSE_EXEC?? */
-                                       for (i=3; i < 100; i++)
-                                               close(i);
-                                       execl("./mdmon", "mdmon",
-                                             map_dev(dev2major(dn),
-                                                     dev2minor(dn),
-                                                     1), NULL);
-                                       exit(1);
-                               case -1: fprintf(stderr, Name ": cannot fork. "
-                                                "Array remains readonly\n");
-                                       return 1;
-                               default: ; /* parent - good */
-                               }
-                       } else
-                               signal_mdmon(st->container_dev);
-                       /* FIXME wait for mdmon to set array to read-auto */
-                       sleep(1);
+                       if (need_mdmon)
+                               start_mdmon(st->container_dev);
+
+                       ping_monitor(devnum2devname(st->container_dev));
                        close(container_fd);
                }
        } else {