]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Create.c
Fix type - MD_SB_CLEAN is a bit number, not a bitmask.
[thirdparty/mdadm.git] / Create.c
index de9a44f9b6693ccec4a5ef8ad5a2179542e787ec..5a359ee85b5b8d6f0500af179fdc85a16dd5288a 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))
                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 */)) {