From 3c9b3f75acb72d2af5c1472f86cd609a16a4b723 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 30 Oct 2012 13:06:45 -0400 Subject: [PATCH] Update patch for 867344 --- ...ifs_lookup-on-hashed-negative-dentry.patch | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/dont-call-cifs_lookup-on-hashed-negative-dentry.patch b/dont-call-cifs_lookup-on-hashed-negative-dentry.patch index 88b35e2f8..4e25f9d20 100644 --- a/dont-call-cifs_lookup-on-hashed-negative-dentry.patch +++ b/dont-call-cifs_lookup-on-hashed-negative-dentry.patch @@ -1,21 +1,19 @@ @@ -, +, @@ - negative dentry - BUG_ON(!d_unhashed(entry)); - fs/cifs/dir.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) + cifs_atomic_open + fs/cifs/dir.c | 6 ++++++ + 1 file changed, 6 insertions(+) --- a/fs/cifs/dir.c +++ a/fs/cifs/dir.c -@@ -398,7 +398,12 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry, +@@ -398,6 +398,12 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry, * in network traffic in the other paths. */ if (!(oflags & O_CREAT)) { -- struct dentry *res = cifs_lookup(inode, direntry, 0); -+ struct dentry *res; -+ -+ if (!direntry->d_inode) ++ /* Check for hashed negative dentry. We have already revalidated ++ * the dentry and it is fine. No need to perform another lookup. ++ */ ++ if (!d_unhashed(direntry)) + return -ENOENT; + -+ res = cifs_lookup(inode, direntry, 0); + struct dentry *res = cifs_lookup(inode, direntry, 0); if (IS_ERR(res)) return PTR_ERR(res); -