]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Create.c
Change 'size' argument to validate_geometry to be sectors, not K
[thirdparty/mdadm.git] / Create.c
index 2ff7d8e1ed2f900b08fc67df885ef3d607d39ec7..7ea39c4f6fd8e7a2181890ff924381537d3576da 100644 (file)
--- a/Create.c
+++ b/Create.c
@@ -240,7 +240,7 @@ int Create(struct supertype *st, char *mddev,
        }
 
        if (st && ! st->ss->validate_geometry(st, level, layout, raiddisks,
-                                             chunk, size, NULL, NULL, verbose>=0))
+                                             chunk, size*2, NULL, NULL, verbose>=0))
                return 1;
 
        /* now look at the subdevs */
@@ -276,7 +276,7 @@ int Create(struct supertype *st, char *mddev,
                                st = superlist[i]->match_metadata_desc(name);
                                if (st && !st->ss->validate_geometry
                                                (st, level, layout, raiddisks,
-                                                chunk, size, dname, &freesize,
+                                                chunk, size*2, dname, &freesize,
                                                 verbose > 0))
                                        st = NULL;
                        }
@@ -293,7 +293,7 @@ int Create(struct supertype *st, char *mddev,
                } else {
                        if (!st->ss->validate_geometry(st, level, layout,
                                                       raiddisks,
-                                                      chunk, size, dname,
+                                                      chunk, size*2, dname,
                                                       &freesize,
                                                       verbose > 0)) {
 
@@ -356,7 +356,7 @@ int Create(struct supertype *st, char *mddev,
                        /* size is meaningful */
                        if (!st->ss->validate_geometry(st, level, layout,
                                                       raiddisks,
-                                                      chunk, minsize,
+                                                      chunk, minsize*2,
                                                       NULL, NULL, 0)) {
                                fprintf(stderr, Name ": devices too large for RAID level %d\n", level);
                                return 1;
@@ -705,8 +705,9 @@ int Create(struct supertype *st, char *mddev,
                                inf->disk.minor = minor(stb.st_rdev);
 
                                remove_partitions(fd);
-                               st->ss->add_to_super(st, &inf->disk,
-                                                    fd, dv->devname);
+                               if (st->ss->add_to_super(st, &inf->disk,
+                                                        fd, dv->devname))
+                                       goto abort;
                                st->ss->getinfo_super(st, inf);
                                safe_mode_delay = inf->safe_mode_delay;
 
@@ -744,7 +745,8 @@ int Create(struct supertype *st, char *mddev,
                /* No need to start.  But we should signal udev to
                 * create links */
                sysfs_uevent(&info, "change");
-               ;
+               if (verbose >= 0)
+                       fprintf(stderr, Name ": container %s prepared.\n", mddev);
        } else if (runstop == 1 || subdevs >= raiddisks) {
                if (st->ss->external) {
                        switch(level) {
@@ -780,6 +782,7 @@ int Create(struct supertype *st, char *mddev,
                        ping_monitor(devnum2devname(st->container_dev));
                        close(container_fd);
                }
+               wait_for(chosen_name);
        } else {
                fprintf(stderr, Name ": not starting array - not enough devices.\n");
        }