diff options
Diffstat (limited to 'fs/btrfs/orphan.c')
| -rw-r--r-- | fs/btrfs/orphan.c | 67 | 
1 files changed, 67 insertions, 0 deletions
diff --git a/fs/btrfs/orphan.c b/fs/btrfs/orphan.c new file mode 100644 index 000000000000..3c0d52af4f80 --- /dev/null +++ b/fs/btrfs/orphan.c @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2008 Red Hat.  All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License v2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 021110-1307, USA. + */ + +#include "ctree.h" +#include "disk-io.h" + +int btrfs_insert_orphan_item(struct btrfs_trans_handle *trans, +			     struct btrfs_root *root, u64 offset) +{ +	struct btrfs_path *path; +	struct btrfs_key key; +	int ret = 0; + +	key.objectid = BTRFS_ORPHAN_OBJECTID; +	btrfs_set_key_type(&key, BTRFS_ORPHAN_ITEM_KEY); +	key.offset = offset; + +	path = btrfs_alloc_path(); +	if (!path) +		return -ENOMEM; + +	ret = btrfs_insert_empty_item(trans, root, path, &key, 0); + +	btrfs_free_path(path); +	return ret; +} + +int btrfs_del_orphan_item(struct btrfs_trans_handle *trans, +			  struct btrfs_root *root, u64 offset) +{ +	struct btrfs_path *path; +	struct btrfs_key key; +	int ret = 0; + +	key.objectid = BTRFS_ORPHAN_OBJECTID; +	btrfs_set_key_type(&key, BTRFS_ORPHAN_ITEM_KEY); +	key.offset = offset; + +	path = btrfs_alloc_path(); +	if (!path) +		return -ENOMEM; + +	ret = btrfs_search_slot(trans, root, &key, path, -1, 1); +	if (ret) +		goto out; + +	ret = btrfs_del_item(trans, root, path); + +out: +	btrfs_free_path(path); +	return ret; +}  | 
