BTRFS_PATH_AUTO_FREE(path);
struct btrfs_key key;
struct btrfs_root *root;
- int err = 0;
- int ret;
path = btrfs_alloc_path();
if (!path)
while (1) {
u64 root_objectid;
+ int ret;
ret = btrfs_search_slot(NULL, tree_root, &key, path, 0, 0);
- if (ret < 0) {
- err = ret;
- break;
- }
+ if (ret < 0)
+ return ret;
leaf = path->nodes[0];
if (path->slots[0] >= btrfs_header_nritems(leaf)) {
ret = btrfs_next_leaf(tree_root, path);
if (ret < 0)
- err = ret;
- if (ret != 0)
- break;
+ return ret;
+ else if (ret > 0)
+ return 0;
leaf = path->nodes[0];
}
if (key.objectid != BTRFS_ORPHAN_OBJECTID ||
key.type != BTRFS_ORPHAN_ITEM_KEY)
- break;
+ return 0;
root_objectid = key.offset;
key.offset++;
root = btrfs_get_fs_root(fs_info, root_objectid, false);
- err = PTR_ERR_OR_ZERO(root);
- if (err && err != -ENOENT) {
+ ret = PTR_ERR_OR_ZERO(root);
+ if (ret && ret != -ENOENT) {
break;
- } else if (err == -ENOENT) {
+ } else if (ret == -ENOENT) {
struct btrfs_trans_handle *trans;
btrfs_release_path(path);
trans = btrfs_join_transaction(tree_root);
if (IS_ERR(trans)) {
- err = PTR_ERR(trans);
- btrfs_handle_fs_error(fs_info, err,
+ ret = PTR_ERR(trans);
+ btrfs_handle_fs_error(fs_info, ret,
"Failed to start trans to delete orphan item");
- break;
+ return ret;
}
- err = btrfs_del_orphan_item(trans, tree_root,
- root_objectid);
+ ret = btrfs_del_orphan_item(trans, tree_root, root_objectid);
btrfs_end_transaction(trans);
- if (err) {
- btrfs_handle_fs_error(fs_info, err,
+ if (ret) {
+ btrfs_handle_fs_error(fs_info, ret,
"Failed to delete root orphan item");
- break;
+ return ret;
}
continue;
}
btrfs_put_root(root);
}
- return err;
+ return 0;
}
/* drop the root item for 'key' from the tree root */