diff options
Diffstat (limited to 'net/sunrpc/svc_xprt.c')
| -rw-r--r-- | net/sunrpc/svc_xprt.c | 13 | 
1 files changed, 13 insertions, 0 deletions
diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c index 049ab53088e9..6973184ff667 100644 --- a/net/sunrpc/svc_xprt.c +++ b/net/sunrpc/svc_xprt.c @@ -1014,6 +1014,19 @@ static void svc_delete_xprt(struct svc_xprt *xprt)  	struct svc_serv	*serv = xprt->xpt_server;  	struct svc_deferred_req *dr; +	/* unregister with rpcbind for when transport type is TCP or UDP. +	 */ +	if (test_bit(XPT_RPCB_UNREG, &xprt->xpt_flags)) { +		struct svc_sock *svsk = container_of(xprt, struct svc_sock, +						     sk_xprt); +		struct socket *sock = svsk->sk_sock; + +		if (svc_register(serv, xprt->xpt_net, sock->sk->sk_family, +				 sock->sk->sk_protocol, 0) < 0) +			pr_warn("failed to unregister %s with rpcbind\n", +				xprt->xpt_class->xcl_name); +	} +  	if (test_and_set_bit(XPT_DEAD, &xprt->xpt_flags))  		return;  | 
