btrfs: print the actual offset in btrfs_root_name
We're supposed to print the root_key.offset in btrfs_root_name in the
case of a reloc root, not the objectid. Fix this helper to take the key
so we have access to the offset when we need it.
Fixes: 457f1864b5
("btrfs: pretty print leaked root name")
Reviewed-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
a8cc263eb5
commit
71008734d2
@ -1457,7 +1457,7 @@ void btrfs_check_leaked_roots(struct btrfs_fs_info *fs_info)
|
|||||||
root = list_first_entry(&fs_info->allocated_roots,
|
root = list_first_entry(&fs_info->allocated_roots,
|
||||||
struct btrfs_root, leak_list);
|
struct btrfs_root, leak_list);
|
||||||
btrfs_err(fs_info, "leaked root %s refcount %d",
|
btrfs_err(fs_info, "leaked root %s refcount %d",
|
||||||
btrfs_root_name(root->root_key.objectid, buf),
|
btrfs_root_name(&root->root_key, buf),
|
||||||
refcount_read(&root->refs));
|
refcount_read(&root->refs));
|
||||||
while (refcount_read(&root->refs) > 1)
|
while (refcount_read(&root->refs) > 1)
|
||||||
btrfs_put_root(root);
|
btrfs_put_root(root);
|
||||||
|
@ -26,22 +26,22 @@ static const struct root_name_map root_map[] = {
|
|||||||
{ BTRFS_DATA_RELOC_TREE_OBJECTID, "DATA_RELOC_TREE" },
|
{ BTRFS_DATA_RELOC_TREE_OBJECTID, "DATA_RELOC_TREE" },
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *btrfs_root_name(u64 objectid, char *buf)
|
const char *btrfs_root_name(const struct btrfs_key *key, char *buf)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (objectid == BTRFS_TREE_RELOC_OBJECTID) {
|
if (key->objectid == BTRFS_TREE_RELOC_OBJECTID) {
|
||||||
snprintf(buf, BTRFS_ROOT_NAME_BUF_LEN,
|
snprintf(buf, BTRFS_ROOT_NAME_BUF_LEN,
|
||||||
"TREE_RELOC offset=%llu", objectid);
|
"TREE_RELOC offset=%llu", key->offset);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(root_map); i++) {
|
for (i = 0; i < ARRAY_SIZE(root_map); i++) {
|
||||||
if (root_map[i].id == objectid)
|
if (root_map[i].id == key->objectid)
|
||||||
return root_map[i].name;
|
return root_map[i].name;
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(buf, BTRFS_ROOT_NAME_BUF_LEN, "%llu", objectid);
|
snprintf(buf, BTRFS_ROOT_NAME_BUF_LEN, "%llu", key->objectid);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,6 +11,6 @@
|
|||||||
|
|
||||||
void btrfs_print_leaf(struct extent_buffer *l);
|
void btrfs_print_leaf(struct extent_buffer *l);
|
||||||
void btrfs_print_tree(struct extent_buffer *c, bool follow);
|
void btrfs_print_tree(struct extent_buffer *c, bool follow);
|
||||||
const char *btrfs_root_name(u64 objectid, char *buf);
|
const char *btrfs_root_name(const struct btrfs_key *key, char *buf);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user