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: Stanislav Kinsbursky <skinsbursky@parallels.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
		
					parent
					
						
							
								0e1cb5c0aa
							
						
					
				
			
			
				commit
				
					
						3b64739fb9
					
				
			
		
					 3 changed files with 23 additions and 8 deletions
				
			
		| 
						 | 
				
			
			@ -565,12 +565,8 @@ void nlm_host_rebooted(const struct nlm_reboot *info)
 | 
			
		|||
	nsm_release(nsm);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Shut down the hosts module.
 | 
			
		||||
 * Note that this routine is called only at server shutdown time.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
nlm_shutdown_hosts(void)
 | 
			
		||||
nlm_shutdown_hosts_net(struct net *net)
 | 
			
		||||
{
 | 
			
		||||
	struct hlist_head *chain;
 | 
			
		||||
	struct hlist_node *pos;
 | 
			
		||||
| 
						 | 
				
			
			@ -582,6 +578,8 @@ nlm_shutdown_hosts(void)
 | 
			
		|||
	/* First, make all hosts eligible for gc */
 | 
			
		||||
	dprintk("lockd: nuking all hosts...\n");
 | 
			
		||||
	for_each_host(host, pos, chain, nlm_server_hosts) {
 | 
			
		||||
		if (net && host->net != net)
 | 
			
		||||
			continue;
 | 
			
		||||
		host->h_expires = jiffies - 1;
 | 
			
		||||
		if (host->h_rpcclnt) {
 | 
			
		||||
			rpc_shutdown_client(host->h_rpcclnt);
 | 
			
		||||
| 
						 | 
				
			
			@ -592,15 +590,29 @@ nlm_shutdown_hosts(void)
 | 
			
		|||
	/* Then, perform a garbage collection pass */
 | 
			
		||||
	nlm_gc_hosts();
 | 
			
		||||
	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 */
 | 
			
		||||
	if (nrhosts != 0) {
 | 
			
		||||
		printk(KERN_WARNING "lockd: couldn't shutdown host module!\n");
 | 
			
		||||
		dprintk("lockd: %lu hosts left:\n", nrhosts);
 | 
			
		||||
		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_inuse, host->h_expires);
 | 
			
		||||
				host->h_inuse, host->h_expires, host->net);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -281,8 +281,10 @@ static void lockd_down_net(struct net *net)
 | 
			
		|||
	struct svc_serv *serv = nlmsvc_rqst->rq_server;
 | 
			
		||||
 | 
			
		||||
	if (ln->nlmsvc_users) {
 | 
			
		||||
		if (--ln->nlmsvc_users == 0)
 | 
			
		||||
		if (--ln->nlmsvc_users == 0) {
 | 
			
		||||
			nlm_shutdown_hosts_net(net);
 | 
			
		||||
			svc_shutdown_net(serv, net);
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		printk(KERN_ERR "lockd_down_net: no users! task=%p, net=%p\n",
 | 
			
		||||
				nlmsvc_task, net);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -234,6 +234,7 @@ struct rpc_clnt * nlm_bind_host(struct nlm_host *);
 | 
			
		|||
void		  nlm_rebind_host(struct nlm_host *);
 | 
			
		||||
struct nlm_host * nlm_get_host(struct nlm_host *);
 | 
			
		||||
void		  nlm_shutdown_hosts(void);
 | 
			
		||||
void		  nlm_shutdown_hosts_net(struct net *net);
 | 
			
		||||
void		  nlm_host_rebooted(const struct nlm_reboot *);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue