Lines Matching full:conn
26 struct rxrpc_connection *conn = in rxrpc_connection_timer() local
29 rxrpc_queue_conn(conn); in rxrpc_connection_timer()
37 struct rxrpc_connection *conn; in rxrpc_alloc_connection() local
41 conn = kzalloc(sizeof(struct rxrpc_connection), gfp); in rxrpc_alloc_connection()
42 if (conn) { in rxrpc_alloc_connection()
43 INIT_LIST_HEAD(&conn->cache_link); in rxrpc_alloc_connection()
44 timer_setup(&conn->timer, &rxrpc_connection_timer, 0); in rxrpc_alloc_connection()
45 INIT_WORK(&conn->processor, &rxrpc_process_connection); in rxrpc_alloc_connection()
46 INIT_LIST_HEAD(&conn->proc_link); in rxrpc_alloc_connection()
47 INIT_LIST_HEAD(&conn->link); in rxrpc_alloc_connection()
48 skb_queue_head_init(&conn->rx_queue); in rxrpc_alloc_connection()
49 conn->security = &rxrpc_no_security; in rxrpc_alloc_connection()
50 spin_lock_init(&conn->state_lock); in rxrpc_alloc_connection()
51 conn->debug_id = atomic_inc_return(&rxrpc_debug_id); in rxrpc_alloc_connection()
52 conn->size_align = 4; in rxrpc_alloc_connection()
53 conn->idle_timestamp = jiffies; in rxrpc_alloc_connection()
56 _leave(" = %p{%d}", conn, conn ? conn->debug_id : 0); in rxrpc_alloc_connection()
57 return conn; in rxrpc_alloc_connection()
75 struct rxrpc_connection *conn; in rxrpc_find_connection_rcu() local
107 conn = rxrpc_find_service_conn_rcu(peer, skb); in rxrpc_find_connection_rcu()
108 if (!conn || refcount_read(&conn->ref) == 0) in rxrpc_find_connection_rcu()
110 _leave(" = %p", conn); in rxrpc_find_connection_rcu()
111 return conn; in rxrpc_find_connection_rcu()
116 conn = idr_find(&rxrpc_client_conn_ids, in rxrpc_find_connection_rcu()
118 if (!conn || refcount_read(&conn->ref) == 0) { in rxrpc_find_connection_rcu()
119 _debug("no conn"); in rxrpc_find_connection_rcu()
123 if (conn->proto.epoch != k.epoch || in rxrpc_find_connection_rcu()
124 conn->params.local != local) in rxrpc_find_connection_rcu()
127 peer = conn->params.peer; in rxrpc_find_connection_rcu()
150 _leave(" = %p", conn); in rxrpc_find_connection_rcu()
151 return conn; in rxrpc_find_connection_rcu()
164 void __rxrpc_disconnect_call(struct rxrpc_connection *conn, in __rxrpc_disconnect_call() argument
168 &conn->channels[call->cid & RXRPC_CHANNELMASK]; in __rxrpc_disconnect_call()
170 _enter("%d,%x", conn->debug_id, call->cid); in __rxrpc_disconnect_call()
209 struct rxrpc_connection *conn = call->conn; in rxrpc_disconnect_call() local
220 return rxrpc_disconnect_client_call(conn->bundle, call); in rxrpc_disconnect_call()
222 spin_lock(&conn->bundle->channel_lock); in rxrpc_disconnect_call()
223 __rxrpc_disconnect_call(conn, call); in rxrpc_disconnect_call()
224 spin_unlock(&conn->bundle->channel_lock); in rxrpc_disconnect_call()
227 conn->idle_timestamp = jiffies; in rxrpc_disconnect_call()
233 void rxrpc_kill_connection(struct rxrpc_connection *conn) in rxrpc_kill_connection() argument
235 struct rxrpc_net *rxnet = conn->params.local->rxnet; in rxrpc_kill_connection()
237 ASSERT(!rcu_access_pointer(conn->channels[0].call) && in rxrpc_kill_connection()
238 !rcu_access_pointer(conn->channels[1].call) && in rxrpc_kill_connection()
239 !rcu_access_pointer(conn->channels[2].call) && in rxrpc_kill_connection()
240 !rcu_access_pointer(conn->channels[3].call)); in rxrpc_kill_connection()
241 ASSERT(list_empty(&conn->cache_link)); in rxrpc_kill_connection()
244 list_del_init(&conn->proc_link); in rxrpc_kill_connection()
251 rxrpc_purge_queue(&conn->rx_queue); in rxrpc_kill_connection()
257 call_rcu(&conn->rcu, rxrpc_destroy_connection); in rxrpc_kill_connection()
264 bool rxrpc_queue_conn(struct rxrpc_connection *conn) in rxrpc_queue_conn() argument
269 if (!__refcount_inc_not_zero(&conn->ref, &r)) in rxrpc_queue_conn()
271 if (rxrpc_queue_work(&conn->processor)) in rxrpc_queue_conn()
272 trace_rxrpc_conn(conn->debug_id, rxrpc_conn_queued, r + 1, here); in rxrpc_queue_conn()
274 rxrpc_put_connection(conn); in rxrpc_queue_conn()
281 void rxrpc_see_connection(struct rxrpc_connection *conn) in rxrpc_see_connection() argument
284 if (conn) { in rxrpc_see_connection()
285 int n = refcount_read(&conn->ref); in rxrpc_see_connection()
287 trace_rxrpc_conn(conn->debug_id, rxrpc_conn_seen, n, here); in rxrpc_see_connection()
294 struct rxrpc_connection *rxrpc_get_connection(struct rxrpc_connection *conn) in rxrpc_get_connection() argument
299 __refcount_inc(&conn->ref, &r); in rxrpc_get_connection()
300 trace_rxrpc_conn(conn->debug_id, rxrpc_conn_got, r, here); in rxrpc_get_connection()
301 return conn; in rxrpc_get_connection()
308 rxrpc_get_connection_maybe(struct rxrpc_connection *conn) in rxrpc_get_connection_maybe() argument
313 if (conn) { in rxrpc_get_connection_maybe()
314 if (__refcount_inc_not_zero(&conn->ref, &r)) in rxrpc_get_connection_maybe()
315 trace_rxrpc_conn(conn->debug_id, rxrpc_conn_got, r + 1, here); in rxrpc_get_connection_maybe()
317 conn = NULL; in rxrpc_get_connection_maybe()
319 return conn; in rxrpc_get_connection_maybe()
335 void rxrpc_put_service_conn(struct rxrpc_connection *conn) in rxrpc_put_service_conn() argument
338 unsigned int debug_id = conn->debug_id; in rxrpc_put_service_conn()
341 __refcount_dec(&conn->ref, &r); in rxrpc_put_service_conn()
344 rxrpc_set_service_reap_timer(conn->params.local->rxnet, in rxrpc_put_service_conn()
353 struct rxrpc_connection *conn = in rxrpc_destroy_connection() local
356 _enter("{%d,u=%d}", conn->debug_id, refcount_read(&conn->ref)); in rxrpc_destroy_connection()
358 ASSERTCMP(refcount_read(&conn->ref), ==, 0); in rxrpc_destroy_connection()
360 _net("DESTROY CONN %d", conn->debug_id); in rxrpc_destroy_connection()
362 del_timer_sync(&conn->timer); in rxrpc_destroy_connection()
363 rxrpc_purge_queue(&conn->rx_queue); in rxrpc_destroy_connection()
365 conn->security->clear(conn); in rxrpc_destroy_connection()
366 key_put(conn->params.key); in rxrpc_destroy_connection()
367 key_put(conn->server_key); in rxrpc_destroy_connection()
368 rxrpc_put_bundle(conn->bundle); in rxrpc_destroy_connection()
369 rxrpc_put_peer(conn->params.peer); in rxrpc_destroy_connection()
371 if (atomic_dec_and_test(&conn->params.local->rxnet->nr_conns)) in rxrpc_destroy_connection()
372 wake_up_var(&conn->params.local->rxnet->nr_conns); in rxrpc_destroy_connection()
373 rxrpc_put_local(conn->params.local); in rxrpc_destroy_connection()
375 kfree(conn); in rxrpc_destroy_connection()
384 struct rxrpc_connection *conn, *_p; in rxrpc_service_connection_reaper() local
397 list_for_each_entry_safe(conn, _p, &rxnet->service_conns, link) { in rxrpc_service_connection_reaper()
398 ASSERTCMP(refcount_read(&conn->ref), >, 0); in rxrpc_service_connection_reaper()
399 if (likely(refcount_read(&conn->ref) > 1)) in rxrpc_service_connection_reaper()
401 if (conn->state == RXRPC_CONN_SERVICE_PREALLOC) in rxrpc_service_connection_reaper()
404 if (rxnet->live && !conn->params.local->dead) { in rxrpc_service_connection_reaper()
405 idle_timestamp = READ_ONCE(conn->idle_timestamp); in rxrpc_service_connection_reaper()
407 if (conn->params.local->service_closed) in rxrpc_service_connection_reaper()
410 _debug("reap CONN %d { u=%d,t=%ld }", in rxrpc_service_connection_reaper()
411 conn->debug_id, refcount_read(&conn->ref), in rxrpc_service_connection_reaper()
424 if (!refcount_dec_if_one(&conn->ref)) in rxrpc_service_connection_reaper()
426 trace_rxrpc_conn(conn->debug_id, rxrpc_conn_reap_service, 0, NULL); in rxrpc_service_connection_reaper()
428 if (rxrpc_conn_is_client(conn)) in rxrpc_service_connection_reaper()
431 rxrpc_unpublish_service_conn(conn); in rxrpc_service_connection_reaper()
433 list_move_tail(&conn->link, &graveyard); in rxrpc_service_connection_reaper()
444 conn = list_entry(graveyard.next, struct rxrpc_connection, in rxrpc_service_connection_reaper()
446 list_del_init(&conn->link); in rxrpc_service_connection_reaper()
448 ASSERTCMP(refcount_read(&conn->ref), ==, 0); in rxrpc_service_connection_reaper()
449 rxrpc_kill_connection(conn); in rxrpc_service_connection_reaper()
461 struct rxrpc_connection *conn, *_p; in rxrpc_destroy_all_connections() local
474 list_for_each_entry_safe(conn, _p, &rxnet->service_conns, link) { in rxrpc_destroy_all_connections()
475 pr_err("AF_RXRPC: Leaked conn %p {%d}\n", in rxrpc_destroy_all_connections()
476 conn, refcount_read(&conn->ref)); in rxrpc_destroy_all_connections()