btrfs-progs: check: use on-stack path buffer in check_fs_root_v2

We don't need to conserve stack space too much unlike kernel, also
remove one error condition.

Signed-off-by: David Sterba <dsterba@suse.com>
master
David Sterba 2016-11-03 00:37:51 +01:00
parent f73c5e075e
commit e42f8c6a3c
1 changed files with 9 additions and 12 deletions

View File

@ -4972,7 +4972,7 @@ out:
*/ */
static int check_fs_root_v2(struct btrfs_root *root, unsigned int ext_ref) static int check_fs_root_v2(struct btrfs_root *root, unsigned int ext_ref)
{ {
struct btrfs_path *path; struct btrfs_path path;
struct node_refs nrefs; struct node_refs nrefs;
struct btrfs_root_item *root_item = &root->root_item; struct btrfs_root_item *root_item = &root->root_item;
int ret, wret; int ret, wret;
@ -4988,38 +4988,35 @@ static int check_fs_root_v2(struct btrfs_root *root, unsigned int ext_ref)
if (ret < 0) if (ret < 0)
return ret; return ret;
path = btrfs_alloc_path();
if (!path)
return -ENOMEM;
memset(&nrefs, 0, sizeof(nrefs)); memset(&nrefs, 0, sizeof(nrefs));
level = btrfs_header_level(root->node); level = btrfs_header_level(root->node);
btrfs_init_path(&path);
if (btrfs_root_refs(root_item) > 0 || if (btrfs_root_refs(root_item) > 0 ||
btrfs_disk_key_objectid(&root_item->drop_progress) == 0) { btrfs_disk_key_objectid(&root_item->drop_progress) == 0) {
path->nodes[level] = root->node; path.nodes[level] = root->node;
path->slots[level] = 0; path.slots[level] = 0;
extent_buffer_get(root->node); extent_buffer_get(root->node);
} else { } else {
struct btrfs_key key; struct btrfs_key key;
btrfs_disk_key_to_cpu(&key, &root_item->drop_progress); btrfs_disk_key_to_cpu(&key, &root_item->drop_progress);
level = root_item->drop_level; level = root_item->drop_level;
path->lowest_level = level; path.lowest_level = level;
ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); ret = btrfs_search_slot(NULL, root, &key, &path, 0, 0);
if (ret < 0) if (ret < 0)
goto out; goto out;
ret = 0; ret = 0;
} }
while (1) { while (1) {
wret = walk_down_tree_v2(root, path, &level, &nrefs, ext_ref); wret = walk_down_tree_v2(root, &path, &level, &nrefs, ext_ref);
if (wret < 0) if (wret < 0)
ret = wret; ret = wret;
if (wret != 0) if (wret != 0)
break; break;
wret = walk_up_tree_v2(root, path, &level); wret = walk_up_tree_v2(root, &path, &level);
if (wret < 0) if (wret < 0)
ret = wret; ret = wret;
if (wret != 0) if (wret != 0)
@ -5027,7 +5024,7 @@ static int check_fs_root_v2(struct btrfs_root *root, unsigned int ext_ref)
} }
out: out:
btrfs_free_path(path); btrfs_release_path(&path);
return ret; return ret;
} }