Lines Matching full:call

8  * call so as to handle retransmitted DATA packets in case the server didn't
25 * (3) ACTIVE - The connection has at least one call in progress upon it, it
34 * (4) UPGRADE - As for ACTIVE, but only one call may be in progress and is
57 * This allows us to move terminal call state retransmission to the
58 * connection and to discard the call immediately we think it is done
63 * or a call ID counter overflows.
270 * Create or find a client connection to use for a call.
272 * If we return with a connection, the call will be on its waiting list. It's
273 * left to the caller to assign a channel and wake up the call.
276 struct rxrpc_call *call, in rxrpc_get_client_conn() argument
287 _enter("{%d,%lx},", call->debug_id, call->user_call_ID); in rxrpc_get_client_conn()
293 call->cong_cwnd = cp->peer->cong_cwnd; in rxrpc_get_client_conn()
294 if (call->cong_cwnd >= call->cong_ssthresh) in rxrpc_get_client_conn()
295 call->cong_mode = RXRPC_CALL_CONGEST_AVOIDANCE; in rxrpc_get_client_conn()
297 call->cong_mode = RXRPC_CALL_SLOW_START; in rxrpc_get_client_conn()
346 /* Add the call to the new connection's waiting list in case we're in rxrpc_get_client_conn()
352 list_add(&call->chan_wait_link, &candidate->waiting_calls); in rxrpc_get_client_conn()
355 call->conn = candidate; in rxrpc_get_client_conn()
356 call->security = candidate->security; in rxrpc_get_client_conn()
357 call->security_ix = candidate->security_ix; in rxrpc_get_client_conn()
358 call->service_id = candidate->service_id; in rxrpc_get_client_conn()
407 call->conn = candidate; in rxrpc_get_client_conn()
408 call->security = candidate->security; in rxrpc_get_client_conn()
409 call->security_ix = candidate->security_ix; in rxrpc_get_client_conn()
410 call->service_id = candidate->service_id; in rxrpc_get_client_conn()
430 call->conn = conn; in rxrpc_get_client_conn()
431 call->security = conn->security; in rxrpc_get_client_conn()
432 call->security_ix = conn->security_ix; in rxrpc_get_client_conn()
433 call->service_id = conn->service_id; in rxrpc_get_client_conn()
434 list_add_tail(&call->chan_wait_link, &conn->waiting_calls); in rxrpc_get_client_conn()
465 * Attempt to animate a connection for a new call.
474 * call.
539 rcu_assign_pointer(chan->call, NULL); in rxrpc_deactivate_one_channel()
544 * Assign a channel to the call at the front of the queue and wake the call up.
552 struct rxrpc_call *call = list_entry(conn->waiting_calls.next, in rxrpc_activate_one_channel() local
558 /* Cancel the final ACK on the previous call if it hasn't been sent yet in rxrpc_activate_one_channel()
563 write_lock_bh(&call->state_lock); in rxrpc_activate_one_channel()
564 call->state = RXRPC_CALL_CLIENT_SEND_REQUEST; in rxrpc_activate_one_channel()
565 write_unlock_bh(&call->state_lock); in rxrpc_activate_one_channel()
567 rxrpc_see_call(call); in rxrpc_activate_one_channel()
568 list_del_init(&call->chan_wait_link); in rxrpc_activate_one_channel()
570 call->peer = rxrpc_get_peer(conn->params.peer); in rxrpc_activate_one_channel()
571 call->cid = conn->proto.cid | channel; in rxrpc_activate_one_channel()
572 call->call_id = call_id; in rxrpc_activate_one_channel()
574 trace_rxrpc_connect_call(call); in rxrpc_activate_one_channel()
575 _net("CONNECT call %08x:%08x as call %d on conn %d", in rxrpc_activate_one_channel()
576 call->cid, call->call_id, call->debug_id, conn->debug_id); in rxrpc_activate_one_channel()
583 * confirm it until the call is about to be exposed. in rxrpc_activate_one_channel()
586 * at the call ID through a connection channel. in rxrpc_activate_one_channel()
590 chan->call_debug_id = call->debug_id; in rxrpc_activate_one_channel()
591 rcu_assign_pointer(chan->call, call); in rxrpc_activate_one_channel()
592 wake_up(&call->waitq); in rxrpc_activate_one_channel()
640 * Wait for a callNumber and a channel to be granted to a call.
642 static int rxrpc_wait_for_channel(struct rxrpc_call *call, gfp_t gfp) in rxrpc_wait_for_channel() argument
646 _enter("%d", call->debug_id); in rxrpc_wait_for_channel()
648 if (!call->call_id) { in rxrpc_wait_for_channel()
656 add_wait_queue_exclusive(&call->waitq, &myself); in rxrpc_wait_for_channel()
658 if (test_bit(RXRPC_CALL_IS_INTR, &call->flags)) in rxrpc_wait_for_channel()
662 if (call->call_id) in rxrpc_wait_for_channel()
664 if (test_bit(RXRPC_CALL_IS_INTR, &call->flags) && in rxrpc_wait_for_channel()
671 remove_wait_queue(&call->waitq, &myself); in rxrpc_wait_for_channel()
684 * find a connection for a call
688 struct rxrpc_call *call, in rxrpc_connect_call() argument
696 _enter("{%d,%lx},", call->debug_id, call->user_call_ID); in rxrpc_connect_call()
701 ret = rxrpc_get_client_conn(rx, call, cp, srx, gfp); in rxrpc_connect_call()
705 rxrpc_animate_client_conn(rxnet, call->conn); in rxrpc_connect_call()
706 rxrpc_activate_channels(call->conn); in rxrpc_connect_call()
708 ret = rxrpc_wait_for_channel(call, gfp); in rxrpc_connect_call()
710 trace_rxrpc_client(call->conn, ret, rxrpc_client_chan_wait_failed); in rxrpc_connect_call()
711 rxrpc_disconnect_client_call(call); in rxrpc_connect_call()
715 spin_lock_bh(&call->conn->params.peer->lock); in rxrpc_connect_call()
716 hlist_add_head_rcu(&call->error_link, in rxrpc_connect_call()
717 &call->conn->params.peer->error_targets); in rxrpc_connect_call()
718 spin_unlock_bh(&call->conn->params.peer->lock); in rxrpc_connect_call()
742 * Note that a call, and thus a connection, is about to be exposed to the
745 void rxrpc_expose_client_call(struct rxrpc_call *call) in rxrpc_expose_client_call() argument
747 unsigned int channel = call->cid & RXRPC_CHANNELMASK; in rxrpc_expose_client_call()
748 struct rxrpc_connection *conn = call->conn; in rxrpc_expose_client_call()
751 if (!test_and_set_bit(RXRPC_CALL_EXPOSED, &call->flags)) { in rxrpc_expose_client_call()
752 /* Mark the call ID as being used. If the callNumber counter in rxrpc_expose_client_call()
777 * Disconnect a client call.
779 void rxrpc_disconnect_client_call(struct rxrpc_call *call) in rxrpc_disconnect_client_call() argument
781 struct rxrpc_connection *conn = call->conn; in rxrpc_disconnect_client_call()
789 cid = call->cid; in rxrpc_disconnect_client_call()
795 call->conn = NULL; in rxrpc_disconnect_client_call()
801 if (!list_empty(&call->chan_wait_link)) { in rxrpc_disconnect_client_call()
802 _debug("call is waiting"); in rxrpc_disconnect_client_call()
803 ASSERTCMP(call->call_id, ==, 0); in rxrpc_disconnect_client_call()
804 ASSERT(!test_bit(RXRPC_CALL_EXPOSED, &call->flags)); in rxrpc_disconnect_client_call()
805 list_del_init(&call->chan_wait_link); in rxrpc_disconnect_client_call()
820 if (rcu_access_pointer(chan->call) != call) { in rxrpc_disconnect_client_call()
825 /* If a client call was exposed to the world, we save the result for in rxrpc_disconnect_client_call()
828 * We use a barrier here so that the call number and abort code can be in rxrpc_disconnect_client_call()
832 * terminal retransmission without requiring access to the call. in rxrpc_disconnect_client_call()
834 if (test_bit(RXRPC_CALL_EXPOSED, &call->flags)) { in rxrpc_disconnect_client_call()
835 _debug("exposed %u,%u", call->call_id, call->abort_code); in rxrpc_disconnect_client_call()
836 __rxrpc_disconnect_call(conn, call); in rxrpc_disconnect_client_call()
839 /* See if we can pass the channel directly to another call. */ in rxrpc_disconnect_client_call()
848 * can be skipped if we find a follow-on call. The first DATA packet in rxrpc_disconnect_client_call()
849 * of the follow on call will implicitly ACK this call. in rxrpc_disconnect_client_call()
851 if (call->completion == RXRPC_CALL_SUCCEEDED && in rxrpc_disconnect_client_call()
852 test_bit(RXRPC_CALL_EXPOSED, &call->flags)) { in rxrpc_disconnect_client_call()
981 * can't call rxrpc_put_connection() recursively. in rxrpc_put_one_client_conn()