Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=52c4044d00fe703eb3fb18e0d8dfd1c196eb28be
Commit:     52c4044d00fe703eb3fb18e0d8dfd1c196eb28be
Parent:     86d61d8638ddf9cdf87df26c7fa69b2804425fbe
Author:     Chuck Lever <[EMAIL PROTECTED]>
AuthorDate: Fri Jan 11 17:09:44 2008 -0500
Committer:  Trond Myklebust <[EMAIL PROTECTED]>
CommitDate: Wed Jan 30 02:06:06 2008 -0500

    NLM: Introduce external nlm_host set-up and tear-down functions
    
    We would like to remove the per-lock-operation nlm_lookup_host() call from
    nlmclnt_proc().
    
    The new architecture pins an nlm_host structure to each NFS client
    superblock that has the "lock" mount option set.  The NFS client passes
    in the pinned nlm_host structure during each call to nlmclnt_proc().  NFS
    client unmount processing "puts" the nlm_host so it can be garbage-
    collected later.
    
    This patch introduces externally callable NLM functions that handle
    mount-time nlm_host set up and tear-down.
    
    Signed-off-by: Chuck Lever <[EMAIL PROTECTED]>
    Signed-off-by: Trond Myklebust <[EMAIL PROTECTED]>
---
 fs/lockd/clntlock.c        |   48 ++++++++++++++++++++++++++++++++++++++++++++
 include/linux/lockd/bind.h |    7 ++++++
 2 files changed, 55 insertions(+), 0 deletions(-)

diff --git a/fs/lockd/clntlock.c b/fs/lockd/clntlock.c
index d070b18..9a8f4f4 100644
--- a/fs/lockd/clntlock.c
+++ b/fs/lockd/clntlock.c
@@ -41,6 +41,54 @@ struct nlm_wait {
 
 static LIST_HEAD(nlm_blocked);
 
+/**
+ * nlmclnt_init - Set up per-NFS mount point lockd data structures
+ * @server_name: server's hostname
+ * @server_address: server's network address
+ * @server_addrlen: length of server's address
+ * @protocol: transport protocol lockd should use
+ * @nfs_version: NFS protocol version for this mount point
+ *
+ * Returns pointer to an appropriate nlm_host struct,
+ * or an ERR_PTR value.
+ */
+struct nlm_host *nlmclnt_init(const char *server_name,
+                             const struct sockaddr *server_address,
+                             size_t server_addrlen,
+                             unsigned short protocol, u32 nfs_version)
+{
+       struct nlm_host *host;
+       u32 nlm_version = (nfs_version == 2) ? 1 : 4;
+       int status;
+
+       status = lockd_up(protocol);
+       if (status < 0)
+               return ERR_PTR(status);
+
+       host = nlmclnt_lookup_host((struct sockaddr_in *)server_address,
+                                  protocol, nlm_version,
+                                  server_name, strlen(server_name));
+       if (host == NULL) {
+               lockd_down();
+               return ERR_PTR(-ENOLCK);
+       }
+
+       return host;
+}
+EXPORT_SYMBOL_GPL(nlmclnt_init);
+
+/**
+ * nlmclnt_done - Release resources allocated by nlmclnt_init()
+ * @host: nlm_host structure reserved by nlmclnt_init()
+ *
+ */
+void nlmclnt_done(struct nlm_host *host)
+{
+       nlm_release_host(host);
+       lockd_down();
+}
+EXPORT_SYMBOL_GPL(nlmclnt_done);
+
 /*
  * Queue up a lock for blocking so that the GRANTED request can see it
  */
diff --git a/include/linux/lockd/bind.h b/include/linux/lockd/bind.h
index 6f1637c..ad5402f 100644
--- a/include/linux/lockd/bind.h
+++ b/include/linux/lockd/bind.h
@@ -35,6 +35,13 @@ extern struct nlmsvc_binding *       nlmsvc_ops;
 /*
  * Functions exported by the lockd module
  */
+extern struct nlm_host *nlmclnt_init(const char *server_name,
+                                       const struct sockaddr *server_address,
+                                       size_t server_addrlen,
+                                       unsigned short protocol,
+                                       u32 nfs_version);
+extern void    nlmclnt_done(struct nlm_host *host);
+
 extern int     nlmclnt_proc(struct inode *, int, struct file_lock *);
 extern int     lockd_up(int proto);
 extern void    lockd_down(void);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to