|
@@ -1529,9 +1529,7 @@ EXPORT_SYMBOL_GPL(nfs_atomic_open);
|
|
|
|
|
|
static int nfs4_lookup_revalidate(struct dentry *dentry, unsigned int flags)
|
|
|
{
|
|
|
- struct dentry *parent = NULL;
|
|
|
struct inode *inode;
|
|
|
- struct inode *dir;
|
|
|
int ret = 0;
|
|
|
|
|
|
if (flags & LOOKUP_RCU)
|
|
@@ -1545,34 +1543,35 @@ static int nfs4_lookup_revalidate(struct dentry *dentry, unsigned int flags)
|
|
|
goto no_open;
|
|
|
|
|
|
inode = dentry->d_inode;
|
|
|
- parent = dget_parent(dentry);
|
|
|
- dir = parent->d_inode;
|
|
|
|
|
|
/* We can't create new files in nfs_open_revalidate(), so we
|
|
|
* optimize away revalidation of negative dentries.
|
|
|
*/
|
|
|
if (inode == NULL) {
|
|
|
+ struct dentry *parent;
|
|
|
+ struct inode *dir;
|
|
|
+
|
|
|
+ parent = dget_parent(dentry);
|
|
|
+ dir = parent->d_inode;
|
|
|
if (!nfs_neg_need_reval(dir, dentry, flags))
|
|
|
ret = 1;
|
|
|
+ dput(parent);
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
/* NFS only supports OPEN on regular files */
|
|
|
if (!S_ISREG(inode->i_mode))
|
|
|
- goto no_open_dput;
|
|
|
+ goto no_open;
|
|
|
/* We cannot do exclusive creation on a positive dentry */
|
|
|
if (flags & LOOKUP_EXCL)
|
|
|
- goto no_open_dput;
|
|
|
+ goto no_open;
|
|
|
|
|
|
/* Let f_op->open() actually open (and revalidate) the file */
|
|
|
ret = 1;
|
|
|
|
|
|
out:
|
|
|
- dput(parent);
|
|
|
return ret;
|
|
|
|
|
|
-no_open_dput:
|
|
|
- dput(parent);
|
|
|
no_open:
|
|
|
return nfs_lookup_revalidate(dentry, flags);
|
|
|
}
|