Skip to content

Commit

Permalink
btrfs-progs: print-tree: handle all supported flags
Browse files Browse the repository at this point in the history
Although we already have a pretty good array defined for all
super/compat_ro/incompat flags, we still rely on hand defined mask to do
the print.

This can lead to easy de-sync between the definition and the flags.

Change it to automatically iterate through the array to calculate the
flags, and add the remaining super flags.

Signed-off-by: Qu Wenruo <wqu@suse.com>
  • Loading branch information
adam900710 committed Jun 8, 2024
1 parent bd2df0d commit 9a1201c
Showing 1 changed file with 19 additions and 16 deletions.
35 changes: 19 additions & 16 deletions kernel-shared/print-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -1950,18 +1950,13 @@ static struct readable_flag_entry super_flags_array[] = {
DEF_SUPER_FLAG_ENTRY(CHANGING_FSID_V2),
DEF_SUPER_FLAG_ENTRY(SEEDING),
DEF_SUPER_FLAG_ENTRY(METADUMP),
DEF_SUPER_FLAG_ENTRY(METADUMP_V2)
DEF_SUPER_FLAG_ENTRY(METADUMP_V2),
DEF_SUPER_FLAG_ENTRY(CHANGING_BG_TREE),
DEF_SUPER_FLAG_ENTRY(CHANGING_DATA_CSUM),
DEF_SUPER_FLAG_ENTRY(CHANGING_META_CSUM),
};
static const int super_flags_num = ARRAY_SIZE(super_flags_array);

#define BTRFS_SUPER_FLAG_SUPP (BTRFS_HEADER_FLAG_WRITTEN |\
BTRFS_HEADER_FLAG_RELOC |\
BTRFS_SUPER_FLAG_CHANGING_FSID |\
BTRFS_SUPER_FLAG_CHANGING_FSID_V2 |\
BTRFS_SUPER_FLAG_SEEDING |\
BTRFS_SUPER_FLAG_METADUMP |\
BTRFS_SUPER_FLAG_METADUMP_V2)

static void __print_readable_flag(u64 flag, struct readable_flag_entry *array,
int array_size, u64 supported_flags)
{
Expand Down Expand Up @@ -1995,26 +1990,34 @@ static void __print_readable_flag(u64 flag, struct readable_flag_entry *array,

static void print_readable_compat_ro_flag(u64 flag)
{
/*
* We know about the FREE_SPACE_TREE{,_VALID} bits, but we don't
* actually support them yet.
*/
u64 print_flags = 0;

for (int i = 0; i < compat_ro_flags_num; i++)
print_flags |= compat_ro_flags_array[i].bit;
return __print_readable_flag(flag, compat_ro_flags_array,
compat_ro_flags_num,
BTRFS_FEATURE_COMPAT_RO_SUPP);
print_flags);
}

static void print_readable_incompat_flag(u64 flag)
{
u64 print_flags = 0;

for (int i = 0; i < incompat_flags_num; i++)
print_flags |= incompat_flags_array[i].bit;
return __print_readable_flag(flag, incompat_flags_array,
incompat_flags_num,
BTRFS_FEATURE_INCOMPAT_SUPP);
print_flags);
}

static void print_readable_super_flag(u64 flag)
{
int print_flags = 0;

for (int i = 0; i < super_flags_num; i++)
print_flags |= super_flags_array[i].bit;
return __print_readable_flag(flag, super_flags_array,
super_flags_num, BTRFS_SUPER_FLAG_SUPP);
super_flags_num, print_flags);
}

static void print_sys_chunk_array(struct btrfs_super_block *sb)
Expand Down

0 comments on commit 9a1201c

Please sign in to comment.