summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2006-07-05 13:05:13 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2006-07-05 13:17:13 -0400
commit4e0641a7ad98fca5646a6be17605bc80f6c4ebde (patch)
tree5951d35bb1b2ed5a0452334221689258b5e3165f
parentbce3481c91801665e17f8daf59ede946129f3d3f (diff)
downloadlinux-stable-4e0641a7ad98fca5646a6be17605bc80f6c4ebde.tar.gz
linux-stable-4e0641a7ad98fca5646a6be17605bc80f6c4ebde.tar.bz2
linux-stable-4e0641a7ad98fca5646a6be17605bc80f6c4ebde.zip
NFS: Optimise away an excessive GETATTR call when a file is symlinked
In the case when compiling via a symlink tree, we want to ensure that the close-to-open GETATTR call is applied only to the final file, and not to the symlink. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r--fs/nfs/dir.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
index 3ddda6f7ecc2..e7ffb4deb3e5 100644
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
@@ -690,7 +690,9 @@ int nfs_lookup_verify_inode(struct inode *inode, struct nameidata *nd)
goto out_force;
/* This is an open(2) */
if (nfs_lookup_check_intent(nd, LOOKUP_OPEN) != 0 &&
- !(server->flags & NFS_MOUNT_NOCTO))
+ !(server->flags & NFS_MOUNT_NOCTO) &&
+ (S_ISREG(inode->i_mode) ||
+ S_ISDIR(inode->i_mode)))
goto out_force;
}
return nfs_revalidate_inode(server, inode);