Skip to content

Commit

Permalink
btrfs: cleanup orphans while looking up default subvolume
Browse files Browse the repository at this point in the history
commit 727b978 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>
  • Loading branch information
Jeff Mahoney authored and Greg Kroah-Hartman committed Jun 22, 2015
1 parent 8d1529c commit 9272a6c
Showing 1 changed file with 9 additions and 0 deletions.
9 changes: 9 additions & 0 deletions fs/btrfs/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -779,6 +779,15 @@ static struct dentry *get_default_root(struct super_block *sb,
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;
Expand Down

0 comments on commit 9272a6c

Please sign in to comment.