]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
mdadm: replace container level checking with inline
authorKinga Tanska <kinga.tanska@intel.com>
Fri, 2 Sep 2022 06:49:23 +0000 (08:49 +0200)
committerJes Sorensen <jsorensen@fb.com>
Thu, 29 Sep 2022 15:04:43 +0000 (11:04 -0400)
To unify all containers checks in code, is_container() function is
added and propagated.

Signed-off-by: Kinga Tanska <kinga.tanska@intel.com>
Acked-by: Coly Li <colyli@suse.de>
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
Assemble.c
Create.c
Grow.c
Incremental.c
mdadm.h
super-ddf.c
super-intel.c
super0.c
super1.c
sysfs.c

index 1dd82a8c190db305fb90cefe49f7ac7a56cd91a2..8b0af0c907cf624a426722d05a9fde5964ec6b7e 100644 (file)
@@ -1120,7 +1120,7 @@ static int start_array(int mdfd,
                               i/2, mddev);
        }
 
-       if (content->array.level == LEVEL_CONTAINER) {
+       if (is_container(content->array.level)) {
                sysfs_rules_apply(mddev, content);
                if (c->verbose >= 0) {
                        pr_err("Container %s has been assembled with %d drive%s",
@@ -1549,8 +1549,7 @@ try_again:
                         */
                        trustworthy = LOCAL;
 
-               if (name[0] == 0 &&
-                   content->array.level == LEVEL_CONTAINER) {
+               if (!name[0] && is_container(content->array.level)) {
                        name = content->text_version;
                        trustworthy = METADATA;
                }
@@ -1809,7 +1808,7 @@ try_again:
                }
 #endif
        }
-       if (c->force && !clean && content->array.level != LEVEL_CONTAINER &&
+       if (c->force && !clean && !is_container(content->array.level) &&
            !enough(content->array.level, content->array.raid_disks,
                    content->array.layout, clean, avail)) {
                change += st->ss->update_super(st, content, "force-array",
index e06ec2ae96a1049546a877a40adb193bd79cb99e..953e73722518b1fe5c36c3a4748bf70fcbbc9dd3 100644 (file)
--- a/Create.c
+++ b/Create.c
@@ -487,7 +487,7 @@ int Create(struct supertype *st, char *mddev,
                            st->minor_version >= 1)
                                /* metadata at front */
                                warn |= check_partitions(fd, dname, 0, 0);
-                       else if (s->level == 1 || s->level == LEVEL_CONTAINER ||
+                       else if (s->level == 1 || is_container(s->level) ||
                                 (s->level == 0 && s->raiddisks == 1))
                                /* partitions could be meaningful */
                                warn |= check_partitions(fd, dname, freesize*2, s->size*2);
@@ -997,7 +997,7 @@ int Create(struct supertype *st, char *mddev,
                         * again returns container info.
                         */
                        st->ss->getinfo_super(st, &info_new, NULL);
-                       if (st->ss->external && s->level != LEVEL_CONTAINER &&
+                       if (st->ss->external && !is_container(s->level) &&
                            !same_uuid(info_new.uuid, info.uuid, 0)) {
                                map_update(&map, fd2devnm(mdfd),
                                           info_new.text_version,
@@ -1040,7 +1040,7 @@ int Create(struct supertype *st, char *mddev,
        map_unlock(&map);
        free(infos);
 
-       if (s->level == LEVEL_CONTAINER) {
+       if (is_container(s->level)) {
                /* No need to start.  But we should signal udev to
                 * create links */
                sysfs_uevent(&info, "change");
diff --git a/Grow.c b/Grow.c
index 0f07a89435af4d54c3293da19b6707edbded8790..e362403aa81e0e46c26273d9ae26dde1ad1d54f5 100644 (file)
--- a/Grow.c
+++ b/Grow.c
@@ -2175,7 +2175,7 @@ size_change_error:
                                        devname, s->size);
                }
                changed = 1;
-       } else if (array.level != LEVEL_CONTAINER) {
+       } else if (!is_container(array.level)) {
                s->size = get_component_size(fd)/2;
                if (s->size == 0)
                        s->size = array.size;
@@ -2231,7 +2231,7 @@ size_change_error:
        info.component_size = s->size*2;
        info.new_level = s->level;
        info.new_chunk = s->chunk * 1024;
-       if (info.array.level == LEVEL_CONTAINER) {
+       if (is_container(info.array.level)) {
                info.delta_disks = UnSet;
                info.array.raid_disks = s->raiddisks;
        } else if (s->raiddisks)
@@ -2344,7 +2344,7 @@ size_change_error:
                                printf("layout for %s set to %d\n",
                                       devname, array.layout);
                }
-       } else if (array.level == LEVEL_CONTAINER) {
+       } else if (is_container(array.level)) {
                /* This change is to be applied to every array in the
                 * container.  This is only needed when the metadata imposes
                 * restraints of the various arrays in the container.
index 4d0cd9d6d257155d957db96733a69b6e3f851860..5a5f4c4cb0ea940bb61cfedc6d5a26796bec88b3 100644 (file)
@@ -244,7 +244,7 @@ int Incremental(struct mddev_dev *devlist, struct context *c,
                c->autof = ci->autof;
 
        name_to_use = info.name;
-       if (name_to_use[0] == 0 && info.array.level == LEVEL_CONTAINER) {
+       if (name_to_use[0] == 0 && is_container(info.array.level)) {
                name_to_use = info.text_version;
                trustworthy = METADATA;
        }
@@ -472,7 +472,7 @@ int Incremental(struct mddev_dev *devlist, struct context *c,
 
        /* 7/ Is there enough devices to possibly start the array? */
        /* 7a/ if not, finish with success. */
-       if (info.array.level == LEVEL_CONTAINER) {
+       if (is_container(info.array.level)) {
                char devnm[32];
                /* Try to assemble within the container */
                sysfs_uevent(sra, "change");
diff --git a/mdadm.h b/mdadm.h
index 941a5f3823a01b5d506c790be1c2dfb810501272..3673494e560b9624b95e3d854ca8a95ee28a1104 100644 (file)
--- a/mdadm.h
+++ b/mdadm.h
@@ -1924,3 +1924,17 @@ enum r0layout {
  * This is true for native and DDF, IMSM allows 16.
  */
 #define MD_NAME_MAX 32
+
+/**
+ * is_container() - check if @level is &LEVEL_CONTAINER
+ * @level: level value
+ *
+ * return:
+ * 1 if level is equal to &LEVEL_CONTAINER, 0 otherwise.
+ */
+static inline int is_container(const int level)
+{
+       if (level == LEVEL_CONTAINER)
+               return 1;
+       return 0;
+}
index 949e7d15547466701ffc39d507002fb2fb4f87b1..9d1e3b940df4d6f0b046a32de82255534c095ef4 100644 (file)
@@ -3325,7 +3325,7 @@ validate_geometry_ddf_container(struct supertype *st,
        int fd;
        unsigned long long ldsize;
 
-       if (level != LEVEL_CONTAINER)
+       if (!is_container(level))
                return 0;
        if (!dev)
                return 1;
@@ -3371,7 +3371,7 @@ static int validate_geometry_ddf(struct supertype *st,
 
        if (level == LEVEL_NONE)
                level = LEVEL_CONTAINER;
-       if (level == LEVEL_CONTAINER) {
+       if (is_container(level)) {
                /* Must be a fresh device to add to a container */
                return validate_geometry_ddf_container(st, level, raiddisks,
                                                       data_offset, dev,
@@ -3488,7 +3488,7 @@ static int validate_geometry_ddf_bvd(struct supertype *st,
        struct dl *dl;
        unsigned long long maxsize;
        /* ddf/bvd supports lots of things, but not containers */
-       if (level == LEVEL_CONTAINER) {
+       if (is_container(level)) {
                if (verbose)
                        pr_err("DDF cannot create a container within an container\n");
                return 0;
index 4d82af3dff4f68674c3073abdafb05263c689fce..b05656105eee32729249f60dcaa31f6b088a7554 100644 (file)
@@ -6727,7 +6727,7 @@ static int validate_geometry_imsm_container(struct supertype *st, int level,
        struct intel_super *super = NULL;
        int rv = 0;
 
-       if (level != LEVEL_CONTAINER)
+       if (!is_container(level))
                return 0;
        if (!dev)
                return 1;
@@ -7692,7 +7692,7 @@ static int validate_geometry_imsm(struct supertype *st, int level, int layout,
         * if given unused devices create a container
         * if given given devices in a container create a member volume
         */
-       if (level == LEVEL_CONTAINER)
+       if (is_container(level))
                /* Must be a fresh device to add to a container */
                return validate_geometry_imsm_container(st, level, raiddisks,
                                                        data_offset, dev,
index 37f595ed9e6027881a7738d5d95bc4a8e2499290..93876e2ecbe02b0f63616a334073fe7b02cc99c2 100644 (file)
--- a/super0.c
+++ b/super0.c
@@ -1273,7 +1273,7 @@ static int validate_geometry0(struct supertype *st, int level,
        if (get_linux_version() < 3001000)
                tbmax = 2;
 
-       if (level == LEVEL_CONTAINER) {
+       if (is_container(level)) {
                if (verbose)
                        pr_err("0.90 metadata does not support containers\n");
                return 0;
index 58345e68b97c7e32cf935e95f4f0985cc3723318..0b505a7e1838d85a6100cca41f74d7173c89adc0 100644 (file)
--- a/super1.c
+++ b/super1.c
@@ -2830,7 +2830,7 @@ static int validate_geometry1(struct supertype *st, int level,
        unsigned long long overhead;
        int fd;
 
-       if (level == LEVEL_CONTAINER) {
+       if (is_container(level)) {
                if (verbose)
                        pr_err("1.x metadata does not support containers\n");
                return 0;
diff --git a/sysfs.c b/sysfs.c
index 0d98a65faa81ed8f0e295cb5e6444841989b9952..ca1d888f21ced33c8772a9a468cd04668f953b86 100644 (file)
--- a/sysfs.c
+++ b/sysfs.c
@@ -763,7 +763,7 @@ int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd, int resume)
 
        rv = sysfs_set_num(sra, sd, "offset", sd->data_offset);
        rv |= sysfs_set_num(sra, sd, "size", (sd->component_size+1) / 2);
-       if (sra->array.level != LEVEL_CONTAINER) {
+       if (!is_container(sra->array.level)) {
                if (sra->consistency_policy == CONSISTENCY_POLICY_PPL) {
                        rv |= sysfs_set_num(sra, sd, "ppl_sector", sd->ppl_sector);
                        rv |= sysfs_set_num(sra, sd, "ppl_size", sd->ppl_size);