+ if (bitmap_file && vers < 9003) {
+ major_num = BITMAP_MAJOR_HOSTENDIAN;
+#ifdef __BIG_ENDIAN
+ fprintf(stderr, Name ": Warning - bitmaps created on this kernel are not portable\n"
+ " between different architectured. Consider upgrading the Linux kernel.\n");
+#endif
+ }
+
+ 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(st, &bitmap_chunk,
+ delay, write_behind,
+ bitmapsize, 1, major_num)) {
+ fprintf(stderr, Name ": Given bitmap chunk size not supported.\n");
+ return 1;
+ }
+ bitmap_file = NULL;
+ }
+
+
+ sra = sysfs_read(mdfd, 0, 0);
+
+ if (st->ss->external) {
+ char ver[100];
+ strcat(strcpy(ver, "external:"), st->ss->text_version);
+ if ((vers % 100) < 2 ||
+ sra == NULL ||
+ sysfs_set_str(sra, NULL, "metadata_version",
+ ver) < 0) {
+ fprintf(stderr, Name ": This kernel does not "
+ "support external metadata.\n");
+ return 1;
+ }
+ rv = 0;
+ } else if ((vers % 100) >= 1) { /* can use different versions */
+ mdu_array_info_t inf;
+ memset(&inf, 0, sizeof(inf));
+ inf.major_version = st->ss->major;
+ inf.minor_version = st->minor_version;
+ rv = ioctl(mdfd, SET_ARRAY_INFO, &inf);
+ } else
+ rv = ioctl(mdfd, SET_ARRAY_INFO, NULL);
+ if (rv) {