]> 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 4806c8387abd1b53e3403fdccae0e3336d7de6fd..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;
@@ -428,6 +428,7 @@ int Create(struct supertype *st, char *mddev,
        mdfd = create_mddev(mddev, name, autof, LOCAL, chosen_name);
        if (mdfd < 0)
                return 1;
+       mddev = chosen_name;
 
        vers = md_get_version(mdfd);
        if (vers < 9000) {
@@ -704,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;
 
@@ -743,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) {
@@ -779,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");
        }