From c84ab99ae95facbe237ffe3d8edf5b2f6260e386 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Oct 30 2012 17:06:45 +0000 Subject: Update patch for 867344 --- diff --git a/dont-call-cifs_lookup-on-hashed-negative-dentry.patch b/dont-call-cifs_lookup-on-hashed-negative-dentry.patch index 88b35e2..4e25f9d 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); -