]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Build.c
Minor man page and comment fixes
[thirdparty/mdadm.git] / Build.c
diff --git a/Build.c b/Build.c
index 689aad0e7344cbe1320106e105f8071017fd7443..ea314638dd44a4879f5a76a23b01fa0ead034bba 100644 (file)
--- a/Build.c
+++ b/Build.c
@@ -1,7 +1,7 @@
 /*
  * mdadm - manage Linux "md" devices aka RAID arrays.
  *
- * Copyright (C) 2001-2002 Neil Brown <neilb@cse.unsw.edu.au>
+ * Copyright (C) 2001-2006 Neil Brown <neilb@suse.de>
  *
  *
  *    This program is free software; you can redistribute it and/or modify
@@ -58,6 +58,7 @@ int Build(char *mddev, int mdfd, int chunk, int level, int layout,
        mddev_dev_t dv;
        int bitmap_fd;
        unsigned long long size = ~0ULL;
+       unsigned long long bitmapsize;
 
        /* scan all devices, make sure they really are block devices */
        for (dv = devlist; dv; dv=dv->next) {
@@ -202,13 +203,24 @@ int Build(char *mddev, int mdfd, int chunk, int level, int layout,
                if (bitmap_file) {
                        bitmap_fd = open(bitmap_file, O_RDWR);
                        if (bitmap_fd < 0) {
+                               int major = BITMAP_MAJOR_HI;
+#if 0
                                if (bitmap_chunk == UnSet) {
                                        fprintf(stderr, Name ": %s cannot be openned.",
                                                bitmap_file);
                                        return 1;
                                }
+#endif
+                               if (vers < 9003) {
+                                       major = BITMAP_MAJOR_HOSTENDIAN;
+#ifdef __BIG_ENDIAN
+                                       fprintf(stderr, Name ": Warning - bitmaps created on this kernel are not portable\n"
+                                               "  between different architectures.  Consider upgrading the Linux kernel.\n");
+#endif
+                               }
+                               bitmapsize = size>>9; /* FIXME wrong for RAID10 */
                                if (CreateBitmap(bitmap_file, 1, NULL, bitmap_chunk,
-                                                delay, write_behind, size>>9)) {
+                                                delay, write_behind, bitmapsize, major)) {
                                        return 1;
                                }
                                bitmap_fd = open(bitmap_file, O_RDWR);