Assemble: include ACTIVE but not in-sync devices as non-spares.

Previously such things did not exist: ACTIVE and SYNC were either both
set or both clear.   Recent changes with reshape means that a device
can be ACTIVE but not yet fully in-sync, so they need to be handled
and included in the array as active devices.

Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
NeilBrown 2009-11-17 12:30:54 +11:00
parent 14e5b4d72b
commit f22385f982
4 changed files with 4 additions and 4 deletions

View File

@ -777,7 +777,7 @@ int Assemble(struct supertype *st, char *mddev,
* as they don't make sense
*/
if (content->array.level != -4)
if (!(devices[j].i.disk.state & (1<<MD_DISK_SYNC))) {
if (!(devices[j].i.disk.state & (1<<MD_DISK_ACTIVE))) {
if (!(devices[j].i.disk.state
& (1<<MD_DISK_FAULTY)))
sparecnt++;

2
md_p.h
View File

@ -75,7 +75,7 @@
* Device "operational" state bits
*/
#define MD_DISK_FAULTY 0 /* disk is faulty / operational */
#define MD_DISK_ACTIVE 1 /* disk is running or spare disk */
#define MD_DISK_ACTIVE 1 /* disk is running but may not be in sync */
#define MD_DISK_SYNC 2 /* disk is in sync with the raid set */
#define MD_DISK_REMOVED 3 /* disk is in sync with the raid set */

View File

@ -1366,7 +1366,7 @@ static void getinfo_super_ddf(struct supertype *st, struct mdinfo *info)
info->disk.raid_disk = -1;
// info->disk.raid_disk = find refnum in the table and use index;
}
info->disk.state = (1 << MD_DISK_SYNC);
info->disk.state = (1 << MD_DISK_SYNC) | (1 << MD_DISK_ACTIVE);
info->reshape_active = 0;

View File

@ -594,7 +594,7 @@ static void getinfo_super1(struct supertype *st, struct mdinfo *info)
info->disk.raid_disk = -1;
switch(role) {
case 0xFFFF:
info->disk.state = 2; /* spare: ACTIVE, not sync, not faulty */
info->disk.state = 0; /* spare: not active, not sync, not faulty */
break;
case 0xFFFE:
info->disk.state = 1; /* faulty */