Commit 3b64739f authored by Stanislav Kinsbursky's avatar Stanislav Kinsbursky Committed by Trond Myklebust

Lockd: shutdown NLM hosts in network namespace context

Lockd now managed in network namespace context. And this patch introduces
network namespace related NLM hosts shutdown in case of releasing per-net Lockd
resources.
Signed-off-by: default avatarStanislav Kinsbursky <skinsbursky@parallels.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 0e1cb5c0
...@@ -565,12 +565,8 @@ void nlm_host_rebooted(const struct nlm_reboot *info) ...@@ -565,12 +565,8 @@ void nlm_host_rebooted(const struct nlm_reboot *info)
nsm_release(nsm); nsm_release(nsm);
} }
/*
* Shut down the hosts module.
* Note that this routine is called only at server shutdown time.
*/
void void
nlm_shutdown_hosts(void) nlm_shutdown_hosts_net(struct net *net)
{ {
struct hlist_head *chain; struct hlist_head *chain;
struct hlist_node *pos; struct hlist_node *pos;
...@@ -582,6 +578,8 @@ nlm_shutdown_hosts(void) ...@@ -582,6 +578,8 @@ nlm_shutdown_hosts(void)
/* First, make all hosts eligible for gc */ /* First, make all hosts eligible for gc */
dprintk("lockd: nuking all hosts...\n"); dprintk("lockd: nuking all hosts...\n");
for_each_host(host, pos, chain, nlm_server_hosts) { for_each_host(host, pos, chain, nlm_server_hosts) {
if (net && host->net != net)
continue;
host->h_expires = jiffies - 1; host->h_expires = jiffies - 1;
if (host->h_rpcclnt) { if (host->h_rpcclnt) {
rpc_shutdown_client(host->h_rpcclnt); rpc_shutdown_client(host->h_rpcclnt);
...@@ -592,15 +590,29 @@ nlm_shutdown_hosts(void) ...@@ -592,15 +590,29 @@ nlm_shutdown_hosts(void)
/* Then, perform a garbage collection pass */ /* Then, perform a garbage collection pass */
nlm_gc_hosts(); nlm_gc_hosts();
mutex_unlock(&nlm_host_mutex); mutex_unlock(&nlm_host_mutex);
}
/*
* Shut down the hosts module.
* Note that this routine is called only at server shutdown time.
*/
void
nlm_shutdown_hosts(void)
{
struct hlist_head *chain;
struct hlist_node *pos;
struct nlm_host *host;
nlm_shutdown_hosts_net(NULL);
/* complain if any hosts are left */ /* complain if any hosts are left */
if (nrhosts != 0) { if (nrhosts != 0) {
printk(KERN_WARNING "lockd: couldn't shutdown host module!\n"); printk(KERN_WARNING "lockd: couldn't shutdown host module!\n");
dprintk("lockd: %lu hosts left:\n", nrhosts); dprintk("lockd: %lu hosts left:\n", nrhosts);
for_each_host(host, pos, chain, nlm_server_hosts) { for_each_host(host, pos, chain, nlm_server_hosts) {
dprintk(" %s (cnt %d use %d exp %ld)\n", dprintk(" %s (cnt %d use %d exp %ld net %p)\n",
host->h_name, atomic_read(&host->h_count), host->h_name, atomic_read(&host->h_count),
host->h_inuse, host->h_expires); host->h_inuse, host->h_expires, host->net);
} }
} }
} }
......
...@@ -281,8 +281,10 @@ static void lockd_down_net(struct net *net) ...@@ -281,8 +281,10 @@ static void lockd_down_net(struct net *net)
struct svc_serv *serv = nlmsvc_rqst->rq_server; struct svc_serv *serv = nlmsvc_rqst->rq_server;
if (ln->nlmsvc_users) { if (ln->nlmsvc_users) {
if (--ln->nlmsvc_users == 0) if (--ln->nlmsvc_users == 0) {
nlm_shutdown_hosts_net(net);
svc_shutdown_net(serv, net); svc_shutdown_net(serv, net);
}
} else { } else {
printk(KERN_ERR "lockd_down_net: no users! task=%p, net=%p\n", printk(KERN_ERR "lockd_down_net: no users! task=%p, net=%p\n",
nlmsvc_task, net); nlmsvc_task, net);
......
...@@ -234,6 +234,7 @@ struct rpc_clnt * nlm_bind_host(struct nlm_host *); ...@@ -234,6 +234,7 @@ struct rpc_clnt * nlm_bind_host(struct nlm_host *);
void nlm_rebind_host(struct nlm_host *); void nlm_rebind_host(struct nlm_host *);
struct nlm_host * nlm_get_host(struct nlm_host *); struct nlm_host * nlm_get_host(struct nlm_host *);
void nlm_shutdown_hosts(void); void nlm_shutdown_hosts(void);
void nlm_shutdown_hosts_net(struct net *net);
void nlm_host_rebooted(const struct nlm_reboot *); void nlm_host_rebooted(const struct nlm_reboot *);
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment