summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2009-11-17 12:30:54 +1100
committerNeilBrown <neilb@suse.de>2009-11-17 12:30:54 +1100
commitf22385f9826bcf35c8055c3b89b731f5760a46c5 (patch)
tree7fab61d87c2b2bbe8aaad4e642b8c083999ff094
parent14e5b4d72b4db55e688581d98ec47131554f747c (diff)
downloadmdadm-f22385f9826bcf35c8055c3b89b731f5760a46c5.tar.gz
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>
-rw-r--r--Assemble.c2
-rw-r--r--md_p.h2
-rw-r--r--super-ddf.c2
-rw-r--r--super1.c2
4 files changed, 4 insertions, 4 deletions
diff --git a/Assemble.c b/Assemble.c
index a52dc50..a16cafe 100644
--- a/Assemble.c
+++ b/Assemble.c
@@ -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++;
diff --git a/md_p.h b/md_p.h
index a9f0204..4594a36 100644
--- a/md_p.h
+++ b/md_p.h
@@ -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 */
diff --git a/super-ddf.c b/super-ddf.c
index 06858e2..80df570 100644
--- a/super-ddf.c
+++ b/super-ddf.c
@@ -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;
diff --git a/super1.c b/super1.c
index a64876e..667154d 100644
--- a/super1.c
+++ b/super1.c
@@ -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 */