1 | // SPDX-License-Identifier: GPL-2.0 |
2 | /* |
3 | * Copyright (C) 2008 Red Hat. All rights reserved. |
4 | */ |
5 | |
6 | #include "ctree.h" |
7 | #include "orphan.h" |
8 | |
9 | int btrfs_insert_orphan_item(struct btrfs_trans_handle *trans, |
10 | struct btrfs_root *root, u64 offset) |
11 | { |
12 | struct btrfs_path *path; |
13 | struct btrfs_key key; |
14 | int ret = 0; |
15 | |
16 | key.objectid = BTRFS_ORPHAN_OBJECTID; |
17 | key.type = BTRFS_ORPHAN_ITEM_KEY; |
18 | key.offset = offset; |
19 | |
20 | path = btrfs_alloc_path(); |
21 | if (!path) |
22 | return -ENOMEM; |
23 | |
24 | ret = btrfs_insert_empty_item(trans, root, path, key: &key, data_size: 0); |
25 | |
26 | btrfs_free_path(p: path); |
27 | return ret; |
28 | } |
29 | |
30 | int btrfs_del_orphan_item(struct btrfs_trans_handle *trans, |
31 | struct btrfs_root *root, u64 offset) |
32 | { |
33 | struct btrfs_path *path; |
34 | struct btrfs_key key; |
35 | int ret = 0; |
36 | |
37 | key.objectid = BTRFS_ORPHAN_OBJECTID; |
38 | key.type = BTRFS_ORPHAN_ITEM_KEY; |
39 | key.offset = offset; |
40 | |
41 | path = btrfs_alloc_path(); |
42 | if (!path) |
43 | return -ENOMEM; |
44 | |
45 | ret = btrfs_search_slot(trans, root, key: &key, p: path, ins_len: -1, cow: 1); |
46 | if (ret < 0) |
47 | goto out; |
48 | if (ret) { /* JDM: Really? */ |
49 | ret = -ENOENT; |
50 | goto out; |
51 | } |
52 | |
53 | ret = btrfs_del_item(trans, root, path); |
54 | |
55 | out: |
56 | btrfs_free_path(p: path); |
57 | return ret; |
58 | } |
59 | |