Lines Matching full:call

8  * call so as to handle retransmitted DATA packets in case the server didn't
15 * or a call ID counter overflows.
340 * Create or find a client bundle to use for a call.
342 * If we return with a connection, the call will be on its waiting list. It's
343 * left to the caller to assign a channel and wake up the call.
346 struct rxrpc_call *call, in rxrpc_prep_call() argument
353 _enter("{%d,%lx},", call->debug_id, call->user_call_ID); in rxrpc_prep_call()
359 call->cong_cwnd = cp->peer->cong_cwnd; in rxrpc_prep_call()
360 if (call->cong_cwnd >= call->cong_ssthresh) in rxrpc_prep_call()
361 call->cong_mode = RXRPC_CALL_CONGEST_AVOIDANCE; in rxrpc_prep_call()
363 call->cong_mode = RXRPC_CALL_SLOW_START; in rxrpc_prep_call()
365 __set_bit(RXRPC_CALL_UPGRADE, &call->flags); in rxrpc_prep_call()
372 /* Get this call queued. Someone else may activate it whilst we're in rxrpc_prep_call()
376 list_add_tail(&call->chan_wait_link, &bundle->waiting_calls); in rxrpc_prep_call()
459 struct rxrpc_call *call; in rxrpc_maybe_add_conn() local
473 call = list_first_entry(&bundle->waiting_calls, in rxrpc_maybe_add_conn()
475 if (test_bit(RXRPC_CALL_UPGRADE, &call->flags)) in rxrpc_maybe_add_conn()
497 * Assign a channel to the call at the front of the queue and wake the call up.
506 struct rxrpc_call *call = list_entry(bundle->waiting_calls.next, in rxrpc_activate_one_channel() local
514 /* Cancel the final ACK on the previous call if it hasn't been sent yet in rxrpc_activate_one_channel()
520 rxrpc_see_call(call); in rxrpc_activate_one_channel()
521 list_del_init(&call->chan_wait_link); in rxrpc_activate_one_channel()
522 call->peer = rxrpc_get_peer(conn->params.peer); in rxrpc_activate_one_channel()
523 call->conn = rxrpc_get_connection(conn); in rxrpc_activate_one_channel()
524 call->cid = conn->proto.cid | channel; in rxrpc_activate_one_channel()
525 call->call_id = call_id; in rxrpc_activate_one_channel()
526 call->security = conn->security; in rxrpc_activate_one_channel()
527 call->security_ix = conn->security_ix; in rxrpc_activate_one_channel()
528 call->service_id = conn->service_id; in rxrpc_activate_one_channel()
530 trace_rxrpc_connect_call(call); in rxrpc_activate_one_channel()
531 _net("CONNECT call %08x:%08x as call %d on conn %d", in rxrpc_activate_one_channel()
532 call->cid, call->call_id, call->debug_id, conn->debug_id); in rxrpc_activate_one_channel()
534 write_lock_bh(&call->state_lock); in rxrpc_activate_one_channel()
535 call->state = RXRPC_CALL_CLIENT_SEND_REQUEST; in rxrpc_activate_one_channel()
536 write_unlock_bh(&call->state_lock); in rxrpc_activate_one_channel()
543 * confirm it until the call is about to be exposed. in rxrpc_activate_one_channel()
546 * at the call ID through a connection channel. in rxrpc_activate_one_channel()
551 chan->call_debug_id = call->debug_id; in rxrpc_activate_one_channel()
552 rcu_assign_pointer(chan->call, call); in rxrpc_activate_one_channel()
553 wake_up(&call->waitq); in rxrpc_activate_one_channel()
633 * Wait for a callNumber and a channel to be granted to a call.
636 struct rxrpc_call *call, gfp_t gfp) in rxrpc_wait_for_channel() argument
641 _enter("%d", call->debug_id); in rxrpc_wait_for_channel()
650 add_wait_queue_exclusive(&call->waitq, &myself); in rxrpc_wait_for_channel()
658 switch (call->interruptibility) { in rxrpc_wait_for_channel()
668 if (READ_ONCE(call->state) != RXRPC_CALL_CLIENT_AWAIT_CONN) in rxrpc_wait_for_channel()
670 if ((call->interruptibility == RXRPC_INTERRUPTIBLE || in rxrpc_wait_for_channel()
671 call->interruptibility == RXRPC_PREINTERRUPTIBLE) && in rxrpc_wait_for_channel()
678 remove_wait_queue(&call->waitq, &myself); in rxrpc_wait_for_channel()
687 * find a connection for a call
691 struct rxrpc_call *call, in rxrpc_connect_call() argument
700 _enter("{%d,%lx},", call->debug_id, call->user_call_ID); in rxrpc_connect_call()
704 bundle = rxrpc_prep_call(rx, call, cp, srx, gfp); in rxrpc_connect_call()
710 if (call->state == RXRPC_CALL_CLIENT_AWAIT_CONN) { in rxrpc_connect_call()
711 ret = rxrpc_wait_for_channel(bundle, call, gfp); in rxrpc_connect_call()
728 list_del_init(&call->chan_wait_link); in rxrpc_connect_call()
731 if (call->state != RXRPC_CALL_CLIENT_AWAIT_CONN) { in rxrpc_connect_call()
736 trace_rxrpc_client(call->conn, ret, rxrpc_client_chan_wait_failed); in rxrpc_connect_call()
737 rxrpc_set_call_completion(call, RXRPC_CALL_LOCAL_ERROR, 0, ret); in rxrpc_connect_call()
738 rxrpc_disconnect_client_call(bundle, call); in rxrpc_connect_call()
743 * Note that a call, and thus a connection, is about to be exposed to the
746 void rxrpc_expose_client_call(struct rxrpc_call *call) in rxrpc_expose_client_call() argument
748 unsigned int channel = call->cid & RXRPC_CHANNELMASK; in rxrpc_expose_client_call()
749 struct rxrpc_connection *conn = call->conn; in rxrpc_expose_client_call()
752 if (!test_and_set_bit(RXRPC_CALL_EXPOSED, &call->flags)) { in rxrpc_expose_client_call()
753 /* Mark the call ID as being used. If the callNumber counter in rxrpc_expose_client_call()
780 * Disconnect a client call.
782 void rxrpc_disconnect_client_call(struct rxrpc_bundle *bundle, struct rxrpc_call *call) in rxrpc_disconnect_client_call() argument
791 _enter("c=%x", call->debug_id); in rxrpc_disconnect_client_call()
794 set_bit(RXRPC_CALL_DISCONNECTED, &call->flags); in rxrpc_disconnect_client_call()
799 conn = call->conn; in rxrpc_disconnect_client_call()
801 _debug("call is waiting"); in rxrpc_disconnect_client_call()
802 ASSERTCMP(call->call_id, ==, 0); in rxrpc_disconnect_client_call()
803 ASSERT(!test_bit(RXRPC_CALL_EXPOSED, &call->flags)); in rxrpc_disconnect_client_call()
804 list_del_init(&call->chan_wait_link); in rxrpc_disconnect_client_call()
808 cid = call->cid; in rxrpc_disconnect_client_call()
813 if (rcu_access_pointer(chan->call) != call) { in rxrpc_disconnect_client_call()
820 /* If a client call was exposed to the world, we save the result for in rxrpc_disconnect_client_call()
823 * We use a barrier here so that the call number and abort code can be in rxrpc_disconnect_client_call()
827 * terminal retransmission without requiring access to the call. in rxrpc_disconnect_client_call()
829 if (test_bit(RXRPC_CALL_EXPOSED, &call->flags)) { in rxrpc_disconnect_client_call()
830 _debug("exposed %u,%u", call->call_id, call->abort_code); in rxrpc_disconnect_client_call()
831 __rxrpc_disconnect_call(conn, call); in rxrpc_disconnect_client_call()
842 /* See if we can pass the channel directly to another call. */ in rxrpc_disconnect_client_call()
850 * can be skipped if we find a follow-on call. The first DATA packet in rxrpc_disconnect_client_call()
851 * of the follow on call will implicitly ACK this call. in rxrpc_disconnect_client_call()
853 if (call->completion == RXRPC_CALL_SUCCEEDED && in rxrpc_disconnect_client_call()
854 test_bit(RXRPC_CALL_EXPOSED, &call->flags)) { in rxrpc_disconnect_client_call()
864 rcu_assign_pointer(chan->call, NULL); in rxrpc_disconnect_client_call()