Merge tag 'i3c/for-6.6' of git://git.kernel.org/pub/scm/linux/kernel/git/i3c/linux
[platform/kernel/linux-rpi.git] / fs / btrfs / orphan.c
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 "disk-io.h"
8 #include "orphan.h"
9
10 int btrfs_insert_orphan_item(struct btrfs_trans_handle *trans,
11                              struct btrfs_root *root, u64 offset)
12 {
13         struct btrfs_path *path;
14         struct btrfs_key key;
15         int ret = 0;
16
17         key.objectid = BTRFS_ORPHAN_OBJECTID;
18         key.type = BTRFS_ORPHAN_ITEM_KEY;
19         key.offset = offset;
20
21         path = btrfs_alloc_path();
22         if (!path)
23                 return -ENOMEM;
24
25         ret = btrfs_insert_empty_item(trans, root, path, &key, 0);
26
27         btrfs_free_path(path);
28         return ret;
29 }
30
31 int btrfs_del_orphan_item(struct btrfs_trans_handle *trans,
32                           struct btrfs_root *root, u64 offset)
33 {
34         struct btrfs_path *path;
35         struct btrfs_key key;
36         int ret = 0;
37
38         key.objectid = BTRFS_ORPHAN_OBJECTID;
39         key.type = BTRFS_ORPHAN_ITEM_KEY;
40         key.offset = offset;
41
42         path = btrfs_alloc_path();
43         if (!path)
44                 return -ENOMEM;
45
46         ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
47         if (ret < 0)
48                 goto out;
49         if (ret) { /* JDM: Really? */
50                 ret = -ENOENT;
51                 goto out;
52         }
53
54         ret = btrfs_del_item(trans, root, path);
55
56 out:
57         btrfs_free_path(path);
58         return ret;
59 }