[PATCH] btrfs-progs: Make "btrfs filesystem df" command to show upper case profile

Qu Wenruo
2021-11-02T10:48:19Z

[BUG]
Since commit dad03fac3bb8 ("btrfs-progs: switch btrfs_group_profile_str
to use raid table"), fstests/btrfs/023 and btrfs/151 will always fail.

The failure of btrfs/151 explains the reason pretty well:

btrfs/151 1s ... - output mismatch
--- tests/btrfs/151.out 2019-10-22 15:18:14.068965341 +0800
+++ ~/xfstests-dev/results//btrfs/151.out.bad 2021-11-02 17:13:43.879999994 +0800
@@ -1,2 +1,2 @@
QA output created by 151
-Data, RAID1
+Data, raid1
...
(Run 'diff -u ~/xfstests-dev/tests/btrfs/151.out ~/xfstests-dev/results//btrfs/151.out.bad' to see the entire diff)

[CAUSE]
Commit dad03fac3bb8 ("btrfs-progs: switch btrfs_group_profile_str to use
raid table") will use btrfs_raid_array[index].raid_name, which is all
lower case.

[FIX]
There is no need to bring such output format change.

So here we adds a new helper function, btrfs_group_profile_upper_str()
to print the upper case profile name.

Signed-off-by: Qu Wenruo <wqu@suse.com>
---
cmds/filesystem.c | 4 +++-
common/utils.c | 10 ++++++++++
common/utils.h | 3 +++
3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/cmds/filesystem.c b/cmds/filesystem.c
index 6a9e46d2b7dc..9f49b7d0c9c5 100644
--- a/cmds/filesystem.c
+++ b/cmds/filesystem.c
@@ -72,6 +72,7 @@ static void print_df(int fd, struct btrfs_ioctl_space_args *sargs, unsigned unit
{
u64 i;
struct btrfs_ioctl_space_info *sp = sargs->spaces;
+ char profile_buf[BTRFS_PROFILE_STR_LEN];
u64 unusable;
bool ok;

@@ -79,9 +80,10 @@ static void print_df(int fd, struct btrfs_ioctl_space_args *sargs, unsigned unit
unusable = device_get_zone_unusable(fd, sp->flags);
ok = (unusable != DEVICE_ZONE_UNUSABLE_UNKNOWN);

+ btrfs_group_profile_upper_str(sp->flags, profile_buf);
printf("%s, %s: total=%s, used=%s%s%s\n",
btrfs_group_type_str(sp->flags),
- btrfs_group_profile_str(sp->flags),
+ profile_buf,
pretty_size_mode(sp->total_bytes, unit_mode),
pretty_size_mode(sp->used_bytes, unit_mode),
(ok ? ", zone_unusable=" : ""),
diff --git a/common/utils.c b/common/utils.c
index aee0eedc15fc..32ca6b2ef432 100644
--- a/common/utils.c
+++ b/common/utils.c
@@ -1038,6 +1038,16 @@ const char* btrfs_group_profile_str(u64 flag)
return btrfs_raid_array[index].raid_name;
}

+void btrfs_group_profile_upper_str(u64 flags, char *ret)
+{
+ int i;
+
+ strncpy(ret, btrfs_group_profile_str(flags), BTRFS_PROFILE_STR_LEN);
+
+ for (i = 0; i < BTRFS_PROFILE_STR_LEN && ret[i]; i++)
+ ret[i] = toupper(ret[i]);
+}
+
u64 div_factor(u64 num, int factor)
{
if (factor == 10)
diff --git a/common/utils.h b/common/utils.h
index 6f84e3cbc98f..0c1b6baa7ae3 100644
--- a/common/utils.h
+++ b/common/utils.h
@@ -75,6 +75,9 @@ int find_next_key(struct btrfs_path *path, struct btrfs_key *key);
const char* btrfs_group_type_str(u64 flag);
const char* btrfs_group_profile_str(u64 flag);

+#define BTRFS_PROFILE_STR_LEN (64)
+void btrfs_group_profile_upper_str(u64 flag, char *ret);
+
int count_digits(u64 num);
u64 div_factor(u64 num, int factor);

--
2.33.1