]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Change the values for "max size" from -1 to 1.
authorNeilBrown <neilb@suse.de>
Mon, 9 Jul 2012 07:20:32 +0000 (17:20 +1000)
committerNeilBrown <neilb@suse.de>
Mon, 9 Jul 2012 07:20:32 +0000 (17:20 +1000)
Both are impossible, and '1' allows size to be unsigned,
which is neater.
Also #define MAX_SIZE to be '1' to make it all more explicit.

Signed-off-by: NeilBrown <neilb@suse.de>
Build.c
Create.c
Grow.c
mdadm.c
mdadm.h
super-intel.c

diff --git a/Build.c b/Build.c
index 6b5b9518d968eaaa62d9e40ec441b8d0c3e3d383..54d7683b5e423b4591c17f658426121b2144b523 100644 (file)
--- a/Build.c
+++ b/Build.c
@@ -126,7 +126,7 @@ int Build(char *mddev, int chunk, int level, int layout,
        if (vers >= 9000) {
                mdu_array_info_t array;
                array.level = level;
-               array.size = size;
+               array.size = size == MAX_SIZE ? 0 : size;
                array.nr_disks = raiddisks;
                array.raid_disks = raiddisks;
                array.md_minor = 0;
@@ -182,7 +182,7 @@ int Build(char *mddev, int chunk, int level, int layout,
                        goto abort;
                }
                if (get_dev_size(fd, NULL, &dsize) &&
-                   (size == 0 || dsize < size))
+                   (size == 0 || size == MAX_SIZE || dsize < size))
                                size = dsize;
                close(fd);
                if (vers >= 9000) {
index be572366699a3f1bd755d8beceedc465a7d7281b..8bb289ae128da0950bae9011bbe9301d291ad8f1 100644 (file)
--- a/Create.c
+++ b/Create.c
@@ -249,7 +249,9 @@ int Create(struct supertype *st, char *mddev,
                pr_err("unknown level %d\n", level);
                return 1;
        }
-       
+       if (size == MAX_SIZE)
+               /* use '0' to mean 'max' now... */
+               size = 0;
        if (size && chunk && chunk != UnSet)
                size &= ~(unsigned long long)(chunk - 1);
        newsize = size * 2;
diff --git a/Grow.c b/Grow.c
index 24995ad8ed25702ac9304a1a13250467b9937eb5..893e46489ac92e56fae44f4a77720bf11124b85d 100644 (file)
--- a/Grow.c
+++ b/Grow.c
@@ -1429,7 +1429,7 @@ static int reshape_container(char *container, char *devname,
                             int verbose, int restart, int freeze_reshape);
 
 int Grow_reshape(char *devname, int fd, int verbose, char *backup_file,
-                long long size,
+                unsigned long long size,
                 int level, char *layout_str, int chunksize, int raid_disks,
                 struct mddev_dev *devlist,
                 int assume_clean, int force)
@@ -1474,7 +1474,7 @@ int Grow_reshape(char *devname, int fd, int verbose, char *backup_file,
                return 1;
        }
 
-       if (size >= 0 &&
+       if (size > 0 &&
            (chunksize || level!= UnSet || layout_str || raid_disks)) {
                pr_err("cannot change component size at the same time "
                        "as other changes.\n"
@@ -1611,14 +1611,14 @@ int Grow_reshape(char *devname, int fd, int verbose, char *backup_file,
        }
 
        /* ========= set size =============== */
-       if (size >= 0 && (size == 0 || size != array.size)) {
-               long long orig_size = get_component_size(fd)/2;
-               long long min_csize;
+       if (size > 0 && (size == MAX_DISKS || size != (unsigned)array.size)) {
+               unsigned long long orig_size = get_component_size(fd)/2;
+               unsigned long long min_csize;
                struct mdinfo *mdi;
                int raid0_takeover = 0;
 
                if (orig_size == 0)
-                       orig_size = array.size;
+                       orig_size = (unsigned) array.size;
 
                if (reshape_super(st, size, UnSet, UnSet, 0, 0, UnSet, NULL,
                                  devname, APPLY_METADATA_CHANGES, verbose > 0)) {
@@ -1656,7 +1656,8 @@ int Grow_reshape(char *devname, int fd, int verbose, char *backup_file,
                min_csize = 0;
                rv = 0;
                for (mdi = sra->devs; mdi; mdi = mdi->next) {
-                       if (sysfs_set_num(sra, mdi, "size", size) < 0) {
+                       if (sysfs_set_num(sra, mdi, "size",
+                                         size == MAX_SIZE ? 0 : size) < 0) {
                                /* Probably kernel refusing to let us
                                 * reduce the size - not an error.
                                 */
@@ -1671,7 +1672,7 @@ int Grow_reshape(char *devname, int fd, int verbose, char *backup_file,
                                        if (csize >= 2ULL*1024*1024*1024)
                                                csize = 2ULL*1024*1024*1024;
                                        if ((min_csize == 0 || (min_csize
-                                                               > (long long)csize)))
+                                                               > csize)))
                                                min_csize = csize;
                                }
                        }
@@ -1687,7 +1688,7 @@ int Grow_reshape(char *devname, int fd, int verbose, char *backup_file,
                        rv = 1;
                        goto size_change_error;
                }
-               if (min_csize && size == 0) {
+               if (min_csize && size == MAX_SIZE) {
                        /* Don't let the kernel choose a size - it will get
                         * it wrong
                         */
@@ -1717,8 +1718,8 @@ int Grow_reshape(char *devname, int fd, int verbose, char *backup_file,
                                st->update_tail = &st->updates;
                }
 
-               array.size = size;
-               if (array.size != size) {
+               array.size = size == MAX_SIZE ? 0 : size;
+               if ((unsigned)array.size != size) {
                        /* got truncated to 32bit, write to
                         * component_size instead
                         */
diff --git a/mdadm.c b/mdadm.c
index c979b94e3e5e5a9eb021f4e77ad1b6be14c9152e..8832effd9c5a1ccb8a52f2c812fd4ab9f3641f6f 100644 (file)
--- a/mdadm.c
+++ b/mdadm.c
@@ -49,7 +49,7 @@ int main(int argc, char *argv[])
        int i;
 
        int chunk = 0;
-       long long size = -1;
+       unsigned long long size = 0;
        long long array_size = -1;
        int level = UnSet;
        int layout = UnSet;
@@ -416,13 +416,13 @@ int main(int argc, char *argv[])
                case O(GROW,'z'):
                case O(CREATE,'z'):
                case O(BUILD,'z'): /* size */
-                       if (size >= 0) {
+                       if (size > 0) {
                                pr_err("size may only be specified once. "
                                        "Second value is %s.\n", optarg);
                                exit(2);
                        }
                        if (strcmp(optarg, "max")==0)
-                               size = 0;
+                               size = MAX_SIZE;
                        else {
                                size = parse_size(optarg);
                                if (size < 8) {
@@ -1334,7 +1334,7 @@ int main(int argc, char *argv[])
                        break;
                }
 
-               rv = Create(ss, devlist->devname, chunk, level, layout, size<0 ? 0 : size,
+               rv = Create(ss, devlist->devname, chunk, level, layout, size,
                            raiddisks, sparedisks, ident.name,
                            ident.uuid_set ? ident.uuid : NULL,
                            devs_found-1, devlist->next,
@@ -1430,7 +1430,7 @@ int main(int argc, char *argv[])
                }
                if (devs_found > 1 && raiddisks == 0) {
                        /* must be '-a'. */
-                       if (size >= 0 || chunk || layout_str != NULL || bitmap_file) {
+                       if (size > 0 || chunk || layout_str != NULL || bitmap_file) {
                                pr_err("--add cannot be used with "
                                        "other geometry changes in --grow mode\n");
                                rv = 1;
@@ -1443,7 +1443,7 @@ int main(int argc, char *argv[])
                                        break;
                        }
                } else if (bitmap_file) {
-                       if (size >= 0 || raiddisks || chunk ||
+                       if (size > 0 || raiddisks || chunk ||
                            layout_str != NULL || devs_found > 1) {
                                pr_err("--bitmap changes cannot be "
                                        "used with other geometry changes "
@@ -1459,7 +1459,7 @@ int main(int argc, char *argv[])
                        rv = Grow_continue_command(devlist->devname,
                                                   mdfd, c.backup_file,
                                                   c.verbose);
-               else if (size >= 0 || raiddisks != 0 || layout_str != NULL
+               else if (size > 0 || raiddisks != 0 || layout_str != NULL
                         || chunk != 0 || level != UnSet) {
                        rv = Grow_reshape(devlist->devname, mdfd, c.verbose, c.backup_file,
                                          size, level, layout_str, chunk, raiddisks,
diff --git a/mdadm.h b/mdadm.h
index 2bf4e8cba0f103c6090cbff2795ca0733d6c6159..5de1d3e7bacaad28e3147ad5d5db6856ba454a04 100644 (file)
--- a/mdadm.h
+++ b/mdadm.h
@@ -776,7 +776,8 @@ extern struct superswitch {
 #define APPLY_METADATA_CHANGES         1
 #define ROLLBACK_METADATA_CHANGES      0
 
-       int (*reshape_super)(struct supertype *st, long long size, int level,
+       int (*reshape_super)(struct supertype *st,
+                            unsigned long long size, int level,
                             int layout, int chunksize, int raid_disks,
                             int delta_disks, char *backup, char *dev,
                             int direction,
@@ -1074,7 +1075,7 @@ extern int autodetect(void);
 extern int Grow_Add_device(char *devname, int fd, char *newdev);
 extern int Grow_addbitmap(char *devname, int fd, char *file, int chunk, int delay, int write_behind, int force);
 extern int Grow_reshape(char *devname, int fd, int quiet, char *backup_file,
-                       long long size,
+                       unsigned long long size,
                        int level, char *layout_str, int chunksize, int raid_disks,
                        struct mddev_dev *devlist,
                        int assume_clean, int force);
@@ -1440,4 +1441,8 @@ char *xstrdup(const char *str);
  */
 #define MAX_DISKS      4096
 
+/* Sometimes the 'size' value passed needs to mean "Maximum".
+ * In those cases with use MAX_SIZE
+ */
+#define MAX_SIZE       1
 extern int __offroot;
index 10fbcd6fee3dbc94f4da51115a9a02c9402c005e..d11eabdded262e138d1f0e1ca9fba163dce21174 100644 (file)
@@ -433,7 +433,7 @@ struct imsm_update_activate_spare {
 struct geo_params {
        int dev_id;
        char *dev_name;
-       long long size;
+       unsigned long long size;
        int level;
        int layout;
        int chunksize;
@@ -9307,7 +9307,7 @@ static int imsm_reshape_is_allowed_on_container(struct supertype *st,
                "st->devnum = (%i)\n",
                st->devnum);
 
-       if (geo->size != -1 ||
+       if (geo->size > 0 ||
            geo->level != UnSet ||
            geo->layout != UnSet ||
            geo->chunksize != 0 ||
@@ -9647,9 +9647,9 @@ enum imsm_reshape_type imsm_analyze_change(struct supertype *st,
        int data_disks;
        struct imsm_dev *dev;
        struct intel_super *super;
-       long long current_size;
+       unsigned long long current_size;
        unsigned long long free_size;
-       long long max_size;
+       unsigned long long max_size;
        int rv;
 
        getinfo_super_imsm_volume(st, &info, NULL);
@@ -9746,7 +9746,7 @@ enum imsm_reshape_type imsm_analyze_change(struct supertype *st,
                                    geo->size * 2);
        }
 
-       if ((current_size != geo->size) && (geo->size >= 0)) {
+       if ((current_size != geo->size) && (geo->size > 0)) {
                if (change != -1) {
                        pr_err("Error. Size change should be the only "
                                "one at a time.\n");
@@ -9776,7 +9776,7 @@ enum imsm_reshape_type imsm_analyze_change(struct supertype *st,
                                        chunk * 1024,
                                        max_size);
                }
-               if (geo->size == 0) {
+               if (geo->size == MAX_SIZE) {
                        /* requested size change to the maximum available size
                         */
                        if (max_size == 0) {
@@ -9881,7 +9881,8 @@ int imsm_takeover(struct supertype *st, struct geo_params *geo)
        return 0;
 }
 
-static int imsm_reshape_super(struct supertype *st, long long size, int level,
+static int imsm_reshape_super(struct supertype *st, unsigned long long size,
+                             int level,
                              int layout, int chunksize, int raid_disks,
                              int delta_disks, char *backup, char *dev,
                              int direction, int verbose)