aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2011-03-15 19:56:30 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2011-03-17 12:38:59 -0400
commita8de240a9074b72b156d9e6d53f00076e6cd5f03 (patch)
tree9436ca858870ce89af75703b61a2c25889db354e /net
parente020c6800c9621a77223bf2c1ff68180e41e8ebf (diff)
SUNRPC: Convert struct rpc_xprt to use atomic_t counters
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'net')
-rw-r--r--net/sunrpc/xprt.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
index 8bdcdbe07b98..4499b5a51763 100644
--- a/net/sunrpc/xprt.c
+++ b/net/sunrpc/xprt.c
@@ -964,7 +964,7 @@ struct rpc_xprt *xprt_alloc(struct net *net, int size, int max_req)
964 xprt = kzalloc(size, GFP_KERNEL); 964 xprt = kzalloc(size, GFP_KERNEL);
965 if (xprt == NULL) 965 if (xprt == NULL)
966 goto out; 966 goto out;
967 kref_init(&xprt->kref); 967 atomic_set(&xprt->count, 1);
968 968
969 xprt->max_reqs = max_req; 969 xprt->max_reqs = max_req;
970 xprt->slot = kcalloc(max_req, sizeof(struct rpc_rqst), GFP_KERNEL); 970 xprt->slot = kcalloc(max_req, sizeof(struct rpc_rqst), GFP_KERNEL);
@@ -1144,13 +1144,11 @@ found:
1144 1144
1145/** 1145/**
1146 * xprt_destroy - destroy an RPC transport, killing off all requests. 1146 * xprt_destroy - destroy an RPC transport, killing off all requests.
1147 * @kref: kref for the transport to destroy 1147 * @xprt: transport to destroy
1148 * 1148 *
1149 */ 1149 */
1150static void xprt_destroy(struct kref *kref) 1150static void xprt_destroy(struct rpc_xprt *xprt)
1151{ 1151{
1152 struct rpc_xprt *xprt = container_of(kref, struct rpc_xprt, kref);
1153
1154 dprintk("RPC: destroying transport %p\n", xprt); 1152 dprintk("RPC: destroying transport %p\n", xprt);
1155 xprt->shutdown = 1; 1153 xprt->shutdown = 1;
1156 del_timer_sync(&xprt->timer); 1154 del_timer_sync(&xprt->timer);
@@ -1174,7 +1172,8 @@ static void xprt_destroy(struct kref *kref)
1174 */ 1172 */
1175void xprt_put(struct rpc_xprt *xprt) 1173void xprt_put(struct rpc_xprt *xprt)
1176{ 1174{
1177 kref_put(&xprt->kref, xprt_destroy); 1175 if (atomic_dec_and_test(&xprt->count))
1176 xprt_destroy(xprt);
1178} 1177}
1179 1178
1180/** 1179/**
@@ -1184,6 +1183,7 @@ void xprt_put(struct rpc_xprt *xprt)
1184 */ 1183 */
1185struct rpc_xprt *xprt_get(struct rpc_xprt *xprt) 1184struct rpc_xprt *xprt_get(struct rpc_xprt *xprt)
1186{ 1185{
1187 kref_get(&xprt->kref); 1186 if (atomic_inc_not_zero(&xprt->count))
1188 return xprt; 1187 return xprt;
1188 return NULL;
1189} 1189}