Incremental: support replacement devices.

These need to be counted in the number of 'active' devices.

Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
NeilBrown 2012-10-24 12:06:51 +11:00
parent aacb2f816a
commit 72e7fb13f0
2 changed files with 5 additions and 2 deletions

View File

@ -641,6 +641,7 @@ static int count_active(struct supertype *st, struct mdinfo *sra,
/* count how many devices in sra think they are active */
struct mdinfo *d;
int cnt = 0;
int replcnt = 0;
__u64 max_events = 0;
char *avail = NULL;
int *best = NULL;
@ -716,7 +717,8 @@ static int count_active(struct supertype *st, struct mdinfo *sra,
best[info.disk.raid_disk] = devnum;
st->ss->getinfo_super(st, bestinfo, NULL);
}
}
} else if (info.disk.state & (1<<MD_DISK_REPLACEMENT))
replcnt++;
st->ss->free_super(st);
}
if (!avail)
@ -743,7 +745,7 @@ static int count_active(struct supertype *st, struct mdinfo *sra,
}
free(best);
free(devmap);
return cnt;
return cnt + replcnt;
}
/* test if container has degraded member(s) */

View File

@ -767,6 +767,7 @@ static void getinfo_super1(struct supertype *st, struct mdinfo *info, char *map)
info->name[32] = 0;
if ((__le32_to_cpu(sb->feature_map)&MD_FEATURE_REPLACEMENT)) {
info->disk.state &= ~(1 << MD_DISK_SYNC);
info->disk.state |= 1 << MD_DISK_REPLACEMENT;
}