From de5a472ea32867d002558bac0d2d2b4faf45c7c4 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Tue, 7 Feb 2012 14:04:47 +1100 Subject: [PATCH] Remove avail_disks arg from 'enough'. 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 --- Assemble.c | 16 ++++++++-------- Detail.c | 4 ++-- Incremental.c | 2 +- mdadm.h | 2 +- util.c | 11 ++++++++--- 5 files changed, 20 insertions(+), 15 deletions(-) diff --git a/Assemble.c b/Assemble.c index fd944619..972398e5 100644 --- a/Assemble.c +++ b/Assemble.c @@ -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"); diff --git a/Detail.c b/Detail.c index e7d16812..1d7e3a16 100644 --- 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); diff --git a/Incremental.c b/Incremental.c index 60175af0..b457bf38 100644 --- a/Incremental.c +++ b/Incremental.c @@ -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 d862b3ed..45198bbd 100644 --- 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 4ba44e61..e5f7a202 100644 --- 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; } -- 2.39.2