diff options
author | NeilBrown <neilb@suse.de> | 2012-10-04 16:34:20 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2012-10-04 16:34:20 +1000 |
commit | af4348ddd101b8cb0ffc303f43544f49419a1658 (patch) | |
tree | e2cb9d59cd80e4562cf9872c18d9c43a97e93572 | |
parent | 387fcd593c7a257618fa11ed4cf57d655ace4ada (diff) |
Add data_offset arg to ->validate_geometry.
This is needed to return correct available size. It isn't
really used yet.
Signed-off-by: NeilBrown <neilb@suse.de>
-rw-r--r-- | Create.c | 15 | ||||
-rw-r--r-- | Manage.c | 2 | ||||
-rw-r--r-- | mdadm.h | 1 | ||||
-rw-r--r-- | super-ddf.c | 12 | ||||
-rw-r--r-- | super-gpt.c | 1 | ||||
-rw-r--r-- | super-intel.c | 19 | ||||
-rw-r--r-- | super-mbr.c | 1 | ||||
-rw-r--r-- | super0.c | 1 | ||||
-rw-r--r-- | super1.c | 3 |
9 files changed, 40 insertions, 15 deletions
@@ -251,7 +251,9 @@ int Create(struct supertype *st, char *mddev, s->size &= ~(unsigned long long)(s->chunk - 1); newsize = s->size * 2; if (st && ! st->ss->validate_geometry(st, s->level, s->layout, s->raiddisks, - &s->chunk, s->size*2, NULL, &newsize, c->verbose>=0)) + &s->chunk, s->size*2, + INVALID_SECTORS, NULL, + &newsize, c->verbose>=0)) return 1; if (s->chunk && s->chunk != UnSet) { @@ -332,8 +334,9 @@ int Create(struct supertype *st, char *mddev, s->layout = default_layout(st, s->level, c->verbose); switch (st->ss->validate_geometry( st, s->level, s->layout, s->raiddisks, - &s->chunk, s->size*2, dname, &freesize, - c->verbose > 0)) { + &s->chunk, s->size*2, + INVALID_SECTORS, dname, + &freesize, c->verbose > 0)) { case -1: /* Not valid, message printed, and not * worth checking any further */ exit(2); @@ -368,8 +371,9 @@ int Create(struct supertype *st, char *mddev, s->layout = default_layout(st, s->level, 0); if (!st->ss->validate_geometry(st, s->level, s->layout, s->raiddisks, - &s->chunk, s->size*2, dname, - &freesize, + &s->chunk, s->size*2, + INVALID_SECTORS, + dname, &freesize, c->verbose >= 0)) { pr_err("%s is not suitable for " @@ -470,6 +474,7 @@ int Create(struct supertype *st, char *mddev, if (!st->ss->validate_geometry(st, s->level, s->layout, s->raiddisks, &s->chunk, minsize*2, + INVALID_SECTORS, NULL, NULL, 0)) { pr_err("devices too large for RAID level %d\n", s->level); return 1; @@ -549,7 +549,7 @@ int Manage_add(int fd, int tfd, struct mddev_dev *dv, if (tst->ss->validate_geometry( tst, array->level, array->layout, array->raid_disks, NULL, - ldsize >> 9, NULL, NULL, 0) == 0) { + ldsize >> 9, INVALID_SECTORS, NULL, NULL, 0) == 0) { if (!force) { pr_err("%s is larger than %s can " "effectively use.\n" @@ -778,6 +778,7 @@ extern struct superswitch { int (*validate_geometry)(struct supertype *st, int level, int layout, int raiddisks, int *chunk, unsigned long long size, + unsigned long long data_offset, char *subdev, unsigned long long *freesize, int verbose); diff --git a/super-ddf.c b/super-ddf.c index fbcdef62..7ab8f2c1 100644 --- a/super-ddf.c +++ b/super-ddf.c @@ -2581,18 +2581,21 @@ static int validate_geometry_ddf_container(struct supertype *st, int level, int layout, int raiddisks, int chunk, unsigned long long size, + unsigned long long data_offset, char *dev, unsigned long long *freesize, int verbose); static int validate_geometry_ddf_bvd(struct supertype *st, int level, int layout, int raiddisks, int *chunk, unsigned long long size, + unsigned long long data_offset, char *dev, unsigned long long *freesize, int verbose); static int validate_geometry_ddf(struct supertype *st, int level, int layout, int raiddisks, int *chunk, unsigned long long size, + unsigned long long data_offset, char *dev, unsigned long long *freesize, int verbose) { @@ -2615,7 +2618,8 @@ static int validate_geometry_ddf(struct supertype *st, /* Must be a fresh device to add to a container */ return validate_geometry_ddf_container(st, level, layout, raiddisks, chunk?*chunk:0, - size, dev, freesize, + size, data_offset, dev, + freesize, verbose); } @@ -2652,7 +2656,8 @@ static int validate_geometry_ddf(struct supertype *st, * Should make a distinction one day. */ return validate_geometry_ddf_bvd(st, level, layout, raiddisks, - chunk, size, dev, freesize, + chunk, size, data_offset, dev, + freesize, verbose); } /* This is the first device for the array. @@ -2710,6 +2715,7 @@ static int validate_geometry_ddf(struct supertype *st, close(cfd); return validate_geometry_ddf_bvd(st, level, layout, raiddisks, chunk, size, + data_offset, dev, freesize, verbose); } @@ -2724,6 +2730,7 @@ static int validate_geometry_ddf_container(struct supertype *st, int level, int layout, int raiddisks, int chunk, unsigned long long size, + unsigned long long data_offset, char *dev, unsigned long long *freesize, int verbose) { @@ -2758,6 +2765,7 @@ validate_geometry_ddf_container(struct supertype *st, static int validate_geometry_ddf_bvd(struct supertype *st, int level, int layout, int raiddisks, int *chunk, unsigned long long size, + unsigned long long data_offset, char *dev, unsigned long long *freesize, int verbose) { diff --git a/super-gpt.c b/super-gpt.c index fa7fdabe..6244657d 100644 --- a/super-gpt.c +++ b/super-gpt.c @@ -196,6 +196,7 @@ static struct supertype *match_metadata_desc(char *arg) static int validate_geometry(struct supertype *st, int level, int layout, int raiddisks, int *chunk, unsigned long long size, + unsigned long long data_offset, char *subdev, unsigned long long *freesize, int verbose) { diff --git a/super-intel.c b/super-intel.c index 74b6f610..561fa34b 100644 --- a/super-intel.c +++ b/super-intel.c @@ -5279,7 +5279,9 @@ static int imsm_bbm_log_size(struct imsm_super *mpb) #ifndef MDASSEMBLE static int validate_geometry_imsm_container(struct supertype *st, int level, int layout, int raiddisks, int chunk, - unsigned long long size, char *dev, + unsigned long long size, + unsigned long long data_offset, + char *dev, unsigned long long *freesize, int verbose) { @@ -5341,7 +5343,7 @@ static int validate_geometry_imsm_container(struct supertype *st, int level, } } - *freesize = avail_size_imsm(st, ldsize >> 9, INVALID_SECTORS); + *freesize = avail_size_imsm(st, ldsize >> 9, data_offset); free_imsm(super); return 1; @@ -5878,7 +5880,9 @@ validate_geometry_imsm_orom(struct intel_super *super, int level, int layout, */ static int validate_geometry_imsm_volume(struct supertype *st, int level, int layout, int raiddisks, int *chunk, - unsigned long long size, char *dev, + unsigned long long size, + unsigned long long data_offset, + char *dev, unsigned long long *freesize, int verbose) { @@ -6161,6 +6165,7 @@ static int reserve_space(struct supertype *st, int raiddisks, static int validate_geometry_imsm(struct supertype *st, int level, int layout, int raiddisks, int *chunk, unsigned long long size, + unsigned long long data_offset, char *dev, unsigned long long *freesize, int verbose) { @@ -6176,7 +6181,8 @@ static int validate_geometry_imsm(struct supertype *st, int level, int layout, /* Must be a fresh device to add to a container */ return validate_geometry_imsm_container(st, level, layout, raiddisks, - chunk?*chunk:0, size, + chunk?*chunk:0, + size, data_offset, dev, freesize, verbose); } @@ -6219,6 +6225,7 @@ static int validate_geometry_imsm(struct supertype *st, int level, int layout, /* creating in a given container */ return validate_geometry_imsm_volume(st, level, layout, raiddisks, chunk, size, + data_offset, dev, freesize, verbose); } @@ -6263,7 +6270,7 @@ static int validate_geometry_imsm(struct supertype *st, int level, int layout, close(cfd); return validate_geometry_imsm_volume(st, level, layout, raiddisks, chunk, - size, dev, + size, data_offset, dev, freesize, 1) ? 1 : -1; } @@ -9905,7 +9912,7 @@ enum imsm_reshape_type imsm_analyze_change(struct supertype *st, imsm_layout, geo->raid_disks + devNumChange, &chunk, - geo->size, + geo->size, INVALID_SECTORS, 0, 0, 1)) change = -1; diff --git a/super-mbr.c b/super-mbr.c index bbbc65bf..42186193 100644 --- a/super-mbr.c +++ b/super-mbr.c @@ -187,6 +187,7 @@ static struct supertype *match_metadata_desc(char *arg) static int validate_geometry(struct supertype *st, int level, int layout, int raiddisks, int *chunk, unsigned long long size, + unsigned long long data_offset, char *subdev, unsigned long long *freesize, int verbose) { @@ -1124,6 +1124,7 @@ static void free_super0(struct supertype *st) static int validate_geometry0(struct supertype *st, int level, int layout, int raiddisks, int *chunk, unsigned long long size, + unsigned long long data_offset, char *subdev, unsigned long long *freesize, int verbose) { @@ -1902,6 +1902,7 @@ static void free_super1(struct supertype *st) static int validate_geometry1(struct supertype *st, int level, int layout, int raiddisks, int *chunk, unsigned long long size, + unsigned long long data_offset, char *subdev, unsigned long long *freesize, int verbose) { @@ -1933,7 +1934,7 @@ static int validate_geometry1(struct supertype *st, int level, } close(fd); - *freesize = avail_size1(st, ldsize >> 9, INVALID_SECTORS); + *freesize = avail_size1(st, ldsize >> 9, data_offset); return 1; } #endif /* MDASSEMBLE */ |