]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Create.c
Fix parsing of /dev/md/N in is_standard
[thirdparty/mdadm.git] / Create.c
index de9a44f9b6693ccec4a5ef8ad5a2179542e787ec..735b8d799a858ae3d69f66acf8a88c53b91e0de0 100644 (file)
--- a/Create.c
+++ b/Create.c
@@ -341,11 +341,26 @@ int Create(struct supertype *st, char *mddev, int mdfd,
        array.nr_disks = array.working_disks + array.failed_disks;
        array.layout = layout;
        array.chunk_size = chunk*1024;
-       printf("VERS = %d\n", vers);
 
-       if (!st->ss->init_super(&super, &array))
+
+       if (!st->ss->init_super(st, &super, &array))
                return 1;
 
+       if (bitmap_file && strcmp(bitmap_file, "internal")==0) {
+               if ((vers%100) < 2) {
+                       fprintf(stderr, Name ": internal bitmaps not supported by this kernel.\n");
+                       return 1;
+               }
+               if (!st->ss->add_internal_bitmap(super, bitmap_chunk, delay, 
+                                                size ? size : maxsize)) {
+                       fprintf(stderr, Name ": Given bitmap chunk size not supported.\n");
+                       return 1;
+               }
+               bitmap_file = NULL;
+       }
+
+
+
        if ((vers % 100) >= 1) { /* can use different versions */
                mdu_array_info_t inf;
                memset(&inf, 0, sizeof(inf));
@@ -362,6 +377,10 @@ int Create(struct supertype *st, char *mddev, int mdfd,
 
        if (bitmap_file) {
                int uuid[4];
+
+               if (bitmap_chunk == UnSet)
+                       bitmap_chunk = DEFAULT_BITMAP_CHUNK;
+
                st->ss->uuid_from_super(uuid, super);
                if (CreateBitmap(bitmap_file, force, (char*)uuid, bitmap_chunk, delay,
                                 array.size*2ULL /* FIXME wrong for raid10 */)) {
@@ -445,7 +464,7 @@ int Create(struct supertype *st, char *mddev, int mdfd,
                if (ioctl(mdfd, RUN_ARRAY, &param)) {
                        fprintf(stderr, Name ": RUN_ARRAY failed: %s\n",
                                strerror(errno));
-                       Manage_runstop(mddev, mdfd, -1);
+                       Manage_runstop(mddev, mdfd, -1, 0);
                        return 1;
                }
                fprintf(stderr, Name ": array %s started.\n", mddev);