btrfs: move ino_cache_inode dropping out of btrfs_free_fs_root
We are going to make root life be controlled soley by refcounting, and inodes will be one of the things that hold a ref on the root. This means we need to handle dropping the ino_cache_inode outside of the root freeing logic, so move it into btrfs_drop_and_free_fs_root() so it is cleaned up properly on unmount. Signed-off-by: Josef Bacik <josef@toxicpanda.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
3fd6372758
commit
0e996e7fcf
|
@ -3912,12 +3912,15 @@ void btrfs_drop_and_free_fs_root(struct btrfs_fs_info *fs_info,
|
|||
__btrfs_remove_free_space_cache(root->free_ino_pinned);
|
||||
if (root->free_ino_ctl)
|
||||
__btrfs_remove_free_space_cache(root->free_ino_ctl);
|
||||
if (root->ino_cache_inode) {
|
||||
iput(root->ino_cache_inode);
|
||||
root->ino_cache_inode = NULL;
|
||||
}
|
||||
btrfs_free_fs_root(root);
|
||||
}
|
||||
|
||||
void btrfs_free_fs_root(struct btrfs_root *root)
|
||||
{
|
||||
iput(root->ino_cache_inode);
|
||||
WARN_ON(!RB_EMPTY_ROOT(&root->inode_tree));
|
||||
if (root->anon_dev)
|
||||
free_anon_bdev(root->anon_dev);
|
||||
|
|
|
@ -2424,6 +2424,10 @@ int btrfs_clean_one_deleted_snapshot(struct btrfs_root *root)
|
|||
btrfs_debug(fs_info, "cleaner removing %llu", root->root_key.objectid);
|
||||
|
||||
btrfs_kill_all_delayed_nodes(root);
|
||||
if (root->ino_cache_inode) {
|
||||
iput(root->ino_cache_inode);
|
||||
root->ino_cache_inode = NULL;
|
||||
}
|
||||
|
||||
if (btrfs_header_backref_rev(root->node) <
|
||||
BTRFS_MIXED_BACKREF_REV)
|
||||
|
|
Loading…
Reference in New Issue