diff options
author | NeilBrown <neilb@cse.unsw.edu.au> | 2005-09-09 19:23:51 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-09-09 19:39:11 -0400 |
commit | 71c0805cb48462c99fbe0e5fcc6c12d7b9929c09 (patch) | |
tree | a6234c60b036ba05807bf649ffa7cf56eda13574 | |
parent | 7b1e35f6d666693e8f376ce02242efca3ec09aaf (diff) |
[PATCH] md: allow md to load a superblock with feature-bit '1' set
As this is used to flag an internal bitmap.
Also, introduce symbolic names for feature bits.
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | drivers/md/md.c | 6 | ||||
-rw-r--r-- | include/linux/raid/md_p.h | 5 |
2 files changed, 8 insertions, 3 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index 866c704e008a..1be3f2de396b 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -875,7 +875,7 @@ static int super_1_load(mdk_rdev_t *rdev, mdk_rdev_t *refdev, int minor_version) | |||
875 | sb->major_version != cpu_to_le32(1) || | 875 | sb->major_version != cpu_to_le32(1) || |
876 | le32_to_cpu(sb->max_dev) > (4096-256)/2 || | 876 | le32_to_cpu(sb->max_dev) > (4096-256)/2 || |
877 | le64_to_cpu(sb->super_offset) != (rdev->sb_offset<<1) || | 877 | le64_to_cpu(sb->super_offset) != (rdev->sb_offset<<1) || |
878 | sb->feature_map != 0) | 878 | (le32_to_cpu(sb->feature_map) & ~MD_FEATURE_ALL) != 0) |
879 | return -EINVAL; | 879 | return -EINVAL; |
880 | 880 | ||
881 | if (calc_sb_1_csum(sb) != sb->sb_csum) { | 881 | if (calc_sb_1_csum(sb) != sb->sb_csum) { |
@@ -954,7 +954,7 @@ static int super_1_validate(mddev_t *mddev, mdk_rdev_t *rdev) | |||
954 | 954 | ||
955 | mddev->max_disks = (4096-256)/2; | 955 | mddev->max_disks = (4096-256)/2; |
956 | 956 | ||
957 | if ((le32_to_cpu(sb->feature_map) & 1) && | 957 | if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_BITMAP_OFFSET) && |
958 | mddev->bitmap_file == NULL ) { | 958 | mddev->bitmap_file == NULL ) { |
959 | if (mddev->level != 1) { | 959 | if (mddev->level != 1) { |
960 | printk(KERN_WARNING "md: bitmaps only supported for raid1\n"); | 960 | printk(KERN_WARNING "md: bitmaps only supported for raid1\n"); |
@@ -1029,7 +1029,7 @@ static void super_1_sync(mddev_t *mddev, mdk_rdev_t *rdev) | |||
1029 | 1029 | ||
1030 | if (mddev->bitmap && mddev->bitmap_file == NULL) { | 1030 | if (mddev->bitmap && mddev->bitmap_file == NULL) { |
1031 | sb->bitmap_offset = cpu_to_le32((__u32)mddev->bitmap_offset); | 1031 | sb->bitmap_offset = cpu_to_le32((__u32)mddev->bitmap_offset); |
1032 | sb->feature_map = cpu_to_le32(1); | 1032 | sb->feature_map = cpu_to_le32(MD_FEATURE_BITMAP_OFFSET); |
1033 | } | 1033 | } |
1034 | 1034 | ||
1035 | max_dev = 0; | 1035 | max_dev = 0; |
diff --git a/include/linux/raid/md_p.h b/include/linux/raid/md_p.h index 4f047f84fb1f..c100fa5d4bfa 100644 --- a/include/linux/raid/md_p.h +++ b/include/linux/raid/md_p.h | |||
@@ -238,5 +238,10 @@ struct mdp_superblock_1 { | |||
238 | __u16 dev_roles[0]; /* role in array, or 0xffff for a spare, or 0xfffe for faulty */ | 238 | __u16 dev_roles[0]; /* role in array, or 0xffff for a spare, or 0xfffe for faulty */ |
239 | }; | 239 | }; |
240 | 240 | ||
241 | /* feature_map bits */ | ||
242 | #define MD_FEATURE_BITMAP_OFFSET 1 | ||
243 | |||
244 | #define MD_FEATURE_ALL 1 | ||
245 | |||
241 | #endif | 246 | #endif |
242 | 247 | ||