sunrpc: Factor out rpc_xprt freeing
authorPavel Emelyanov <xemul@parallels.com>
Wed, 29 Sep 2010 12:03:13 +0000 (16:03 +0400)
committerJ. Bruce Fields <bfields@redhat.com>
Fri, 1 Oct 2010 21:18:53 +0000 (17:18 -0400)
Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
include/linux/sunrpc/xprt.h
net/sunrpc/xprt.c
net/sunrpc/xprtrdma/transport.c
net/sunrpc/xprtsock.c

index 00f6e3fe29004aaeb862d18bd25751c59a517feb..af4b560f0794960c54cf426b2344ad31cfc48dd9 100644 (file)
@@ -281,6 +281,7 @@ void                        xprt_release(struct rpc_task *task);
 struct rpc_xprt *      xprt_get(struct rpc_xprt *xprt);
 void                   xprt_put(struct rpc_xprt *xprt);
 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)
 {
index 26cbe219388bd22df303b8fed523c91ced2ed267..0637340e53426c59b4fb019b259fd237741e7457 100644 (file)
@@ -984,6 +984,13 @@ out:
 }
 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
  * @task: RPC task requesting a slot allocation
index 9d77bf25829f6619e37ec12a82c3c2895798e222..0f7a1b9d05ada4b85e620abf7a3956b045b894f8 100644 (file)
@@ -251,9 +251,7 @@ xprt_rdma_destroy(struct rpc_xprt *xprt)
 
        xprt_rdma_free_addresses(xprt);
 
-       kfree(xprt->slot);
-       xprt->slot = NULL;
-       kfree(xprt);
+       xprt_free(xprt);
 
        dprintk("RPC:       %s: returning\n", __func__);
 
@@ -401,8 +399,7 @@ out3:
 out2:
        rpcrdma_ia_close(&new_xprt->rx_ia);
 out1:
-       kfree(xprt->slot);
-       kfree(xprt);
+       xprt_free(xprt);
        return ERR_PTR(rc);
 }
 
index a7a763821b8815f17066a5c26dc6a248ca30d350..b1e36ec6fd80bba57daaebe08267e1510f5148b7 100644 (file)
@@ -774,8 +774,7 @@ static void xs_destroy(struct rpc_xprt *xprt)
 
        xs_close(xprt);
        xs_free_peer_addresses(xprt);
-       kfree(xprt->slot);
-       kfree(xprt);
+       xprt_free(xprt);
        module_put(THIS_MODULE);
 }
 
@@ -2362,8 +2361,7 @@ static struct rpc_xprt *xs_setup_udp(struct xprt_create *args)
                return xprt;
        ret = ERR_PTR(-EINVAL);
 out_err:
-       kfree(xprt->slot);
-       kfree(xprt);
+       xprt_free(xprt);
        return ret;
 }
 
@@ -2438,8 +2436,7 @@ static struct rpc_xprt *xs_setup_tcp(struct xprt_create *args)
                return xprt;
        ret = ERR_PTR(-EINVAL);
 out_err:
-       kfree(xprt->slot);
-       kfree(xprt);
+       xprt_free(xprt);
        return ret;
 }
 
@@ -2519,8 +2516,7 @@ static struct rpc_xprt *xs_setup_bc_tcp(struct xprt_create *args)
                return xprt;
        ret = ERR_PTR(-EINVAL);
 out_err:
-       kfree(xprt->slot);
-       kfree(xprt);
+       xprt_free(xprt);
        return ret;
 }