Commit e204e621 authored by Pavel Emelyanov's avatar Pavel Emelyanov Committed by J. Bruce Fields

sunrpc: Factor out rpc_xprt freeing

Signed-off-by: default avatarPavel Emelyanov <xemul@openvz.org>
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent bd1722d4
...@@ -281,6 +281,7 @@ void xprt_release(struct rpc_task *task); ...@@ -281,6 +281,7 @@ void xprt_release(struct rpc_task *task);
struct rpc_xprt * xprt_get(struct rpc_xprt *xprt); struct rpc_xprt * xprt_get(struct rpc_xprt *xprt);
void xprt_put(struct rpc_xprt *xprt); void xprt_put(struct rpc_xprt *xprt);
struct rpc_xprt * xprt_alloc(int size, int max_req); struct rpc_xprt * xprt_alloc(int size, int max_req);
void xprt_free(struct rpc_xprt *);
static inline __be32 *xprt_skip_transport_header(struct rpc_xprt *xprt, __be32 *p) static inline __be32 *xprt_skip_transport_header(struct rpc_xprt *xprt, __be32 *p)
{ {
......
...@@ -984,6 +984,13 @@ struct rpc_xprt *xprt_alloc(int size, int max_req) ...@@ -984,6 +984,13 @@ struct rpc_xprt *xprt_alloc(int size, int max_req)
} }
EXPORT_SYMBOL_GPL(xprt_alloc); EXPORT_SYMBOL_GPL(xprt_alloc);
void xprt_free(struct rpc_xprt *xprt)
{
kfree(xprt->slot);
kfree(xprt);
}
EXPORT_SYMBOL_GPL(xprt_free);
/** /**
* xprt_reserve - allocate an RPC request slot * xprt_reserve - allocate an RPC request slot
* @task: RPC task requesting a slot allocation * @task: RPC task requesting a slot allocation
......
...@@ -251,9 +251,7 @@ xprt_rdma_destroy(struct rpc_xprt *xprt) ...@@ -251,9 +251,7 @@ xprt_rdma_destroy(struct rpc_xprt *xprt)
xprt_rdma_free_addresses(xprt); xprt_rdma_free_addresses(xprt);
kfree(xprt->slot); xprt_free(xprt);
xprt->slot = NULL;
kfree(xprt);
dprintk("RPC: %s: returning\n", __func__); dprintk("RPC: %s: returning\n", __func__);
...@@ -401,8 +399,7 @@ xprt_setup_rdma(struct xprt_create *args) ...@@ -401,8 +399,7 @@ xprt_setup_rdma(struct xprt_create *args)
out2: out2:
rpcrdma_ia_close(&new_xprt->rx_ia); rpcrdma_ia_close(&new_xprt->rx_ia);
out1: out1:
kfree(xprt->slot); xprt_free(xprt);
kfree(xprt);
return ERR_PTR(rc); return ERR_PTR(rc);
} }
......
...@@ -774,8 +774,7 @@ static void xs_destroy(struct rpc_xprt *xprt) ...@@ -774,8 +774,7 @@ static void xs_destroy(struct rpc_xprt *xprt)
xs_close(xprt); xs_close(xprt);
xs_free_peer_addresses(xprt); xs_free_peer_addresses(xprt);
kfree(xprt->slot); xprt_free(xprt);
kfree(xprt);
module_put(THIS_MODULE); module_put(THIS_MODULE);
} }
...@@ -2362,8 +2361,7 @@ static struct rpc_xprt *xs_setup_udp(struct xprt_create *args) ...@@ -2362,8 +2361,7 @@ static struct rpc_xprt *xs_setup_udp(struct xprt_create *args)
return xprt; return xprt;
ret = ERR_PTR(-EINVAL); ret = ERR_PTR(-EINVAL);
out_err: out_err:
kfree(xprt->slot); xprt_free(xprt);
kfree(xprt);
return ret; return ret;
} }
...@@ -2438,8 +2436,7 @@ static struct rpc_xprt *xs_setup_tcp(struct xprt_create *args) ...@@ -2438,8 +2436,7 @@ static struct rpc_xprt *xs_setup_tcp(struct xprt_create *args)
return xprt; return xprt;
ret = ERR_PTR(-EINVAL); ret = ERR_PTR(-EINVAL);
out_err: out_err:
kfree(xprt->slot); xprt_free(xprt);
kfree(xprt);
return ret; return ret;
} }
...@@ -2519,8 +2516,7 @@ static struct rpc_xprt *xs_setup_bc_tcp(struct xprt_create *args) ...@@ -2519,8 +2516,7 @@ static struct rpc_xprt *xs_setup_bc_tcp(struct xprt_create *args)
return xprt; return xprt;
ret = ERR_PTR(-EINVAL); ret = ERR_PTR(-EINVAL);
out_err: out_err:
kfree(xprt->slot); xprt_free(xprt);
kfree(xprt);
return ret; return ret;
} }
......
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