mirror of
https://github.com/kdave/btrfs-progs
synced 2025-02-25 06:20:28 +00:00
btrfs-progs: Allow btrfs-debug-tree to print human readable qgroup status flag.
Now btrfs-debug-tree can print qgroup status flag as ON|INCONSISTENT instead of 0x5. BTW, this patch helped us to find a bug that INCONSISTENT flag is never cleared in kernel. Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> [renamed to qgroup_flags_to_str] Signed-off-by: David Sterba <dsterba@suse.cz>
This commit is contained in:
parent
9922c42701
commit
8f3330b23b
30
print-tree.c
30
print-tree.c
@ -203,6 +203,20 @@ static void bg_flags_to_str(u64 flags, char *ret)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Caller should ensure sizeof(*ret)>= 26 "OFF|SCANNING|INCONSISTENT" */
|
||||||
|
static void qgroup_flags_to_str(u64 flags, char *ret)
|
||||||
|
{
|
||||||
|
if (flags & BTRFS_QGROUP_STATUS_FLAG_ON)
|
||||||
|
strcpy(ret, "ON");
|
||||||
|
else
|
||||||
|
strcpy(ret, "OFF");
|
||||||
|
|
||||||
|
if (flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN)
|
||||||
|
strcat(ret, "|SCANNING");
|
||||||
|
if (flags & BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT)
|
||||||
|
strcat(ret, "|INCONSISTENT");
|
||||||
|
}
|
||||||
|
|
||||||
void print_chunk(struct extent_buffer *eb, struct btrfs_chunk *chunk)
|
void print_chunk(struct extent_buffer *eb, struct btrfs_chunk *chunk)
|
||||||
{
|
{
|
||||||
int num_stripes = btrfs_chunk_num_stripes(eb, chunk);
|
int num_stripes = btrfs_chunk_num_stripes(eb, chunk);
|
||||||
@ -801,7 +815,7 @@ void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *l)
|
|||||||
u32 nr = btrfs_header_nritems(l);
|
u32 nr = btrfs_header_nritems(l);
|
||||||
u64 objectid;
|
u64 objectid;
|
||||||
u32 type;
|
u32 type;
|
||||||
char bg_flags_str[32];
|
char flags_str[32];
|
||||||
|
|
||||||
printf("leaf %llu items %d free space %d generation %llu owner %llu\n",
|
printf("leaf %llu items %d free space %d generation %llu owner %llu\n",
|
||||||
(unsigned long long)btrfs_header_bytenr(l), nr,
|
(unsigned long long)btrfs_header_bytenr(l), nr,
|
||||||
@ -920,13 +934,13 @@ void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *l)
|
|||||||
struct btrfs_block_group_item);
|
struct btrfs_block_group_item);
|
||||||
read_extent_buffer(l, &bg_item, (unsigned long)bi,
|
read_extent_buffer(l, &bg_item, (unsigned long)bi,
|
||||||
sizeof(bg_item));
|
sizeof(bg_item));
|
||||||
memset(bg_flags_str, 0, sizeof(bg_flags_str));
|
memset(flags_str, 0, sizeof(flags_str));
|
||||||
bg_flags_to_str(btrfs_block_group_flags(&bg_item),
|
bg_flags_to_str(btrfs_block_group_flags(&bg_item),
|
||||||
bg_flags_str);
|
flags_str);
|
||||||
printf("\t\tblock group used %llu chunk_objectid %llu flags %s\n",
|
printf("\t\tblock group used %llu chunk_objectid %llu flags %s\n",
|
||||||
(unsigned long long)btrfs_block_group_used(&bg_item),
|
(unsigned long long)btrfs_block_group_used(&bg_item),
|
||||||
(unsigned long long)btrfs_block_group_chunk_objectid(&bg_item),
|
(unsigned long long)btrfs_block_group_chunk_objectid(&bg_item),
|
||||||
bg_flags_str);
|
flags_str);
|
||||||
break;
|
break;
|
||||||
case BTRFS_CHUNK_ITEM_KEY:
|
case BTRFS_CHUNK_ITEM_KEY:
|
||||||
print_chunk(l, btrfs_item_ptr(l, i, struct btrfs_chunk));
|
print_chunk(l, btrfs_item_ptr(l, i, struct btrfs_chunk));
|
||||||
@ -953,14 +967,16 @@ void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *l)
|
|||||||
case BTRFS_QGROUP_STATUS_KEY:
|
case BTRFS_QGROUP_STATUS_KEY:
|
||||||
qg_status = btrfs_item_ptr(l, i,
|
qg_status = btrfs_item_ptr(l, i,
|
||||||
struct btrfs_qgroup_status_item);
|
struct btrfs_qgroup_status_item);
|
||||||
printf("\t\tversion %llu generation %llu flags %#llx "
|
memset(flags_str, 0, sizeof(flags_str));
|
||||||
|
qgroup_flags_to_str(btrfs_qgroup_status_flags(l, qg_status),
|
||||||
|
flags_str);
|
||||||
|
printf("\t\tversion %llu generation %llu flags %s "
|
||||||
"scan %lld\n",
|
"scan %lld\n",
|
||||||
(unsigned long long)
|
(unsigned long long)
|
||||||
btrfs_qgroup_status_version(l, qg_status),
|
btrfs_qgroup_status_version(l, qg_status),
|
||||||
(unsigned long long)
|
(unsigned long long)
|
||||||
btrfs_qgroup_status_generation(l, qg_status),
|
btrfs_qgroup_status_generation(l, qg_status),
|
||||||
(unsigned long long)
|
flags_str,
|
||||||
btrfs_qgroup_status_flags(l, qg_status),
|
|
||||||
(unsigned long long)
|
(unsigned long long)
|
||||||
btrfs_qgroup_status_scan(l, qg_status));
|
btrfs_qgroup_status_scan(l, qg_status));
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user