SUNRPC: add WARN_ON_ONCE for potential deadlock
rpc_shutdown_client should never be called from a workqueue context. If it is, it could deadlock looping forever trying to kill tasks that are assigned to the same kworker thread (and will never run rpc_exit_task). Signed-off-by: Weston Andros Adamson <dros@netapp.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
		
					parent
					
						
							
								3d70f8c617
							
						
					
				
			
			
				commit
				
					
						168e4b39d1
					
				
			
		
					 1 changed files with 7 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -607,6 +607,13 @@ EXPORT_SYMBOL_GPL(rpc_killall_tasks);
 | 
			
		|||
 */
 | 
			
		||||
void rpc_shutdown_client(struct rpc_clnt *clnt)
 | 
			
		||||
{
 | 
			
		||||
	/*
 | 
			
		||||
	 * To avoid deadlock, never call rpc_shutdown_client from a
 | 
			
		||||
	 * workqueue context!
 | 
			
		||||
	 */
 | 
			
		||||
	WARN_ON_ONCE(current->flags & PF_WQ_WORKER);
 | 
			
		||||
	might_sleep();
 | 
			
		||||
 | 
			
		||||
	dprintk_rcu("RPC:       shutting down %s client for %s\n",
 | 
			
		||||
			clnt->cl_protname,
 | 
			
		||||
			rcu_dereference(clnt->cl_xprt)->servername);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue