]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
uhm.. assort fixes, particularly for recovery offset...
authorNeil Brown <neilb@suse.de>
Fri, 16 Dec 2005 01:34:49 +0000 (01:34 +0000)
committerNeil Brown <neilb@suse.de>
Fri, 16 Dec 2005 01:34:49 +0000 (01:34 +0000)
Signed-off-by: Neil Brown <neilb@suse.de>
Create.c
super1.c

index 9a10d166926cde3dfa91a67d7bb0b2ecbd17f466..dc01df5f4f2b1abc811b4f3617d01bfa18560936 100644 (file)
--- a/Create.c
+++ b/Create.c
@@ -222,6 +222,10 @@ int Create(struct supertype *st, char *mddev, int mdfd,
                }
 
                freesize /= 2; /* convert to K */
+               if (chunk) {
+                       /* round to chunk size */
+                       freesize = freesize & ~(chunk-1);
+               }
 
                if (size && freesize < size) {
                        fprintf(stderr, Name ": %s is smaller that given size."
index 1157da4a4162e49c5e6f6a0d1a2a2c9aec5eea9f..e4a5e0d12568e2cbff7a38905859899afb3be070 100644 (file)
--- a/super1.c
+++ b/super1.c
@@ -89,6 +89,14 @@ struct mdp_superblock_1 {
        __u16   dev_roles[0];   /* role in array, or 0xffff for a spare, or 0xfffe for faulty */
 };
 
+/* feature_map bits */
+#define MD_FEATURE_BITMAP_OFFSET       1
+#define        MD_FEATURE_RECOVERY_OFFSET      2 /* recovery_offset is present and
+                                          * must be honoured
+                                          */
+
+#define        MD_FEATURE_ALL                  (1|2)
+
 #ifndef offsetof
 #define offsetof(t,f) ((int)&(((t*)0)->f))
 #endif
@@ -148,10 +156,14 @@ static void examine_super1(void *sbv)
        printf("   Raid Devices : %d\n", __le32_to_cpu(sb->raid_disks));
        printf("\n");
        printf("    Device Size : %llu%s\n", (unsigned long long)sb->data_size, human_size(sb->data_size<<9));
+       if (sb->size != sb->data_size)
+               printf("      Used Size : %llu%s\n", (unsigned long long)sb->size, human_size(sb->size<<9));
        if (sb->data_offset)
                printf("    Data Offset : %llu sectors\n", (unsigned long long)__le64_to_cpu(sb->data_offset));
        if (sb->super_offset)
                printf("   Super Offset : %llu sectors\n", (unsigned long long)__le64_to_cpu(sb->super_offset));
+       if (__le32_to_cpu(sb->feature_map) & MD_FEATURE_RECOVERY_OFFSET)
+               printf("Recovery Offset : %llu sectors\n", (unsigned long long)__le64_to_cpu(sb->recovery_offset));
        printf("          State : %s\n", (__le64_to_cpu(sb->resync_offset)+1)? "active":"clean");
        printf("    Device UUID : ");
        for (i=0; i<16; i++) {
@@ -189,6 +201,8 @@ static void examine_super1(void *sbv)
        case 0:
        case 4:
        case 5:
+       case 6:
+       case 10:
                printf("     Chunk Size : %dK\n", __le32_to_cpu(sb->chunksize/2));
                break;
        case -1: