Not that this is a performance-critical path...
But it might be cleaner to create a helper that garbage collects a
single host, and then call that routine from a loop in both
nlm_shutdown_hosts() and nlm_gc_hosts(), instead of using a two pass
shutdown.
On Nov 5, 2008, at 3:06 PM, J. Bruce Fields wrote:
This code will later be shared.
Signed-off-by: J. Bruce Fields <bfields@xxxxxxxxxxxxxx>
---
fs/lockd/host.c | 27 ++++++++++++++++-----------
1 files changed, 16 insertions(+), 11 deletions(-)
diff --git a/fs/lockd/host.c b/fs/lockd/host.c
index fa006af..588017f 100644
--- a/fs/lockd/host.c
+++ b/fs/lockd/host.c
@@ -593,29 +593,34 @@ static void warn_host_leak(struct host_table
*table)
}
}
-/*
- * Shut down the hosts module.
- * Note that this routine is called only at server shutdown time.
- */
-void
-nlm_shutdown_hosts(void)
+static void expire_hosts(struct host_table *table)
{
struct hlist_head *chain;
struct hlist_node *pos;
struct nlm_host *host;
- dprintk("lockd: shutting down host module\n");
- mutex_lock(&nlm_hosts.ht_mutex);
-
- /* First, make all hosts eligible for gc */
dprintk("lockd: nuking all hosts...\n");
- for_each_host(host, pos, chain, &nlm_hosts) {
+ for_each_host(host, pos, chain, table) {
host->h_expires = jiffies - 1;
if (host->h_rpcclnt) {
rpc_shutdown_client(host->h_rpcclnt);
host->h_rpcclnt = NULL;
}
}
+}
+
+/*
+ * Shut down the hosts module.
+ * Note that this routine is called only at server shutdown time.
+ */
+void
+nlm_shutdown_hosts(void)
+{
+ dprintk("lockd: shutting down host module\n");
+ mutex_lock(&nlm_hosts.ht_mutex);
+
+ /* First, make all hosts eligible for gc */
+ expire_hosts(&nlm_hosts);
/* Then, perform a garbage collection pass */
nlm_gc_hosts();
--
1.5.5.rc1
--
Chuck Lever
chuck[dot]lever[at]oracle[dot]com
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html