From c501c184fa7153a326ce2353c1dd0714ba8fb7a6 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Fri, 9 Oct 2009 09:25:16 -0400 Subject: [PATCH] --- yaml --- r: 167259 b: refs/heads/master c: efefb1438be269897585934fc6c05deb4dfa01ce h: refs/heads/master i: 167257: 3923b218403d277563b21eb4cc4699972623de5d 167255: 642108900d73b5c2b3fb48b751e1ced151e0a47a v: v3 --- [refs] | 2 +- trunk/fs/btrfs/inode.c | 12 +++++++----- trunk/fs/btrfs/ioctl.c | 1 + 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 411ecc311e34..a1ca39be89ff 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ff782e0a131c7f669445c07fe5c7ba91e043b7ed +refs/heads/master: efefb1438be269897585934fc6c05deb4dfa01ce diff --git a/trunk/fs/btrfs/inode.c b/trunk/fs/btrfs/inode.c index ccc4f1121210..d3585cb6483c 100644 --- a/trunk/fs/btrfs/inode.c +++ b/trunk/fs/btrfs/inode.c @@ -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; - root = BTRFS_I(dentry->d_inode)->root; - if (btrfs_root_refs(&root->root_item) == 0) - return 1; + if (dentry->d_inode) { + root = BTRFS_I(dentry->d_inode)->root; + if (btrfs_root_refs(&root->root_item) == 0) + return 1; + } return 0; } diff --git a/trunk/fs/btrfs/ioctl.c b/trunk/fs/btrfs/ioctl.c index 9a780c8d0ac8..e8795becad4c 100644 --- a/trunk/fs/btrfs/ioctl.c +++ b/trunk/fs/btrfs/ioctl.c @@ -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); }