162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2008 Red Hat. All rights reserved. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include "ctree.h" 762306a36Sopenharmony_ci#include "disk-io.h" 862306a36Sopenharmony_ci#include "orphan.h" 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ciint btrfs_insert_orphan_item(struct btrfs_trans_handle *trans, 1162306a36Sopenharmony_ci struct btrfs_root *root, u64 offset) 1262306a36Sopenharmony_ci{ 1362306a36Sopenharmony_ci struct btrfs_path *path; 1462306a36Sopenharmony_ci struct btrfs_key key; 1562306a36Sopenharmony_ci int ret = 0; 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci key.objectid = BTRFS_ORPHAN_OBJECTID; 1862306a36Sopenharmony_ci key.type = BTRFS_ORPHAN_ITEM_KEY; 1962306a36Sopenharmony_ci key.offset = offset; 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci path = btrfs_alloc_path(); 2262306a36Sopenharmony_ci if (!path) 2362306a36Sopenharmony_ci return -ENOMEM; 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci ret = btrfs_insert_empty_item(trans, root, path, &key, 0); 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci btrfs_free_path(path); 2862306a36Sopenharmony_ci return ret; 2962306a36Sopenharmony_ci} 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ciint btrfs_del_orphan_item(struct btrfs_trans_handle *trans, 3262306a36Sopenharmony_ci struct btrfs_root *root, u64 offset) 3362306a36Sopenharmony_ci{ 3462306a36Sopenharmony_ci struct btrfs_path *path; 3562306a36Sopenharmony_ci struct btrfs_key key; 3662306a36Sopenharmony_ci int ret = 0; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci key.objectid = BTRFS_ORPHAN_OBJECTID; 3962306a36Sopenharmony_ci key.type = BTRFS_ORPHAN_ITEM_KEY; 4062306a36Sopenharmony_ci key.offset = offset; 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci path = btrfs_alloc_path(); 4362306a36Sopenharmony_ci if (!path) 4462306a36Sopenharmony_ci return -ENOMEM; 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci ret = btrfs_search_slot(trans, root, &key, path, -1, 1); 4762306a36Sopenharmony_ci if (ret < 0) 4862306a36Sopenharmony_ci goto out; 4962306a36Sopenharmony_ci if (ret) { /* JDM: Really? */ 5062306a36Sopenharmony_ci ret = -ENOENT; 5162306a36Sopenharmony_ci goto out; 5262306a36Sopenharmony_ci } 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci ret = btrfs_del_item(trans, root, path); 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ciout: 5762306a36Sopenharmony_ci btrfs_free_path(path); 5862306a36Sopenharmony_ci return ret; 5962306a36Sopenharmony_ci} 60