Lines Matching refs:conn

46 					   struct rxrpc_connection *conn)
48 idr_remove(&local->conn_ids, conn->proto.cid >> RXRPC_CIDSHIFT);
56 struct rxrpc_connection *conn;
60 idr_for_each_entry(&local->conn_ids, conn, id) {
61 pr_err("AF_RXRPC: Leaked client conn %p {%d}\n",
62 conn, refcount_read(&conn->ref));
154 struct rxrpc_connection *conn;
161 conn = rxrpc_alloc_connection(rxnet, GFP_ATOMIC | __GFP_NOWARN);
162 if (!conn)
165 id = idr_alloc_cyclic(&local->conn_ids, conn, 1, 0x40000000,
168 kfree(conn);
172 refcount_set(&conn->ref, 1);
173 conn->proto.cid = id << RXRPC_CIDSHIFT;
174 conn->proto.epoch = local->rxnet->epoch;
175 conn->out_clientflag = RXRPC_CLIENT_INITIATED;
176 conn->bundle = rxrpc_get_bundle(bundle, rxrpc_bundle_get_client_conn);
177 conn->local = rxrpc_get_local(bundle->local, rxrpc_local_get_client_conn);
178 conn->peer = rxrpc_get_peer(bundle->peer, rxrpc_peer_get_client_conn);
179 conn->key = key_get(bundle->key);
180 conn->security = bundle->security;
181 conn->exclusive = bundle->exclusive;
182 conn->upgrade = bundle->upgrade;
183 conn->orig_service_id = bundle->service_id;
184 conn->security_level = bundle->security_level;
185 conn->state = RXRPC_CONN_CLIENT_UNSECURED;
186 conn->service_id = conn->orig_service_id;
188 if (conn->security == &rxrpc_no_security)
189 conn->state = RXRPC_CONN_CLIENT;
193 list_add_tail(&conn->proc_link, &rxnet->conn_proc_list);
196 rxrpc_see_connection(conn, rxrpc_conn_new_client);
199 trace_rxrpc_client(conn, -1, rxrpc_client_alloc);
200 return conn;
206 static bool rxrpc_may_reuse_conn(struct rxrpc_connection *conn)
211 if (!conn)
214 rxnet = conn->rxnet;
215 if (test_bit(RXRPC_CONN_DONT_REUSE, &conn->flags))
218 if ((conn->state != RXRPC_CONN_CLIENT_UNSECURED &&
219 conn->state != RXRPC_CONN_CLIENT) ||
220 conn->proto.epoch != rxnet->epoch)
229 id_cursor = idr_get_cursor(&conn->local->conn_ids);
230 id = conn->proto.cid >> RXRPC_CIDSHIFT;
241 set_bit(RXRPC_CONN_DONT_REUSE, &conn->flags);
247 * Look up the conn bundle that matches the connection parameters, adding it if
341 struct rxrpc_connection *conn, *old;
353 conn = rxrpc_alloc_client_connection(bundle);
354 if (IS_ERR(conn)) {
355 bundle->alloc_error = PTR_ERR(conn);
360 conn->bundle_shift = shift;
361 bundle->conns[slot] = conn;
362 bundle->conn_ids[slot] = conn->debug_id;
412 static void rxrpc_activate_one_channel(struct rxrpc_connection *conn,
415 struct rxrpc_channel *chan = &conn->channels[channel];
416 struct rxrpc_bundle *bundle = conn->bundle;
421 _enter("C=%x,%u", conn->debug_id, channel);
425 trace_rxrpc_client(conn, channel, rxrpc_client_chan_activate);
430 clear_bit(RXRPC_CONN_FINAL_ACK_0 + channel, &conn->flags);
431 clear_bit(conn->bundle_shift + channel, &bundle->avail_chans);
434 call->conn = rxrpc_get_connection(conn, rxrpc_conn_get_activate_call);
435 call->cid = conn->proto.cid | channel;
437 call->dest_srx.srx_service = conn->service_id;
459 static void rxrpc_unidle_conn(struct rxrpc_connection *conn)
461 if (!list_empty(&conn->cache_link)) {
462 list_del_init(&conn->cache_link);
463 rxrpc_put_connection(conn, rxrpc_conn_put_unidle);
472 struct rxrpc_connection *conn;
491 conn = bundle->conns[slot];
492 if (!conn)
496 set_bit(RXRPC_CONN_PROBING_FOR_UPGRADE, &conn->flags);
497 rxrpc_unidle_conn(conn);
500 conn->act_chans |= 1 << channel;
501 rxrpc_activate_one_channel(conn, channel);
533 struct rxrpc_connection *conn = call->conn;
534 struct rxrpc_channel *chan = &conn->channels[channel];
544 set_bit(RXRPC_CONN_DONT_REUSE, &conn->flags);
545 trace_rxrpc_client(conn, channel, rxrpc_client_exposed);
572 struct rxrpc_connection *conn;
584 conn = call->conn;
585 if (!conn) {
595 chan = &conn->channels[channel];
596 trace_rxrpc_client(conn, channel, rxrpc_client_chan_disconnect);
601 may_reuse = rxrpc_may_reuse_conn(conn);
614 __rxrpc_disconnect_call(conn, call);
616 if (test_and_clear_bit(RXRPC_CONN_PROBING_FOR_UPGRADE, &conn->flags)) {
617 trace_rxrpc_client(conn, channel, rxrpc_client_to_active);
626 trace_rxrpc_client(conn, channel, rxrpc_client_chan_pass);
627 rxrpc_activate_one_channel(conn, channel);
641 set_bit(RXRPC_CONN_FINAL_ACK_0 + channel, &conn->flags);
642 rxrpc_reduce_conn_timer(conn, final_ack_at);
647 set_bit(conn->bundle_shift + channel, &conn->bundle->avail_chans);
648 conn->act_chans &= ~(1 << channel);
654 if (!conn->act_chans) {
655 trace_rxrpc_client(conn, channel, rxrpc_client_to_idle);
656 conn->idle_timestamp = jiffies;
658 rxrpc_get_connection(conn, rxrpc_conn_get_idle);
659 list_move_tail(&conn->cache_link, &local->idle_client_conns);
668 static void rxrpc_unbundle_conn(struct rxrpc_connection *conn)
670 struct rxrpc_bundle *bundle = conn->bundle;
674 _enter("C=%x", conn->debug_id);
676 if (conn->flags & RXRPC_CONN_FINAL_ACK_MASK)
677 rxrpc_process_delayed_final_acks(conn, true);
679 bindex = conn->bundle_shift / RXRPC_MAXCALLS;
680 if (bundle->conns[bindex] == conn) {
685 clear_bit(conn->bundle_shift + i, &bundle->avail_chans);
686 rxrpc_put_client_connection_id(bundle->local, conn);
688 rxrpc_put_connection(conn, rxrpc_conn_put_unbundle);
720 void rxrpc_kill_client_conn(struct rxrpc_connection *conn)
722 struct rxrpc_local *local = conn->local;
725 _enter("C=%x", conn->debug_id);
727 trace_rxrpc_client(conn, -1, rxrpc_client_cleanup);
730 rxrpc_put_client_connection_id(local, conn);
734 * Discard expired client connections from the idle list. Each conn in the
737 * This may be called from conn setup or from a work item so cannot be
742 struct rxrpc_connection *conn;
754 conn = list_first_entry_or_null(&local->idle_client_conns,
756 if (!conn)
768 if (conn->local->service_closed)
771 conn_expires_at = conn->idle_timestamp + expiry;
778 atomic_dec(&conn->active);
779 trace_rxrpc_client(conn, -1, rxrpc_client_discard);
780 list_del_init(&conn->cache_link);
782 rxrpc_unbundle_conn(conn);
784 rxrpc_put_connection(conn, rxrpc_conn_put_discard_idle);
809 struct rxrpc_connection *conn;
817 while ((conn = list_first_entry_or_null(&local->idle_client_conns,
819 list_del_init(&conn->cache_link);
820 atomic_dec(&conn->active);
821 trace_rxrpc_client(conn, -1, rxrpc_client_discard);
822 rxrpc_unbundle_conn(conn);
823 rxrpc_put_connection(conn, rxrpc_conn_put_local_dead);