From: NeilBrown Date: Mon, 22 Nov 2010 09:58:06 +0000 (+1100) Subject: imsm: always calculate container_enough in getinfo_super_imsm X-Git-Tag: mdadm-3.2~277 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ab3cb6b3b7418e4d70e915c47ca48422eb43d182;p=thirdparty%2Fmdadm.git imsm: always calculate container_enough in getinfo_super_imsm We are about to lose the loaded_container field, and we don't really need to use it to protect the calculation of container_enough. So drop the test. Signed-off-by: NeilBrown --- diff --git a/super-intel.c b/super-intel.c index 15ff2b56..4176b745 100644 --- a/super-intel.c +++ b/super-intel.c @@ -1580,6 +1580,9 @@ static void getinfo_super_imsm(struct supertype *st, struct mdinfo *info, char * struct intel_super *super = st->sb; struct imsm_disk *disk; int map_disks = info->array.raid_disks; + int max_enough = -1; + int i; + struct imsm_super *mpb; if (super->current_vol >= 0) { getinfo_super_imsm_volume(st, info, map); @@ -1611,51 +1614,47 @@ static void getinfo_super_imsm(struct supertype *st, struct mdinfo *info, char * info->recovery_start = MaxSector; /* do we have the all the insync disks that we expect? */ - if (st->loaded_container) { - struct imsm_super *mpb = super->anchor; - int max_enough = -1, i; + mpb = super->anchor; - for (i = 0; i < mpb->num_raid_devs; i++) { - struct imsm_dev *dev = get_imsm_dev(super, i); - int failed, enough, j, missing = 0; - struct imsm_map *map; - __u8 state; + for (i = 0; i < mpb->num_raid_devs; i++) { + struct imsm_dev *dev = get_imsm_dev(super, i); + int failed, enough, j, missing = 0; + struct imsm_map *map; + __u8 state; - failed = imsm_count_failed(super, dev); - state = imsm_check_degraded(super, dev, failed); - map = get_imsm_map(dev, dev->vol.migr_state); + failed = imsm_count_failed(super, dev); + state = imsm_check_degraded(super, dev, failed); + map = get_imsm_map(dev, dev->vol.migr_state); - /* any newly missing disks? - * (catches single-degraded vs double-degraded) - */ - for (j = 0; j < map->num_members; j++) { - __u32 ord = get_imsm_ord_tbl_ent(dev, i); - __u32 idx = ord_to_idx(ord); + /* any newly missing disks? + * (catches single-degraded vs double-degraded) + */ + for (j = 0; j < map->num_members; j++) { + __u32 ord = get_imsm_ord_tbl_ent(dev, i); + __u32 idx = ord_to_idx(ord); - if (!(ord & IMSM_ORD_REBUILD) && - get_imsm_missing(super, idx)) { - missing = 1; - break; - } + if (!(ord & IMSM_ORD_REBUILD) && + get_imsm_missing(super, idx)) { + missing = 1; + break; } + } - if (state == IMSM_T_STATE_FAILED) - enough = -1; - else if (state == IMSM_T_STATE_DEGRADED && - (state != map->map_state || missing)) - enough = 0; - else /* we're normal, or already degraded */ - enough = 1; + if (state == IMSM_T_STATE_FAILED) + enough = -1; + else if (state == IMSM_T_STATE_DEGRADED && + (state != map->map_state || missing)) + enough = 0; + else /* we're normal, or already degraded */ + enough = 1; - /* in the missing/failed disk case check to see - * if at least one array is runnable - */ - max_enough = max(max_enough, enough); - } - dprintf("%s: enough: %d\n", __func__, max_enough); - info->container_enough = max_enough; - } else - info->container_enough = -1; + /* in the missing/failed disk case check to see + * if at least one array is runnable + */ + max_enough = max(max_enough, enough); + } + dprintf("%s: enough: %d\n", __func__, max_enough); + info->container_enough = max_enough; if (super->disks) { __u32 reserved = imsm_reserved_sectors(super, super->disks);