aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2008-01-11 17:09:59 -0500
committerTrond Myklebust <Trond.Myklebust@netapp.com>2008-01-30 02:06:07 -0500
commit1093a60ef34bb12010fe7ea4b780bee1c57cfbbe (patch)
treebc558d58ae38aab7e615883eceef1ec253c2d646 /include
parentNFS: Invoke nlmclnt_init during NFS mount processing (diff)
downloadlinux-dev-1093a60ef34bb12010fe7ea4b780bee1c57cfbbe.tar.xz
linux-dev-1093a60ef34bb12010fe7ea4b780bee1c57cfbbe.zip
NLM/NFS: Use cached nlm_host when calling nlmclnt_proc()
Now that each NFS mount point caches its own nlm_host structure, it can be passed to nlmclnt_proc() for each lock request. By pinning an nlm_host for each mount point, we trade the overhead of looking up or creating a fresh nlm_host struct during every NLM procedure call for a little extra memory. We also restrict the nlmclnt_proc symbol to limit the use of this call to in-tree modules. Note that nlm_lookup_host() (just removed from the client's per-request NLM processing) could also trigger an nlm_host garbage collection. Now client-side nlm_host garbage collection occurs only during NFS mount processing. Since the NFS client now holds a reference on these nlm_host structures, they wouldn't have been affected by garbage collection anyway. Given that nlm_lookup_host() reorders the global nlm_host chain after every successful lookup, and that a garbage collection could be triggered during the call, we've removed a significant amount of per-NLM-request CPU processing overhead. Sidebar: there are only a few remaining references to the internals of NFS inodes in the client-side NLM code. The only references I found are related to extracting or comparing the inode's file handle via NFS_FH(). One is in nlmclnt_grant(); the other is in nlmclnt_setlockargs(). Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'include')
-rw-r--r--include/linux/lockd/bind.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/include/linux/lockd/bind.h b/include/linux/lockd/bind.h
index ad5402f5456b..73368075af03 100644
--- a/include/linux/lockd/bind.h
+++ b/include/linux/lockd/bind.h
@@ -42,7 +42,8 @@ extern struct nlm_host *nlmclnt_init(const char *server_name,
u32 nfs_version);
extern void nlmclnt_done(struct nlm_host *host);
-extern int nlmclnt_proc(struct inode *, int, struct file_lock *);
+extern int nlmclnt_proc(struct nlm_host *host, int cmd,
+ struct file_lock *fl);
extern int lockd_up(int proto);
extern void lockd_down(void);