From: Erez Zadok Date: Sat, 30 Apr 2011 05:33:59 +0000 (-0400) Subject: Unionfs: cleanup state in ->permission before returning ECHILD X-Git-Url: https://git.fsl.cs.sunysb.edu/?a=commitdiff_plain;h=9e41830081088785b219e99d56f83ebac9b8e266;p=unionfs-2.6.39.y.git Unionfs: cleanup state in ->permission before returning ECHILD Fixes bugs that cased leftover dentries upon unmount, causing oopses. Signed-off-by: Erez Zadok --- diff --git a/fs/unionfs/inode.c b/fs/unionfs/inode.c index 24243adbe61..3d34394306c 100644 --- a/fs/unionfs/inode.c +++ b/fs/unionfs/inode.c @@ -794,8 +794,10 @@ static int unionfs_permission(struct inode *inode, int mask, unsigned int flags) struct inode *inode_grabbed = igrab(inode); struct dentry *dentry = d_find_alias(inode); - if (flags & IPERM_FLAG_RCU) - return -ECHILD; + if (flags & IPERM_FLAG_RCU) { + err = -ECHILD; + goto out_nograb; + } if (dentry) unionfs_lock_dentry(dentry, UNIONFS_DMUTEX_CHILD); @@ -892,6 +894,7 @@ out: dput(dentry); } iput(inode_grabbed); +out_nograb: return err; }