Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit efefb143 authored by Yan, Zheng's avatar Yan, Zheng Committed by Chris Mason
Browse files

Btrfs: remove negative dentry when deleting subvolumne



The use of btrfs_dentry_delete is removing dentries from the
dcache when deleting subvolumne. btrfs_dentry_delete ignores
negative dentries. This is incorrect since if we don't remove
the negative dentry, its parent dentry can't be removed.

Signed-off-by: default avatarYan Zheng <zheng.yan@oracle.com>
Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
parent ff782e0a
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -3629,12 +3629,14 @@ static int btrfs_dentry_delete(struct dentry *dentry)
{
	struct btrfs_root *root;

	if (!dentry->d_inode)
		return 0;
	if (!dentry->d_inode && !IS_ROOT(dentry))
		dentry = dentry->d_parent;

	if (dentry->d_inode) {
		root = BTRFS_I(dentry->d_inode)->root;
		if (btrfs_root_refs(&root->root_item) == 0)
			return 1;
	}
	return 0;
}

+1 −0
Original line number Diff line number Diff line
@@ -830,6 +830,7 @@ static noinline int btrfs_ioctl_snap_destroy(struct file *file,
out_unlock:
	mutex_unlock(&inode->i_mutex);
	if (!err) {
		shrink_dcache_sb(root->fs_info->sb);
		btrfs_invalidate_inodes(dest);
		d_delete(dentry);
	}