From 2da3471e90e5e4168cad7423976b101f431e076d Mon Sep 17 00:00:00 2001 From: Erez Zadok Date: Fri, 19 Sep 2008 19:26:55 -0400 Subject: [PATCH] patch unionfs-cleanup-mntput-calls.patch --- fs/unionfs/dentry.c | 36 ++---------------------------------- 1 file changed, 2 insertions(+), 34 deletions(-) diff --git a/fs/unionfs/dentry.c b/fs/unionfs/dentry.c index 975f54f03e3..aa28ec73d39 100644 --- a/fs/unionfs/dentry.c +++ b/fs/unionfs/dentry.c @@ -107,25 +107,7 @@ static bool __unionfs_d_revalidate_one(struct dentry *dentry, } /* Free the pointers for our inodes and this dentry. */ - bstart = dbstart(dentry); - bend = dbend(dentry); - - /* - * mntput unhashed lower dentries, because those files got - * deleted or rmdir'ed. - */ - for (bindex = bstart; bindex <= bend; bindex++) { - lower_dentry = unionfs_lower_dentry_idx(dentry, bindex); - if (!lower_dentry) - continue; - if (!d_deleted(lower_dentry) && - !(lower_dentry->d_flags & DCACHE_NFSFS_RENAMED)) - continue; - unionfs_mntput(dentry, bindex); - } - - __dput_lowers(dentry, bstart, bend); - dbstart(dentry) = dbend(dentry) = -1; + path_put_lowers_all(dentry, false); interpose_flag = INTERPOSE_REVAL_NEG; if (positive) { @@ -154,7 +136,6 @@ static bool __unionfs_d_revalidate_one(struct dentry *dentry, } if (unlikely(positive && is_negative_lower(dentry))) { - make_bad_inode(dentry->d_inode); d_drop(dentry); valid = false; goto out; @@ -305,7 +286,7 @@ bool __unionfs_d_revalidate(struct dentry *dentry, struct dentry *parent, struct nameidata *nd, bool willwrite) { bool valid = false; /* default is invalid */ - int sbgen, dgen, bindex; + int sbgen, dgen; verify_locked(dentry); verify_locked(parent); @@ -332,19 +313,6 @@ bool __unionfs_d_revalidate(struct dentry *dentry, struct dentry *parent, } valid = __unionfs_d_revalidate_one(dentry, parent, nd); - /* - * If __unionfs_d_revalidate_one() succeeded above, then it will - * have incremented the refcnt of the mnt's, but also the branch - * indices of the dentry will have been updated (to take into - * account any branch insertions/deletion. So the current - * dbstart/dbend match the current, and new, indices of the mnts - * which __unionfs_d_revalidate_one has incremented. Note: the "if" - * test below does not depend on whether chain_len was 0 or greater. - */ - if (!valid || sbgen == dgen) - goto out; - for (bindex = dbstart(dentry); bindex <= dbend(dentry); bindex++) - unionfs_mntput(dentry, bindex); out: return valid; } -- 2.43.0