162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (C) 2008 Red Hat.  All rights reserved.
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#include "ctree.h"
762306a36Sopenharmony_ci#include "disk-io.h"
862306a36Sopenharmony_ci#include "orphan.h"
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ciint btrfs_insert_orphan_item(struct btrfs_trans_handle *trans,
1162306a36Sopenharmony_ci			     struct btrfs_root *root, u64 offset)
1262306a36Sopenharmony_ci{
1362306a36Sopenharmony_ci	struct btrfs_path *path;
1462306a36Sopenharmony_ci	struct btrfs_key key;
1562306a36Sopenharmony_ci	int ret = 0;
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci	key.objectid = BTRFS_ORPHAN_OBJECTID;
1862306a36Sopenharmony_ci	key.type = BTRFS_ORPHAN_ITEM_KEY;
1962306a36Sopenharmony_ci	key.offset = offset;
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci	path = btrfs_alloc_path();
2262306a36Sopenharmony_ci	if (!path)
2362306a36Sopenharmony_ci		return -ENOMEM;
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci	ret = btrfs_insert_empty_item(trans, root, path, &key, 0);
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci	btrfs_free_path(path);
2862306a36Sopenharmony_ci	return ret;
2962306a36Sopenharmony_ci}
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ciint btrfs_del_orphan_item(struct btrfs_trans_handle *trans,
3262306a36Sopenharmony_ci			  struct btrfs_root *root, u64 offset)
3362306a36Sopenharmony_ci{
3462306a36Sopenharmony_ci	struct btrfs_path *path;
3562306a36Sopenharmony_ci	struct btrfs_key key;
3662306a36Sopenharmony_ci	int ret = 0;
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci	key.objectid = BTRFS_ORPHAN_OBJECTID;
3962306a36Sopenharmony_ci	key.type = BTRFS_ORPHAN_ITEM_KEY;
4062306a36Sopenharmony_ci	key.offset = offset;
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci	path = btrfs_alloc_path();
4362306a36Sopenharmony_ci	if (!path)
4462306a36Sopenharmony_ci		return -ENOMEM;
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci	ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
4762306a36Sopenharmony_ci	if (ret < 0)
4862306a36Sopenharmony_ci		goto out;
4962306a36Sopenharmony_ci	if (ret) { /* JDM: Really? */
5062306a36Sopenharmony_ci		ret = -ENOENT;
5162306a36Sopenharmony_ci		goto out;
5262306a36Sopenharmony_ci	}
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci	ret = btrfs_del_item(trans, root, path);
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ciout:
5762306a36Sopenharmony_ci	btrfs_free_path(path);
5862306a36Sopenharmony_ci	return ret;
5962306a36Sopenharmony_ci}
60