39 lines
1.3 KiB
Diff
39 lines
1.3 KiB
Diff
From: Jeff Mahoney <jeffm@suse.com>
|
|
Date: Fri, 20 Mar 2015 14:02:09 -0400
|
|
Subject: [PATCH] btrfs: cleanup orphans while looking up default subvolume
|
|
|
|
Orphans in the fs tree are cleaned up via open_ctree and subvolume
|
|
orphans are cleaned via btrfs_lookup_dentry -- except when a default
|
|
subvolume is in use. The name for the default subvolume uses a manual
|
|
lookup that doesn't trigger orphan cleanup and needs to trigger it
|
|
manually as well. This doesn't apply to the remount case since the
|
|
subvolumes are cleaned up by walking the root radix tree.
|
|
|
|
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
|
|
Reviewed-by: David Sterba <dsterba@suse.cz>
|
|
Signed-off-by: Chris Mason <clm@fb.com>
|
|
---
|
|
fs/btrfs/super.c | 9 +++++++++
|
|
1 file changed, 9 insertions(+)
|
|
|
|
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
|
|
index 05fef198ff94..e477ed67a49a 100644
|
|
--- a/fs/btrfs/super.c
|
|
+++ b/fs/btrfs/super.c
|
|
@@ -901,6 +901,15 @@ find_root:
|
|
if (IS_ERR(new_root))
|
|
return ERR_CAST(new_root);
|
|
|
|
+ if (!(sb->s_flags & MS_RDONLY)) {
|
|
+ int ret;
|
|
+ down_read(&fs_info->cleanup_work_sem);
|
|
+ ret = btrfs_orphan_cleanup(new_root);
|
|
+ up_read(&fs_info->cleanup_work_sem);
|
|
+ if (ret)
|
|
+ return ERR_PTR(ret);
|
|
+ }
|
|
+
|
|
dir_id = btrfs_root_dirid(&new_root->root_item);
|
|
setup_root:
|
|
location.objectid = dir_id;
|