]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Add data_offset arg to ->validate_geometry.
authorNeilBrown <neilb@suse.de>
Thu, 4 Oct 2012 06:34:20 +0000 (16:34 +1000)
committerNeilBrown <neilb@suse.de>
Thu, 4 Oct 2012 06:34:20 +0000 (16:34 +1000)
This is needed to return correct available size.  It isn't
really used yet.

Signed-off-by: NeilBrown <neilb@suse.de>
Create.c
Manage.c
mdadm.h
super-ddf.c
super-gpt.c
super-intel.c
super-mbr.c
super0.c
super1.c

index 2da07d06d0a57eb4ce2a63ae31a97d6d0662349f..6a49183da0ff536ebd3f7f0168bc76a67e5c8f08 100644 (file)
--- a/Create.c
+++ b/Create.c
@@ -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;
index 9b5c82b56485294f009ad8107c43241be1062f0b..d2b92a20e0cda19fcc6c57bd28068c92b19e7ab1 100644 (file)
--- a/Manage.c
+++ b/Manage.c
@@ -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"
diff --git a/mdadm.h b/mdadm.h
index 322af06d25e2069413b0ec19b28692c234863966..04e7d0fcee317719e33c7d46e2a4c74d4c1f3307 100644 (file)
--- a/mdadm.h
+++ b/mdadm.h
@@ -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);
 
index fbcdef6242f394dc5239ee439921623990e747e2..7ab8f2c15310cdd212d85f2ec9845e707303844e 100644 (file)
@@ -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)
 {
index fa7fdabea004092db104bc1f838f00a5f2b06be6..6244657d054716ce43cca168a459fcfe2a89705f 100644 (file)
@@ -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)
 {
index 74b6f61077256b6922ed3fb523b36827e9695834..561fa34b34f7423f8c5bb728f2b0332f7539bc12 100644 (file)
@@ -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;
 
index bbbc65bf3173f66c06f2ced55bba0900a12b1f15..4218619344cb858b6bd52c39b1ca81ea83627e85 100644 (file)
@@ -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)
 {
index a26e2e002e15945cb7508b757672f607e20a2775..983ef853a2544585c509f26036aaf28820819c92 100644 (file)
--- a/super0.c
+++ b/super0.c
@@ -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)
 {
index 1e4597bd66849857ce3f8626cae36cabaaacd8b6..ba7563b075dc111b5b2471bb11d3df643bae91e6 100644 (file)
--- a/super1.c
+++ b/super1.c
@@ -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 */