]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Remove avail_disks arg from 'enough'.
authorNeilBrown <neilb@suse.de>
Tue, 7 Feb 2012 03:04:47 +0000 (14:04 +1100)
committerNeilBrown <neilb@suse.de>
Tue, 7 Feb 2012 03:04:47 +0000 (14:04 +1100)
It can easily be calculated from 'avail' and  'raid_disks', and we
will soon have a case where we don't have it easily available to pass
in.

Signed-off-by: NeilBrown <neilb@suse.de>
Assemble.c
Detail.c
Incremental.c
mdadm.h
util.c

index fd9446190f7095be870ba080f2498ebe52662584..972398e5513cfde4d52b4c4f7e0dd4f364bd76a5 100644 (file)
@@ -934,7 +934,7 @@ int Assemble(struct supertype *st, char *mddev,
                                }
                                continue;
                        }
-               /* If this devices thinks that 'most_recent' has failed, then
+               /* If this device thinks that 'most_recent' has failed, then
                 * we must reject this device.
                 */
                if (j != most_recent &&
@@ -965,7 +965,7 @@ int Assemble(struct supertype *st, char *mddev,
        free(devmap);
        while (force && !enough(content->array.level, content->array.raid_disks,
                                content->array.layout, 1,
-                               avail, okcnt)) {
+                               avail)) {
                /* Choose the newest best drive which is
                 * not up-to-date, update the superblock
                 * and add it.
@@ -1132,7 +1132,7 @@ int Assemble(struct supertype *st, char *mddev,
        if (force && !clean &&
            !enough(content->array.level, content->array.raid_disks,
                    content->array.layout, clean,
-                   avail, okcnt)) {
+                   avail)) {
                change += st->ss->update_super(st, content, "force-array",
                                        devices[chosen_drive].devname, verbose,
                                               0, NULL);
@@ -1331,7 +1331,7 @@ int Assemble(struct supertype *st, char *mddev,
                if (runstop == 1 ||
                    (runstop <= 0 &&
                     ( enough(content->array.level, content->array.raid_disks,
-                             content->array.layout, clean, avail, okcnt) &&
+                             content->array.layout, clean, avail) &&
                       (okcnt + rebuilding_cnt >= req_cnt || start_partial_ok)
                             ))) {
                        /* This array is good-to-go.
@@ -1437,13 +1437,13 @@ int Assemble(struct supertype *st, char *mddev,
                                mddev, strerror(errno));
 
                        if (!enough(content->array.level, content->array.raid_disks,
-                                   content->array.layout, 1, avail, okcnt))
+                                   content->array.layout, 1, avail))
                                fprintf(stderr, Name ": Not enough devices to "
                                        "start the array.\n");
                        else if (!enough(content->array.level,
                                         content->array.raid_disks,
                                         content->array.layout, clean,
-                                        avail, okcnt))
+                                        avail))
                                fprintf(stderr, Name ": Not enough devices to "
                                        "start the array while not clean "
                                        "- consider --force.\n");
@@ -1471,12 +1471,12 @@ int Assemble(struct supertype *st, char *mddev,
                        if (sparecnt)
                                fprintf(stderr, " and %d spare%s", sparecnt, sparecnt==1?"":"s");
                        if (!enough(content->array.level, content->array.raid_disks,
-                                   content->array.layout, 1, avail, okcnt))
+                                   content->array.layout, 1, avail))
                                fprintf(stderr, " - not enough to start the array.\n");
                        else if (!enough(content->array.level,
                                         content->array.raid_disks,
                                         content->array.layout, clean,
-                                        avail, okcnt))
+                                        avail))
                                fprintf(stderr, " - not enough to start the "
                                        "array while not clean - consider "
                                        "--force.\n");
index e7d16812932e9ffbe2b2fa6a81d041a77e16ad98..1d7e3a1648288472ef396f55f2e55ed1e2b14042 100644 (file)
--- a/Detail.c
+++ b/Detail.c
@@ -367,7 +367,7 @@ int Detail(char *dev, int brief, int export, int test, char *homehost)
                        if (avail_disks == array.raid_disks)
                                st = "";
                        else if (!enough(array.level, array.raid_disks,
-                                        array.layout, 1, avail, avail_disks))
+                                        array.layout, 1, avail))
                                st = ", FAILED";
                        else
                                st = ", degraded";
@@ -580,7 +580,7 @@ This is pretty boring
        if (brief) printf("\n");
        if (test &&
            !enough(array.level, array.raid_disks, array.layout,
-                   1, avail, avail_disks))
+                   1, avail))
                rv = 2;
 
        free(disks);
index 60175af048ef86c42413e6d138eab87d64d3ee5f..b457bf38a9d14b3dc74ff785adf68081e80fabe2 100644 (file)
@@ -486,7 +486,7 @@ int Incremental(char *devname, int verbose, int runstop,
        active_disks = count_active(st, sra, mdfd, &avail, &info);
        if (enough(info.array.level, info.array.raid_disks,
                   info.array.layout, info.array.state & 1,
-                  avail, active_disks) == 0) {
+                  avail) == 0) {
                if (verbose >= 0)
                        fprintf(stderr, Name
                             ": %s attached to %s, not enough to start (%d).\n",
diff --git a/mdadm.h b/mdadm.h
index d862b3ed104b0c8cc02d1beaf4a4a33b33e9b5a7..45198bbdee306b223641ed4bb38934b35a668b03 100644 (file)
--- a/mdadm.h
+++ b/mdadm.h
@@ -1164,7 +1164,7 @@ extern char *fname_from_uuid(struct supertype *st,
                             struct mdinfo *info, char *buf, char sep);
 extern unsigned long calc_csum(void *super, int bytes);
 extern int enough(int level, int raid_disks, int layout, int clean,
-                  char *avail, int avail_disks);
+                  char *avail);
 extern int enough_fd(int fd);
 extern int ask(char *mesg);
 extern unsigned long long get_component_size(int fd);
diff --git a/util.c b/util.c
index 4ba44e61fd84574a73ea2e63d62c2a10134dbcc6..e5f7a202ba66fd02de8a0bbe5b54bd8b3e931f9e 100644 (file)
--- a/util.c
+++ b/util.c
@@ -311,10 +311,15 @@ int test_partition_from_id(dev_t id)
        return rv;
 }
 
-int enough(int level, int raid_disks, int layout, int clean,
-          char *avail, int avail_disks)
+int enough(int level, int raid_disks, int layout, int clean, char *avail)
 {
        int copies, first;
+       int i;
+       int avail_disks = 0;
+
+       for (i = 0; i < raid_disks; i++)
+               avail_disks += !!avail[i];
+
        switch (level) {
        case 10:
                /* This is the tricky one - we need to check
@@ -389,7 +394,7 @@ int enough_fd(int fd)
        }
        /* This is used on an active array, so assume it is clean */
        rv = enough(array.level, array.raid_disks, array.layout,
-                   1, avail, avail_disks);
+                   1, avail);
        free(avail);
        return rv;
 }