diff options
Diffstat (limited to 'net/sunrpc/xprt.c')
| -rw-r--r-- | net/sunrpc/xprt.c | 5 | 
1 files changed, 4 insertions, 1 deletions
| diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c index 4c8f18aff7c..856274d7e85 100644 --- a/net/sunrpc/xprt.c +++ b/net/sunrpc/xprt.c @@ -965,6 +965,7 @@ struct rpc_xprt *xprt_alloc(struct net *net, int size, int max_req)  	xprt = kzalloc(size, GFP_KERNEL);  	if (xprt == NULL)  		goto out; +	kref_init(&xprt->kref);  	xprt->max_reqs = max_req;  	xprt->slot = kcalloc(max_req, sizeof(struct rpc_rqst), GFP_KERNEL); @@ -1101,8 +1102,10 @@ found:  				-PTR_ERR(xprt));  		return xprt;  	} +	if (test_and_set_bit(XPRT_INITIALIZED, &xprt->state)) +		/* ->setup returned a pre-initialized xprt: */ +		return xprt; -	kref_init(&xprt->kref);  	spin_lock_init(&xprt->transport_lock);  	spin_lock_init(&xprt->reserve_lock); | 
