summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2005-12-16 01:34:49 +0000
committerNeil Brown <neilb@suse.de>2005-12-16 01:34:49 +0000
commitd2cd3ffc026ae8dbc09d5243ec60694afe26e81b (patch)
tree943a7750c9cf05953099f5cdcfbe2369b134b4d9
parentce4fafd6377459d6b0a479b63e27ec85420e70ed (diff)
downloadmdadm-d2cd3ffc026ae8dbc09d5243ec60694afe26e81b.tar.gz
mdadm-d2cd3ffc026ae8dbc09d5243ec60694afe26e81b.tar.xz
mdadm-d2cd3ffc026ae8dbc09d5243ec60694afe26e81b.zip
uhm.. assort fixes, particularly for recovery offset...
Signed-off-by: Neil Brown <neilb@suse.de>
-rw-r--r--Create.c4
-rw-r--r--super1.c14
2 files changed, 18 insertions, 0 deletions
diff --git a/Create.c b/Create.c
index 9a10d16..dc01df5 100644
--- 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."
diff --git a/super1.c b/super1.c
index 1157da4..e4a5e0d 100644
--- 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: