btrfs-progs: Allow btrfs_leaf_free_space to accept NULL root

Btrfs_leaf_free_space() function is used to determine the leaf/node
size.
It's OK to use root->nodesize to determine nodesize, but in fact,
extent_buffer->len can also be used to determine the nodesize if caller
can ensure it's a tree block.

So this patch will add support for NULL root for btrfs_leaf_free_space()
function, to allow btrfs_print_leaf() functions to be called in gdb or
to debug temporary btrfs in make_btrfs() without a valid root.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Qu Wenruo 2015-11-05 16:32:59 +08:00 committed by David Sterba
parent fa2dcf1406
commit e8a5f57b69

View File

@ -1619,13 +1619,14 @@ static int leaf_space_used(struct extent_buffer *l, int start, int nr)
*/
int btrfs_leaf_free_space(struct btrfs_root *root, struct extent_buffer *leaf)
{
u32 nodesize = (root ? BTRFS_LEAF_DATA_SIZE(root) : leaf->len);
int nritems = btrfs_header_nritems(leaf);
int ret;
ret = BTRFS_LEAF_DATA_SIZE(root) - leaf_space_used(leaf, 0, nritems);
ret = nodesize - leaf_space_used(leaf, 0, nritems);
if (ret < 0) {
printk("leaf free space ret %d, leaf data size %lu, used %d nritems %d\n",
ret, (unsigned long) BTRFS_LEAF_DATA_SIZE(root),
leaf_space_used(leaf, 0, nritems), nritems);
printk("leaf free space ret %d, leaf data size %u, used %d nritems %d\n",
ret, nodesize, leaf_space_used(leaf, 0, nritems),
nritems);
}
return ret;
}