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);
536 struct rxrpc_connection *conn = call->conn;
537 struct rxrpc_channel *chan = &conn->channels[channel];
547 set_bit(RXRPC_CONN_DONT_REUSE, &conn->flags);
548 trace_rxrpc_client(conn, channel, rxrpc_client_exposed);
575 struct rxrpc_connection *conn;
587 conn = call->conn;
588 if (!conn) {
601 chan = &conn->channels[channel];
602 trace_rxrpc_client(conn, channel, rxrpc_client_chan_disconnect);
607 may_reuse = rxrpc_may_reuse_conn(conn);
620 __rxrpc_disconnect_call(conn, call);
622 if (test_and_clear_bit(RXRPC_CONN_PROBING_FOR_UPGRADE, &conn->flags)) {
623 trace_rxrpc_client(conn, channel, rxrpc_client_to_active);
632 trace_rxrpc_client(conn, channel, rxrpc_client_chan_pass);
633 rxrpc_activate_one_channel(conn, channel);
647 set_bit(RXRPC_CONN_FINAL_ACK_0 + channel, &conn->flags);
648 rxrpc_reduce_conn_timer(conn, final_ack_at);
653 set_bit(conn->bundle_shift + channel, &conn->bundle->avail_chans);
654 conn->act_chans &= ~(1 << channel);
660 if (!conn->act_chans) {
661 trace_rxrpc_client(conn, channel, rxrpc_client_to_idle);
662 conn->idle_timestamp = jiffies;
664 rxrpc_get_connection(conn, rxrpc_conn_get_idle);
665 list_move_tail(&conn->cache_link, &local->idle_client_conns);
674 static void rxrpc_unbundle_conn(struct rxrpc_connection *conn)
676 struct rxrpc_bundle *bundle = conn->bundle;
680 _enter("C=%x", conn->debug_id);
682 if (conn->flags & RXRPC_CONN_FINAL_ACK_MASK)
683 rxrpc_process_delayed_final_acks(conn, true);
685 bindex = conn->bundle_shift / RXRPC_MAXCALLS;
686 if (bundle->conns[bindex] == conn) {
691 clear_bit(conn->bundle_shift + i, &bundle->avail_chans);
692 rxrpc_put_client_connection_id(bundle->local, conn);
694 rxrpc_put_connection(conn, rxrpc_conn_put_unbundle);
726 void rxrpc_kill_client_conn(struct rxrpc_connection *conn)
728 struct rxrpc_local *local = conn->local;
731 _enter("C=%x", conn->debug_id);
733 trace_rxrpc_client(conn, -1, rxrpc_client_cleanup);
736 rxrpc_put_client_connection_id(local, conn);
740 * Discard expired client connections from the idle list. Each conn in the
743 * This may be called from conn setup or from a work item so cannot be
748 struct rxrpc_connection *conn;
760 conn = list_first_entry_or_null(&local->idle_client_conns,
762 if (!conn)
774 if (conn->local->service_closed)
777 conn_expires_at = conn->idle_timestamp + expiry;
784 atomic_dec(&conn->active);
785 trace_rxrpc_client(conn, -1, rxrpc_client_discard);
786 list_del_init(&conn->cache_link);
788 rxrpc_unbundle_conn(conn);
790 rxrpc_put_connection(conn, rxrpc_conn_put_discard_idle);
815 struct rxrpc_connection *conn;
823 while ((conn = list_first_entry_or_null(&local->idle_client_conns,
825 list_del_init(&conn->cache_link);
826 atomic_dec(&conn->active);
827 trace_rxrpc_client(conn, -1, rxrpc_client_discard);
828 rxrpc_unbundle_conn(conn);
829 rxrpc_put_connection(conn, rxrpc_conn_put_local_dead);