18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2008 Red Hat. All rights reserved. 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#include "ctree.h" 78c2ecf20Sopenharmony_ci#include "disk-io.h" 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ciint btrfs_insert_orphan_item(struct btrfs_trans_handle *trans, 108c2ecf20Sopenharmony_ci struct btrfs_root *root, u64 offset) 118c2ecf20Sopenharmony_ci{ 128c2ecf20Sopenharmony_ci struct btrfs_path *path; 138c2ecf20Sopenharmony_ci struct btrfs_key key; 148c2ecf20Sopenharmony_ci int ret = 0; 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci key.objectid = BTRFS_ORPHAN_OBJECTID; 178c2ecf20Sopenharmony_ci key.type = BTRFS_ORPHAN_ITEM_KEY; 188c2ecf20Sopenharmony_ci key.offset = offset; 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci path = btrfs_alloc_path(); 218c2ecf20Sopenharmony_ci if (!path) 228c2ecf20Sopenharmony_ci return -ENOMEM; 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci ret = btrfs_insert_empty_item(trans, root, path, &key, 0); 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci btrfs_free_path(path); 278c2ecf20Sopenharmony_ci return ret; 288c2ecf20Sopenharmony_ci} 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_ciint btrfs_del_orphan_item(struct btrfs_trans_handle *trans, 318c2ecf20Sopenharmony_ci struct btrfs_root *root, u64 offset) 328c2ecf20Sopenharmony_ci{ 338c2ecf20Sopenharmony_ci struct btrfs_path *path; 348c2ecf20Sopenharmony_ci struct btrfs_key key; 358c2ecf20Sopenharmony_ci int ret = 0; 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci key.objectid = BTRFS_ORPHAN_OBJECTID; 388c2ecf20Sopenharmony_ci key.type = BTRFS_ORPHAN_ITEM_KEY; 398c2ecf20Sopenharmony_ci key.offset = offset; 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci path = btrfs_alloc_path(); 428c2ecf20Sopenharmony_ci if (!path) 438c2ecf20Sopenharmony_ci return -ENOMEM; 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci ret = btrfs_search_slot(trans, root, &key, path, -1, 1); 468c2ecf20Sopenharmony_ci if (ret < 0) 478c2ecf20Sopenharmony_ci goto out; 488c2ecf20Sopenharmony_ci if (ret) { /* JDM: Really? */ 498c2ecf20Sopenharmony_ci ret = -ENOENT; 508c2ecf20Sopenharmony_ci goto out; 518c2ecf20Sopenharmony_ci } 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci ret = btrfs_del_item(trans, root, path); 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_ciout: 568c2ecf20Sopenharmony_ci btrfs_free_path(path); 578c2ecf20Sopenharmony_ci return ret; 588c2ecf20Sopenharmony_ci} 59