Lines Matching refs:trans
38 struct rxrpc_transport *trans; in rxrpc_alloc_transport() local
42 trans = kzalloc(sizeof(struct rxrpc_transport), gfp); in rxrpc_alloc_transport()
43 if (trans) { in rxrpc_alloc_transport()
44 trans->local = local; in rxrpc_alloc_transport()
45 trans->peer = peer; in rxrpc_alloc_transport()
46 INIT_LIST_HEAD(&trans->link); in rxrpc_alloc_transport()
47 trans->bundles = RB_ROOT; in rxrpc_alloc_transport()
48 trans->client_conns = RB_ROOT; in rxrpc_alloc_transport()
49 trans->server_conns = RB_ROOT; in rxrpc_alloc_transport()
50 skb_queue_head_init(&trans->error_queue); in rxrpc_alloc_transport()
51 spin_lock_init(&trans->client_lock); in rxrpc_alloc_transport()
52 rwlock_init(&trans->conn_lock); in rxrpc_alloc_transport()
53 atomic_set(&trans->usage, 1); in rxrpc_alloc_transport()
54 trans->debug_id = atomic_inc_return(&rxrpc_debug_id); in rxrpc_alloc_transport()
59 INIT_WORK(&trans->error_handler, in rxrpc_alloc_transport()
71 _leave(" = %p", trans); in rxrpc_alloc_transport()
72 return trans; in rxrpc_alloc_transport()
82 struct rxrpc_transport *trans, *candidate; in rxrpc_get_transport() local
94 list_for_each_entry(trans, &rxrpc_transports, link) { in rxrpc_get_transport()
95 if (trans->local == local && trans->peer == peer) in rxrpc_get_transport()
110 list_for_each_entry(trans, &rxrpc_transports, link) { in rxrpc_get_transport()
111 if (trans->local == local && trans->peer == peer) in rxrpc_get_transport()
116 trans = candidate; in rxrpc_get_transport()
118 usage = atomic_read(&trans->usage); in rxrpc_get_transport()
120 rxrpc_get_local(trans->local); in rxrpc_get_transport()
121 atomic_inc(&trans->peer->usage); in rxrpc_get_transport()
122 list_add_tail(&trans->link, &rxrpc_transports); in rxrpc_get_transport()
129 trans->debug_id, in rxrpc_get_transport()
130 trans->local->debug_id, in rxrpc_get_transport()
131 trans->peer->debug_id); in rxrpc_get_transport()
133 _leave(" = %p {u=%d}", trans, usage); in rxrpc_get_transport()
134 return trans; in rxrpc_get_transport()
138 usage = atomic_inc_return(&trans->usage); in rxrpc_get_transport()
144 usage = atomic_inc_return(&trans->usage); in rxrpc_get_transport()
156 struct rxrpc_transport *trans; in rxrpc_find_transport() local
167 list_for_each_entry(trans, &rxrpc_transports, link) { in rxrpc_find_transport()
168 if (trans->local == local && trans->peer == peer) in rxrpc_find_transport()
177 atomic_inc(&trans->usage); in rxrpc_find_transport()
179 _leave(" = %p", trans); in rxrpc_find_transport()
180 return trans; in rxrpc_find_transport()
186 void rxrpc_put_transport(struct rxrpc_transport *trans) in rxrpc_put_transport() argument
188 _enter("%p{u=%d}", trans, atomic_read(&trans->usage)); in rxrpc_put_transport()
190 ASSERTCMP(atomic_read(&trans->usage), >, 0); in rxrpc_put_transport()
192 trans->put_time = get_seconds(); in rxrpc_put_transport()
193 if (unlikely(atomic_dec_and_test(&trans->usage))) { in rxrpc_put_transport()
206 static void rxrpc_cleanup_transport(struct rxrpc_transport *trans) in rxrpc_cleanup_transport() argument
208 _net("DESTROY TRANS %d", trans->debug_id); in rxrpc_cleanup_transport()
210 rxrpc_purge_queue(&trans->error_queue); in rxrpc_cleanup_transport()
212 rxrpc_put_local(trans->local); in rxrpc_cleanup_transport()
213 rxrpc_put_peer(trans->peer); in rxrpc_cleanup_transport()
214 kfree(trans); in rxrpc_cleanup_transport()
222 struct rxrpc_transport *trans, *_p; in rxrpc_transport_reaper() local
234 list_for_each_entry_safe(trans, _p, &rxrpc_transports, link) { in rxrpc_transport_reaper()
236 trans->debug_id, atomic_read(&trans->usage), in rxrpc_transport_reaper()
237 (long) now - (long) trans->put_time); in rxrpc_transport_reaper()
239 if (likely(atomic_read(&trans->usage) > 0)) in rxrpc_transport_reaper()
242 reap_time = trans->put_time + rxrpc_transport_expiry; in rxrpc_transport_reaper()
244 list_move_tail(&trans->link, &graveyard); in rxrpc_transport_reaper()
259 trans = list_entry(graveyard.next, struct rxrpc_transport, in rxrpc_transport_reaper()
261 list_del_init(&trans->link); in rxrpc_transport_reaper()
263 ASSERTCMP(atomic_read(&trans->usage), ==, 0); in rxrpc_transport_reaper()
264 rxrpc_cleanup_transport(trans); in rxrpc_transport_reaper()