From 9e41830081088785b219e99d56f83ebac9b8e266 Mon Sep 17 00:00:00 2001 From: Erez Zadok Date: Sat, 30 Apr 2011 01:33:59 -0400 Subject: [PATCH] Unionfs: cleanup state in ->permission before returning ECHILD Fixes bugs that cased leftover dentries upon unmount, causing oopses. Signed-off-by: Erez Zadok --- fs/unionfs/inode.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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; } -- 2.34.1