patch-2.2.18 linux/fs/lockd/host.c
Next file: linux/fs/lockd/lockd_syms.c
Previous file: linux/fs/lockd/clntproc.c
Back to the patch index
Back to the overall index
- Lines: 77
- Date:
Fri Sep 15 22:10:43 2000
- Orig file:
v2.2.17/fs/lockd/host.c
- Orig date:
Fri Apr 21 12:46:43 2000
diff -u --new-file --recursive --exclude-from /usr/src/exclude v2.2.17/fs/lockd/host.c linux/fs/lockd/host.c
@@ -15,6 +15,7 @@
#include <linux/sunrpc/clnt.h>
#include <linux/sunrpc/svc.h>
#include <linux/lockd/lockd.h>
+#include <linux/lockd/sm_inter.h>
#define NLMDBG_FACILITY NLMDBG_HOSTCACHE
@@ -105,8 +106,7 @@
host->h_next = nlm_hosts[hash];
nlm_hosts[hash] = host;
}
- host->h_expires = jiffies + NLM_HOST_EXPIRE;
- host->h_count++;
+ nlm_get_host(host);
up(&nlm_host_sema);
return host;
}
@@ -171,9 +171,12 @@
down(&host->h_sema);
/* If we've already created an RPC client, check whether
- * RPC rebind is required */
+ * RPC rebind is required
+ * Note: why keep rebinding if we're on a tcp connection?
+ */
if ((clnt = host->h_rpcclnt) != NULL) {
- if (time_after_eq(jiffies, host->h_nextrebind)) {
+ xprt = clnt->cl_xprt;
+ if (!xprt->stream && time_after_eq(jiffies, host->h_nextrebind)) {
clnt->cl_port = 0;
host->h_nextrebind = jiffies + NLM_HOST_REBIND;
dprintk("lockd: next rebind in %ld jiffies\n",
@@ -229,13 +232,27 @@
}
/*
+ * Increment NLM host count
+ */
+struct nlm_host * nlm_get_host(struct nlm_host *host)
+{
+ if (host) {
+ dprintk("lockd: get host %s\n", host->h_name);
+ host->h_count ++;
+ host->h_expires = jiffies + NLM_HOST_EXPIRE;
+ }
+ return host;
+}
+
+/*
* Release NLM host after use
*/
-void
-nlm_release_host(struct nlm_host *host)
+void nlm_release_host(struct nlm_host *host)
{
- dprintk("lockd: release host %s\n", host->h_name);
- host->h_count -= 1;
+ if (host && host->h_count) {
+ dprintk("lockd: release host %s\n", host->h_name);
+ host->h_count --;
+ }
}
/*
@@ -307,8 +324,10 @@
}
dprintk("lockd: delete host %s\n", host->h_name);
*q = host->h_next;
+ if (host->h_monitored)
+ nsm_unmonitor(host);
if ((clnt = host->h_rpcclnt) != NULL) {
- if (clnt->cl_users) {
+ if (atomic_read(&clnt->cl_users)) {
printk(KERN_WARNING
"lockd: active RPC handle\n");
clnt->cl_dead = 1;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)