• Home
  • Raw
  • Download

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.
350 * Create or find a client bundle to use for a call.
352 * If we return with a connection, the call will be on its waiting list. It's
353 * left to the caller to assign a channel and wake up the call.
356 struct rxrpc_call *call, in rxrpc_prep_call() argument
363 _enter("{%d,%lx},", call->debug_id, call->user_call_ID); in rxrpc_prep_call()
369 call->cong_cwnd = cp->peer->cong_cwnd; in rxrpc_prep_call()
370 if (call->cong_cwnd >= call->cong_ssthresh) in rxrpc_prep_call()
371 call->cong_mode = RXRPC_CALL_CONGEST_AVOIDANCE; in rxrpc_prep_call()
373 call->cong_mode = RXRPC_CALL_SLOW_START; in rxrpc_prep_call()
375 __set_bit(RXRPC_CALL_UPGRADE, &call->flags); in rxrpc_prep_call()
382 /* Get this call queued. Someone else may activate it whilst we're in rxrpc_prep_call()
386 list_add_tail(&call->chan_wait_link, &bundle->waiting_calls); in rxrpc_prep_call()
469 struct rxrpc_call *call; in rxrpc_maybe_add_conn() local
483 call = list_first_entry(&bundle->waiting_calls, in rxrpc_maybe_add_conn()
485 if (test_bit(RXRPC_CALL_UPGRADE, &call->flags)) in rxrpc_maybe_add_conn()
507 * Assign a channel to the call at the front of the queue and wake the call up.
516 struct rxrpc_call *call = list_entry(bundle->waiting_calls.next, in rxrpc_activate_one_channel() local
524 /* Cancel the final ACK on the previous call if it hasn't been sent yet in rxrpc_activate_one_channel()
530 rxrpc_see_call(call); in rxrpc_activate_one_channel()
531 list_del_init(&call->chan_wait_link); in rxrpc_activate_one_channel()
532 call->peer = rxrpc_get_peer(conn->params.peer); in rxrpc_activate_one_channel()
533 call->conn = rxrpc_get_connection(conn); in rxrpc_activate_one_channel()
534 call->cid = conn->proto.cid | channel; in rxrpc_activate_one_channel()
535 call->call_id = call_id; in rxrpc_activate_one_channel()
536 call->security = conn->security; in rxrpc_activate_one_channel()
537 call->security_ix = conn->security_ix; in rxrpc_activate_one_channel()
538 call->service_id = conn->service_id; in rxrpc_activate_one_channel()
540 trace_rxrpc_connect_call(call); in rxrpc_activate_one_channel()
541 _net("CONNECT call %08x:%08x as call %d on conn %d", in rxrpc_activate_one_channel()
542 call->cid, call->call_id, call->debug_id, conn->debug_id); in rxrpc_activate_one_channel()
544 write_lock_bh(&call->state_lock); in rxrpc_activate_one_channel()
545 call->state = RXRPC_CALL_CLIENT_SEND_REQUEST; in rxrpc_activate_one_channel()
546 write_unlock_bh(&call->state_lock); in rxrpc_activate_one_channel()
553 * confirm it until the call is about to be exposed. in rxrpc_activate_one_channel()
556 * at the call ID through a connection channel. in rxrpc_activate_one_channel()
561 chan->call_debug_id = call->debug_id; in rxrpc_activate_one_channel()
562 rcu_assign_pointer(chan->call, call); in rxrpc_activate_one_channel()
563 wake_up(&call->waitq); in rxrpc_activate_one_channel()
643 * Wait for a callNumber and a channel to be granted to a call.
646 struct rxrpc_call *call, gfp_t gfp) in rxrpc_wait_for_channel() argument
651 _enter("%d", call->debug_id); in rxrpc_wait_for_channel()
660 add_wait_queue_exclusive(&call->waitq, &myself); in rxrpc_wait_for_channel()
668 switch (call->interruptibility) { in rxrpc_wait_for_channel()
678 if (READ_ONCE(call->state) != RXRPC_CALL_CLIENT_AWAIT_CONN) in rxrpc_wait_for_channel()
680 if ((call->interruptibility == RXRPC_INTERRUPTIBLE || in rxrpc_wait_for_channel()
681 call->interruptibility == RXRPC_PREINTERRUPTIBLE) && in rxrpc_wait_for_channel()
688 remove_wait_queue(&call->waitq, &myself); in rxrpc_wait_for_channel()
697 * find a connection for a call
701 struct rxrpc_call *call, in rxrpc_connect_call() argument
710 _enter("{%d,%lx},", call->debug_id, call->user_call_ID); in rxrpc_connect_call()
714 bundle = rxrpc_prep_call(rx, call, cp, srx, gfp); in rxrpc_connect_call()
720 if (call->state == RXRPC_CALL_CLIENT_AWAIT_CONN) { in rxrpc_connect_call()
721 ret = rxrpc_wait_for_channel(bundle, call, gfp); in rxrpc_connect_call()
738 list_del_init(&call->chan_wait_link); in rxrpc_connect_call()
741 if (call->state != RXRPC_CALL_CLIENT_AWAIT_CONN) { in rxrpc_connect_call()
746 trace_rxrpc_client(call->conn, ret, rxrpc_client_chan_wait_failed); in rxrpc_connect_call()
747 rxrpc_set_call_completion(call, RXRPC_CALL_LOCAL_ERROR, 0, ret); in rxrpc_connect_call()
748 rxrpc_disconnect_client_call(bundle, call); in rxrpc_connect_call()
753 * Note that a call, and thus a connection, is about to be exposed to the
756 void rxrpc_expose_client_call(struct rxrpc_call *call) in rxrpc_expose_client_call() argument
758 unsigned int channel = call->cid & RXRPC_CHANNELMASK; in rxrpc_expose_client_call()
759 struct rxrpc_connection *conn = call->conn; in rxrpc_expose_client_call()
762 if (!test_and_set_bit(RXRPC_CALL_EXPOSED, &call->flags)) { in rxrpc_expose_client_call()
763 /* Mark the call ID as being used. If the callNumber counter in rxrpc_expose_client_call()
790 * Disconnect a client call.
792 void rxrpc_disconnect_client_call(struct rxrpc_bundle *bundle, struct rxrpc_call *call) in rxrpc_disconnect_client_call() argument
801 _enter("c=%x", call->debug_id); in rxrpc_disconnect_client_call()
804 set_bit(RXRPC_CALL_DISCONNECTED, &call->flags); in rxrpc_disconnect_client_call()
809 conn = call->conn; in rxrpc_disconnect_client_call()
811 _debug("call is waiting"); in rxrpc_disconnect_client_call()
812 ASSERTCMP(call->call_id, ==, 0); in rxrpc_disconnect_client_call()
813 ASSERT(!test_bit(RXRPC_CALL_EXPOSED, &call->flags)); in rxrpc_disconnect_client_call()
814 list_del_init(&call->chan_wait_link); in rxrpc_disconnect_client_call()
818 cid = call->cid; in rxrpc_disconnect_client_call()
823 if (rcu_access_pointer(chan->call) != call) { in rxrpc_disconnect_client_call()
830 /* If a client call was exposed to the world, we save the result for in rxrpc_disconnect_client_call()
833 * We use a barrier here so that the call number and abort code can be in rxrpc_disconnect_client_call()
837 * terminal retransmission without requiring access to the call. in rxrpc_disconnect_client_call()
839 if (test_bit(RXRPC_CALL_EXPOSED, &call->flags)) { in rxrpc_disconnect_client_call()
840 _debug("exposed %u,%u", call->call_id, call->abort_code); in rxrpc_disconnect_client_call()
841 __rxrpc_disconnect_call(conn, call); in rxrpc_disconnect_client_call()
852 /* See if we can pass the channel directly to another call. */ in rxrpc_disconnect_client_call()
860 * can be skipped if we find a follow-on call. The first DATA packet in rxrpc_disconnect_client_call()
861 * of the follow on call will implicitly ACK this call. in rxrpc_disconnect_client_call()
863 if (call->completion == RXRPC_CALL_SUCCEEDED && in rxrpc_disconnect_client_call()
864 test_bit(RXRPC_CALL_EXPOSED, &call->flags)) { in rxrpc_disconnect_client_call()
874 rcu_assign_pointer(chan->call, NULL); in rxrpc_disconnect_client_call()