summaryrefslogtreecommitdiffstats
path: root/super0.c
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2006-01-27 06:21:06 +0000
committerNeil Brown <neilb@suse.de>2006-01-27 06:21:06 +0000
commit5dd497eecbb7dc453e6e1353e0e77bb4faeaeb3f (patch)
treefb0f37ed4e972ff7f5a4d94349abf3b2158ea546 /super0.c
parente5a5d81e4a2d65a56e1371d6ad0abb882ec66347 (diff)
downloadmdadm-5dd497eecbb7dc453e6e1353e0e77bb4faeaeb3f.tar.gz
mdadm-5dd497eecbb7dc453e6e1353e0e77bb4faeaeb3f.tar.xz
mdadm-5dd497eecbb7dc453e6e1353e0e77bb4faeaeb3f.zip
Enable support for v.large raid1.
clean up 'long long' usage for size of array, so that with v-1 superblocks a raid1 larger than 2TB is possible. Signed-off-by: Neil Brown <neilb@suse.de>
Diffstat (limited to 'super0.c')
-rw-r--r--super0.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/super0.c b/super0.c
index 2884855..aa7cdd9 100644
--- a/super0.c
+++ b/super0.c
@@ -378,7 +378,7 @@ static __u64 event_super0(void *sbv)
-static int init_super0(struct supertype *st, void **sbp, mdu_array_info_t *info, char *ignored_name)
+static int init_super0(struct supertype *st, void **sbp, mdu_array_info_t *info, unsigned long long size, char *ignored_name)
{
mdp_super_t *sb = malloc(MD_SB_BYTES + sizeof(bitmap_super_t));
int spares;
@@ -407,6 +407,8 @@ static int init_super0(struct supertype *st, void **sbp, mdu_array_info_t *info,
sb->set_uuid0 = random();
sb->ctime = time(0);
sb->level = info->level;
+ if (size != info->size)
+ return 0;
sb->size = info->size;
sb->nr_disks = info->nr_disks;
sb->raid_disks = info->raid_disks;
@@ -466,7 +468,7 @@ static int store_super0(struct supertype *st, int fd, void *sbv)
dsize = ((unsigned long long)size)<<9;
}
- if (dsize < MD_RESERVED_SECTORS*2)
+ if (dsize < MD_RESERVED_SECTORS*2*512)
return 2;
offset = MD_NEW_SIZE_SECTORS(dsize>>9);