aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/sunrpc/xprt.h1
-rw-r--r--net/sunrpc/xprt.c7
-rw-r--r--net/sunrpc/xprtrdma/transport.c7
-rw-r--r--net/sunrpc/xprtsock.c12
4 files changed, 14 insertions, 13 deletions
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h
index 00f6e3fe2900..af4b560f0794 100644
--- a/include/linux/sunrpc/xprt.h
+++ b/include/linux/sunrpc/xprt.h
@@ -281,6 +281,7 @@ void xprt_release(struct rpc_task *task);
281struct rpc_xprt * xprt_get(struct rpc_xprt *xprt); 281struct rpc_xprt * xprt_get(struct rpc_xprt *xprt);
282void xprt_put(struct rpc_xprt *xprt); 282void xprt_put(struct rpc_xprt *xprt);
283struct rpc_xprt * xprt_alloc(int size, int max_req); 283struct rpc_xprt * xprt_alloc(int size, int max_req);
284void xprt_free(struct rpc_xprt *);
284 285
285static inline __be32 *xprt_skip_transport_header(struct rpc_xprt *xprt, __be32 *p) 286static inline __be32 *xprt_skip_transport_header(struct rpc_xprt *xprt, __be32 *p)
286{ 287{
diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
index 26cbe219388b..0637340e5342 100644
--- a/net/sunrpc/xprt.c
+++ b/net/sunrpc/xprt.c
@@ -984,6 +984,13 @@ out:
984} 984}
985EXPORT_SYMBOL_GPL(xprt_alloc); 985EXPORT_SYMBOL_GPL(xprt_alloc);
986 986
987void xprt_free(struct rpc_xprt *xprt)
988{
989 kfree(xprt->slot);
990 kfree(xprt);
991}
992EXPORT_SYMBOL_GPL(xprt_free);
993
987/** 994/**
988 * xprt_reserve - allocate an RPC request slot 995 * xprt_reserve - allocate an RPC request slot
989 * @task: RPC task requesting a slot allocation 996 * @task: RPC task requesting a slot allocation
diff --git a/net/sunrpc/xprtrdma/transport.c b/net/sunrpc/xprtrdma/transport.c
index 9d77bf25829f..0f7a1b9d05ad 100644
--- a/net/sunrpc/xprtrdma/transport.c
+++ b/net/sunrpc/xprtrdma/transport.c
@@ -251,9 +251,7 @@ xprt_rdma_destroy(struct rpc_xprt *xprt)
251 251
252 xprt_rdma_free_addresses(xprt); 252 xprt_rdma_free_addresses(xprt);
253 253
254 kfree(xprt->slot); 254 xprt_free(xprt);
255 xprt->slot = NULL;
256 kfree(xprt);
257 255
258 dprintk("RPC: %s: returning\n", __func__); 256 dprintk("RPC: %s: returning\n", __func__);
259 257
@@ -401,8 +399,7 @@ out3:
401out2: 399out2:
402 rpcrdma_ia_close(&new_xprt->rx_ia); 400 rpcrdma_ia_close(&new_xprt->rx_ia);
403out1: 401out1:
404 kfree(xprt->slot); 402 xprt_free(xprt);
405 kfree(xprt);
406 return ERR_PTR(rc); 403 return ERR_PTR(rc);
407} 404}
408 405
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index a7a763821b88..b1e36ec6fd80 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -774,8 +774,7 @@ static void xs_destroy(struct rpc_xprt *xprt)
774 774
775 xs_close(xprt); 775 xs_close(xprt);
776 xs_free_peer_addresses(xprt); 776 xs_free_peer_addresses(xprt);
777 kfree(xprt->slot); 777 xprt_free(xprt);
778 kfree(xprt);
779 module_put(THIS_MODULE); 778 module_put(THIS_MODULE);
780} 779}
781 780
@@ -2362,8 +2361,7 @@ static struct rpc_xprt *xs_setup_udp(struct xprt_create *args)
2362 return xprt; 2361 return xprt;
2363 ret = ERR_PTR(-EINVAL); 2362 ret = ERR_PTR(-EINVAL);
2364out_err: 2363out_err:
2365 kfree(xprt->slot); 2364 xprt_free(xprt);
2366 kfree(xprt);
2367 return ret; 2365 return ret;
2368} 2366}
2369 2367
@@ -2438,8 +2436,7 @@ static struct rpc_xprt *xs_setup_tcp(struct xprt_create *args)
2438 return xprt; 2436 return xprt;
2439 ret = ERR_PTR(-EINVAL); 2437 ret = ERR_PTR(-EINVAL);
2440out_err: 2438out_err:
2441 kfree(xprt->slot); 2439 xprt_free(xprt);
2442 kfree(xprt);
2443 return ret; 2440 return ret;
2444} 2441}
2445 2442
@@ -2519,8 +2516,7 @@ static struct rpc_xprt *xs_setup_bc_tcp(struct xprt_create *args)
2519 return xprt; 2516 return xprt;
2520 ret = ERR_PTR(-EINVAL); 2517 ret = ERR_PTR(-EINVAL);
2521out_err: 2518out_err:
2522 kfree(xprt->slot); 2519 xprt_free(xprt);
2523 kfree(xprt);
2524 return ret; 2520 return ret;
2525} 2521}
2526 2522