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

Martin F. Krafft madduck at alioth.debian.org
Wed Jan 27 02:03:29 UTC 2010


Module: mdadm
Branch: upstream
Commit: f22385f9826bcf35c8055c3b89b731f5760a46c5
URL:    http://git.debian.org/?p=pkg-mdadm/mdadm.git;a=commit;h=f22385f9826bcf35c8055c3b89b731f5760a46c5

Author: NeilBrown <neilb at suse.de>
Date:   Tue Nov 17 12:30:54 2009 +1100

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 at suse.de>

---

 Assemble.c  |    2 +-
 md_p.h      |    2 +-
 super-ddf.c |    2 +-
 super1.c    |    2 +-
 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 */




More information about the pkg-mdadm-commits mailing list