1 /* 2 * Copyright (C) 2008 Red Hat. All rights reserved. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public 6 * License v2 as published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 * General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public 14 * License along with this program; if not, write to the 15 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 16 * Boston, MA 021110-1307, USA. 17 */ 18 19 #include "ctree.h" 20 #include "disk-io.h" 21 22 int btrfs_insert_orphan_item(struct btrfs_trans_handle *trans, 23 struct btrfs_root *root, u64 offset) 24 { 25 struct btrfs_path *path; 26 struct btrfs_key key; 27 int ret = 0; 28 29 key.objectid = BTRFS_ORPHAN_OBJECTID; 30 btrfs_set_key_type(&key, BTRFS_ORPHAN_ITEM_KEY); 31 key.offset = offset; 32 33 path = btrfs_alloc_path(); 34 if (!path) 35 return -ENOMEM; 36 37 ret = btrfs_insert_empty_item(trans, root, path, &key, 0); 38 39 btrfs_free_path(path); 40 return ret; 41 } 42 43 int btrfs_del_orphan_item(struct btrfs_trans_handle *trans, 44 struct btrfs_root *root, u64 offset) 45 { 46 struct btrfs_path *path; 47 struct btrfs_key key; 48 int ret = 0; 49 50 key.objectid = BTRFS_ORPHAN_OBJECTID; 51 btrfs_set_key_type(&key, BTRFS_ORPHAN_ITEM_KEY); 52 key.offset = offset; 53 54 path = btrfs_alloc_path(); 55 if (!path) 56 return -ENOMEM; 57 58 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); 59 if (ret) 60 goto out; 61 62 ret = btrfs_del_item(trans, root, path); 63 64 out: 65 btrfs_free_path(path); 66 return ret; 67 } 68 69 int btrfs_find_orphan_item(struct btrfs_root *root, u64 offset) 70 { 71 struct btrfs_path *path; 72 struct btrfs_key key; 73 int ret; 74 75 key.objectid = BTRFS_ORPHAN_OBJECTID; 76 key.type = BTRFS_ORPHAN_ITEM_KEY; 77 key.offset = offset; 78 79 path = btrfs_alloc_path(); 80 if (!path) 81 return -ENOMEM; 82 83 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); 84 85 btrfs_free_path(path); 86 return ret; 87 } 88