NLM: Change nlm_host_rebooted() to take a single nlm_reboot argument
authorChuck Lever <chuck.lever@oracle.com>
Sat, 6 Dec 2008 00:03:31 +0000 (19:03 -0500)
committerJ. Bruce Fields <bfields@citi.umich.edu>
Tue, 6 Jan 2009 16:53:54 +0000 (11:53 -0500)
Pass the nlm_reboot data structure directly from the NLMPROC_SM_NOTIFY
XDR decoders to nlm_host_rebooted().  This eliminates some packing and
unpacking of the NLMPROC_SM_NOTIFY results, and prepares for passing
these results, including the "priv" cookie, directly to a lookup
routine in fs/lockd/mon.c.

This patch changes code organization but should not cause any
behavioral change.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
fs/lockd/host.c
fs/lockd/svc4proc.c
fs/lockd/svcproc.c
include/linux/lockd/lockd.h

index dbdeaa8..ed10338 100644 (file)
@@ -444,31 +444,34 @@ void nlm_release_host(struct nlm_host *host)
        }
 }
 
-/*
- * We were notified that the host indicated by address &sin
- * has rebooted.
- * Release all resources held by that peer.
+/**
+ * nlm_host_rebooted - Release all resources held by rebooted host
+ * @info: pointer to decoded results of NLM_SM_NOTIFY call
+ *
+ * We were notified that the specified host has rebooted.  Release
+ * all resources held by that peer.
  */
-void nlm_host_rebooted(const struct sockaddr_in *sin,
-                               const char *hostname,
-                               unsigned int hostname_len,
-                               u32 new_state)
+void nlm_host_rebooted(const struct nlm_reboot *info)
 {
+       const struct sockaddr_in sin = {
+               .sin_family             = AF_INET,
+               .sin_addr.s_addr        = info->addr,
+       };
        struct hlist_head *chain;
        struct hlist_node *pos;
        struct nsm_handle *nsm;
        struct nlm_host *host;
 
-       nsm = nsm_find((struct sockaddr *)sin, sizeof(*sin),
-                       hostname, hostname_len, 0);
+       nsm = nsm_find((struct sockaddr *)&sin, sizeof(sin),
+                       info->mon, info->len, 0);
        if (nsm == NULL) {
                dprintk("lockd: never saw rebooted peer '%.*s' before\n",
-                               hostname_len, hostname);
+                               info->len, info->mon);
                return;
        }
 
        dprintk("lockd: nlm_host_rebooted(%.*s, %s)\n",
-                       hostname_len, hostname, nsm->sm_addrbuf);
+                       info->len, info->mon, nsm->sm_addrbuf);
 
        /* When reclaiming locks on this peer, make sure that
         * we set up a new notification */
@@ -483,8 +486,8 @@ again:      mutex_lock(&nlm_host_mutex);
        for (chain = nlm_hosts; chain < nlm_hosts + NLM_HOST_NRHASH; ++chain) {
                hlist_for_each_entry(host, pos, chain, h_hash) {
                        if (host->h_nsmhandle == nsm
-                        && host->h_nsmstate != new_state) {
-                               host->h_nsmstate = new_state;
+                        && host->h_nsmstate != info->state) {
+                               host->h_nsmstate = info->state;
                                host->h_state++;
 
                                nlm_get_host(host);
index 4dfdcbc..bb79a53 100644 (file)
@@ -419,8 +419,6 @@ static __be32
 nlm4svc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp,
                                              void              *resp)
 {
-       struct sockaddr_in      saddr;
-
        dprintk("lockd: SM_NOTIFY     called\n");
 
        if (!nlm_privileged_requester(rqstp)) {
@@ -430,14 +428,7 @@ nlm4svc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp,
                return rpc_system_err;
        }
 
-       /* Obtain the host pointer for this NFS server and try to
-        * reclaim all locks we hold on this server.
-        */
-       memset(&saddr, 0, sizeof(saddr));
-       saddr.sin_family = AF_INET;
-       saddr.sin_addr.s_addr = argp->addr;
-       nlm_host_rebooted(&saddr, argp->mon, argp->len, argp->state);
-
+       nlm_host_rebooted(argp);
        return rpc_success;
 }
 
index 3ca89e2..e44310c 100644 (file)
@@ -451,8 +451,6 @@ static __be32
 nlmsvc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp,
                                              void              *resp)
 {
-       struct sockaddr_in      saddr;
-
        dprintk("lockd: SM_NOTIFY     called\n");
 
        if (!nlm_privileged_requester(rqstp)) {
@@ -462,14 +460,7 @@ nlmsvc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp,
                return rpc_system_err;
        }
 
-       /* Obtain the host pointer for this NFS server and try to
-        * reclaim all locks we hold on this server.
-        */
-       memset(&saddr, 0, sizeof(saddr));
-       saddr.sin_family = AF_INET;
-       saddr.sin_addr.s_addr = argp->addr;
-       nlm_host_rebooted(&saddr, argp->mon, argp->len, argp->state);
-
+       nlm_host_rebooted(argp);
        return rpc_success;
 }
 
index 194fa8a..2a3533e 100644 (file)
@@ -239,8 +239,7 @@ void                  nlm_rebind_host(struct nlm_host *);
 struct nlm_host * nlm_get_host(struct nlm_host *);
 void             nlm_release_host(struct nlm_host *);
 void             nlm_shutdown_hosts(void);
-extern void      nlm_host_rebooted(const struct sockaddr_in *, const char *,
-                                       unsigned int, u32);
+void             nlm_host_rebooted(const struct nlm_reboot *);
 
 /*
  * Host monitoring