diff options
| author | Yan, Zheng <zheng.yan@oracle.com> | 2009-09-21 16:00:26 -0400 |
|---|---|---|
| committer | Chris Mason <chris.mason@oracle.com> | 2009-09-21 16:00:26 -0400 |
| commit | 76dda93c6ae2c1dc3e6cde34569d6aca26b0c918 (patch) | |
| tree | f5ca46ec89d4ae2c762952d5f35e2c6f95ac046a /fs/btrfs/extent-tree.c | |
| parent | 4df27c4d5cc1dda54ed7d0a8389347f2df359cf9 (diff) | |
Btrfs: add snapshot/subvolume destroy ioctl
This patch adds snapshot/subvolume destroy ioctl. A subvolume that isn't being
used and doesn't contains links to other subvolumes can be destroyed.
Signed-off-by: Yan Zheng <zheng.yan@oracle.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/extent-tree.c')
| -rw-r--r-- | fs/btrfs/extent-tree.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 8fc922982183..4bd04f3fa8bb 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c | |||
| @@ -5463,9 +5463,24 @@ int btrfs_drop_snapshot(struct btrfs_root *root, int update_ref) | |||
| 5463 | ret = btrfs_del_root(trans, tree_root, &root->root_key); | 5463 | ret = btrfs_del_root(trans, tree_root, &root->root_key); |
| 5464 | BUG_ON(ret); | 5464 | BUG_ON(ret); |
| 5465 | 5465 | ||
| 5466 | free_extent_buffer(root->node); | 5466 | if (root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID) { |
| 5467 | free_extent_buffer(root->commit_root); | 5467 | ret = btrfs_find_last_root(tree_root, root->root_key.objectid, |
| 5468 | kfree(root); | 5468 | NULL, NULL); |
| 5469 | BUG_ON(ret < 0); | ||
| 5470 | if (ret > 0) { | ||
| 5471 | ret = btrfs_del_orphan_item(trans, tree_root, | ||
| 5472 | root->root_key.objectid); | ||
| 5473 | BUG_ON(ret); | ||
| 5474 | } | ||
| 5475 | } | ||
| 5476 | |||
| 5477 | if (root->in_radix) { | ||
| 5478 | btrfs_free_fs_root(tree_root->fs_info, root); | ||
| 5479 | } else { | ||
| 5480 | free_extent_buffer(root->node); | ||
| 5481 | free_extent_buffer(root->commit_root); | ||
| 5482 | kfree(root); | ||
| 5483 | } | ||
| 5469 | out: | 5484 | out: |
| 5470 | btrfs_end_transaction(trans, tree_root); | 5485 | btrfs_end_transaction(trans, tree_root); |
| 5471 | kfree(wc); | 5486 | kfree(wc); |
