mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
btrfs: cleanup orphans while looking up default subvolume
commit 727b9784b6 upstream.
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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
8d1529ce12
commit
9272a6ce68
@@ -779,6 +779,15 @@ find_root:
|
||||
if (btrfs_root_refs(&new_root->root_item) == 0)
|
||||
return ERR_PTR(-ENOENT);
|
||||
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user