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

Su Yue
2021-11-02T11:56:46Z

On Tue 02 Nov 2021 at 18:47, Qu Wenruo <wqu@suse.com> wrote:

> [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)
>
May it be 8?
struct btrfs_raid_attr {
...
const char raid_name[8];
...
};

--
Su
> +void btrfs_group_profile_upper_str(u64 flag, char *ret);
> +
> int count_digits(u64 num);
> u64 div_factor(u64 num, int factor);