NeilBrown: Improve reporting of layout for raid10.

Martin F. Krafft madduck at alioth.debian.org
Mon Feb 16 11:24:08 UTC 2009


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

Author: NeilBrown <neilb at suse.de>
Date:   Mon Oct 13 16:15:18 2008 +1100

Improve reporting of layout for raid10.

Showing e.g.

   near=1, far=2

for the 'far2' layout of raid10 is confusing even though there is a
sense in which is it correct.

Make it less confusing by only printing whichever number is not 1.
If both are 1, make that clear too (i.e. no redundancy).

---

 Detail.c |    6 +++---
 mdadm.h  |    3 ++-
 super0.c |    7 +++----
 super1.c |   14 ++++++--------
 util.c   |   17 +++++++++++++++++
 5 files changed, 31 insertions(+), 16 deletions(-)

diff --git a/Detail.c b/Detail.c
index 2b2111c..25b91b1 100644
--- a/Detail.c
+++ b/Detail.c
@@ -239,9 +239,9 @@ int Detail(char *dev, int brief, int export, int test, char *homehost)
 			printf("         Layout : %s\n", c?c:"-unknown-");
 		}
 		if (array.level == 10) {
-			printf("         Layout : near=%d, %s=%d\n",
-			       array.layout&255, (array.layout&0x10000)?"offset":"far",
-			       (array.layout>>8)&255);
+			printf("         Layout :");
+			print_r10_layout(array.layout);
+			printf("\n");
 		}
 		switch (array.level) {
 		case 0:
diff --git a/mdadm.h b/mdadm.h
index ce140e5..174ea39 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -513,7 +513,8 @@ extern void remove_partitions(int fd);
 
 
 extern char *human_size(long long bytes);
-char *human_size_brief(long long bytes);
+extern char *human_size_brief(long long bytes);
+extern void print_r10_layout(int layout);
 
 #define NoMdDev (1<<23)
 extern int find_free_devnum(int use_partitions);
diff --git a/super0.c b/super0.c
index 8e4c568..71dc39c 100644
--- a/super0.c
+++ b/super0.c
@@ -188,10 +188,9 @@ static void examine_super0(struct supertype *st, char *homehost)
 		printf("         Layout : %s\n", c?c:"-unknown-");
 	}
 	if (sb->level == 10) {
-		printf("         Layout : near=%d, %s=%d\n",
-		       sb->layout&255,
-		       (sb->layout&0x10000)?"offset":"far",
-		       (sb->layout>>8)&255);
+		printf("         Layout :");
+		print_r10_layout(sb->layout);
+		printf("\n");
 	}
 	switch(sb->level) {
 	case 0:
diff --git a/super1.c b/super1.c
index e1d0219..bec0c5e 100644
--- a/super1.c
+++ b/super1.c
@@ -248,10 +248,9 @@ static void examine_super1(struct supertype *st, char *homehost)
 				printf("     New Layout : %s\n", c?c:"-unknown-");
 			}
 			if (__le32_to_cpu(sb->level) == 10) {
-				printf("     New Layout : near=%d, %s=%d\n",
-				       __le32_to_cpu(sb->new_layout)&255,
-				       (__le32_to_cpu(sb->new_layout)&0x10000)?"offset":"far",
-				       (__le32_to_cpu(sb->new_layout)>>8)&255);
+				printf("     New Layout :");
+				print_r10_layout(__le32_to_cpu(sb->new_layout));
+				printf("\n");
 			}
 		}
 		if (__le32_to_cpu(sb->new_chunk) != __le32_to_cpu(sb->chunksize))
@@ -281,10 +280,9 @@ static void examine_super1(struct supertype *st, char *homehost)
 	}
 	if (__le32_to_cpu(sb->level) == 10) {
 		int lo = __le32_to_cpu(sb->layout);
-		printf("         Layout : near=%d, %s=%d\n",
-		       lo&255,
-		       (lo&0x10000)?"offset":"far",
-		       (lo>>8)&255);
+		printf("         Layout :");
+		print_r10_layout(lo);
+		printf("\n");
 	}
 	switch(__le32_to_cpu(sb->level)) {
 	case 0:
diff --git a/util.c b/util.c
index 75f3706..2d51de0 100644
--- a/util.c
+++ b/util.c
@@ -606,6 +606,23 @@ char *human_size_brief(long long bytes)
 			);
 	return buf;
 }
+
+void print_r10_layout(int layout)
+{
+	int near = layout & 255;
+	int far = (layout >> 8) & 255;
+	int offset = (layout&0x10000);
+	char *sep = "";
+
+	if (near != 1) {
+		printf("%s near=%d", sep, near);
+		sep = ",";
+	}
+	if (far != 1)
+		printf("%s %s=%d", sep, offset?"offset":"far", far);
+	if (near*far == 1)
+		printf("NO REDUNDANCY");
+}
 #endif
 
 #if !defined(MDASSEMBLE) || defined(MDASSEMBLE) && defined(MDASSEMBLE_AUTO)




More information about the pkg-mdadm-commits mailing list