summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2008-10-13 16:15:18 +1100
committerNeilBrown <neilb@suse.de>2008-10-13 16:15:18 +1100
commite4965ef8461b3d0db6e94939f07d814d819f86c2 (patch)
tree61e614fb47f97eb10e6628fa531a0065b4ddf0c4
parent2a528478c75b6659188fc2ce0d9543124992fe6c (diff)
downloadmdadm-e4965ef8461b3d0db6e94939f07d814d819f86c2.tar.gz
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).
-rw-r--r--Detail.c6
-rw-r--r--mdadm.h3
-rw-r--r--super0.c7
-rw-r--r--super1.c14
-rw-r--r--util.c17
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)