]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Build.c
Change MAJOR() etc to major() etc
[thirdparty/mdadm.git] / Build.c
diff --git a/Build.c b/Build.c
index 3e182f8c8b63d11e15541a442fb974c18e8a53a1..6bb3a626c391eafd8aafc0c407d48b2cec0f7737 100644 (file)
--- a/Build.c
+++ b/Build.c
@@ -33,7 +33,7 @@
 #define START_MD               _IO (MD_MAJOR, 2)
 #define STOP_MD                _IO (MD_MAJOR, 3)
 
-int Build(char *mddev, int mdfd, int chunk, int level,
+int Build(char *mddev, int mdfd, int chunk, int level, int layout,
          int raiddisks,
          mddev_dev_t devlist, int assume_clean)
 {
@@ -50,6 +50,7 @@ int Build(char *mddev, int mdfd, int chunk, int level,
         * SET_ARRAY_INFO,  ADD_NEW_DISK, RUN_ARRAY
         *
         */
+       int verbose = 0;
        int i;
        int vers;
        struct stat stb;
@@ -77,6 +78,34 @@ int Build(char *mddev, int mdfd, int chunk, int level,
                return 1;
        }
 
+       if (layout == UnSet)
+               switch(level) {
+               default: /* no layout */
+                       layout = 0;
+                       break;
+               case 10:
+                       layout = 0x102; /* near=2, far=1 */
+                       if (verbose)
+                               fprintf(stderr,
+                                       Name ": layout defaults to n1\n");
+                       break;
+               case 5:
+               case 6:
+                       layout = map_name(r5layout, "default");
+                       if (verbose)
+                               fprintf(stderr,
+                                       Name ": layout defaults to %s\n", map_num(r5layout, layout));
+                       break;
+               case LEVEL_FAULTY:
+                       layout = map_name(faultylayout, "default");
+
+                       if (verbose)
+                               fprintf(stderr,
+                                       Name ": layout defaults to %s\n", map_num(faultylayout, layout));
+                       break;
+               }
+
+
        vers = md_get_version(mdfd);
        
        /* looks Ok, go for it */
@@ -88,7 +117,7 @@ int Build(char *mddev, int mdfd, int chunk, int level,
                array.raid_disks = raiddisks;
                array.md_minor = 0;
                if (fstat(mdfd, &stb)==0)
-                       array.md_minor = MINOR(stb.st_rdev);
+                       array.md_minor = minor(stb.st_rdev);
                array.not_persistent = 1;
                array.state = 0; /* not clean, but no errors */
                if (assume_clean)
@@ -100,6 +129,7 @@ int Build(char *mddev, int mdfd, int chunk, int level,
                if (chunk == 0)  
                        chunk = 64;
                array.chunk_size = chunk*1024;
+               array.layout = layout;
                if (ioctl(mdfd, SET_ARRAY_INFO, &array)) {
                        fprintf(stderr, Name ": SET_ARRAY_INFO failed for %s: %s\n",
                                mddev, strerror(errno));
@@ -123,8 +153,8 @@ int Build(char *mddev, int mdfd, int chunk, int level,
                        disk.number = i;
                        disk.raid_disk = i;
                        disk.state = 6;
-                       disk.major = MAJOR(stb.st_rdev);
-                       disk.minor = MINOR(stb.st_rdev);
+                       disk.major = major(stb.st_rdev);
+                       disk.minor = minor(stb.st_rdev);
                        if (ioctl(mdfd, ADD_NEW_DISK, &disk)) {
                                fprintf(stderr, Name ": ADD_NEW_DISK failed for %s: %s\n",
                                        dv->devname, strerror(errno));