blob: aa534108c1e2ff713b1e16f9fac684c0ae16500b [file] [log] [blame]
David Sterbac1d7c512018-04-03 19:23:33 +02001// SPDX-License-Identifier: GPL-2.0
Josef Bacik7b128762008-07-24 12:17:14 -04002/*
3 * Copyright (C) 2008 Red Hat. All rights reserved.
Josef Bacik7b128762008-07-24 12:17:14 -04004 */
5
6#include "ctree.h"
7#include "disk-io.h"
8
9int 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;
David Sterba962a2982014-06-04 18:41:45 +020017 key.type = BTRFS_ORPHAN_ITEM_KEY;
Josef Bacik7b128762008-07-24 12:17:14 -040018 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, 0);
25
26 btrfs_free_path(path);
27 return ret;
28}
29
30int 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;
David Sterba962a2982014-06-04 18:41:45 +020038 key.type = BTRFS_ORPHAN_ITEM_KEY;
Josef Bacik7b128762008-07-24 12:17:14 -040039 key.offset = offset;
40
41 path = btrfs_alloc_path();
42 if (!path)
43 return -ENOMEM;
44
45 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
Josef Bacik7e1fea72010-12-08 12:22:34 -050046 if (ret < 0)
Josef Bacik7b128762008-07-24 12:17:14 -040047 goto out;
Jeff Mahoney79787ea2012-03-12 16:03:00 +010048 if (ret) { /* JDM: Really? */
Josef Bacik7e1fea72010-12-08 12:22:34 -050049 ret = -ENOENT;
50 goto out;
51 }
Josef Bacik7b128762008-07-24 12:17:14 -040052
53 ret = btrfs_del_item(trans, root, path);
54
55out:
56 btrfs_free_path(path);
57 return ret;
58}