From e4965ef8461b3d0db6e94939f07d814d819f86c2 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Mon, 13 Oct 2008 16:15:18 +1100 Subject: [PATCH 1/1] 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 2b2111cd..25b91b1e 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 ce140e58..174ea395 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 8e4c568e..71dc39ce 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 e1d02190..bec0c5e4 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 75f37064..2d51de02 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) -- 2.39.2