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