Lines Matching full:call

2 /* incoming call handling
25 static void rxrpc_dummy_notify(struct sock *sk, struct rxrpc_call *call, in rxrpc_dummy_notify() argument
31 * Preallocate a single service call, connection and peer and, if possible,
41 struct rxrpc_call *call, *xcall; in rxrpc_service_prealloc_one() local
98 call = rxrpc_alloc_call(rx, gfp, debug_id); in rxrpc_service_prealloc_one()
99 if (!call) in rxrpc_service_prealloc_one()
101 call->flags |= (1 << RXRPC_CALL_IS_SERVICE); in rxrpc_service_prealloc_one()
102 rxrpc_set_call_state(call, RXRPC_CALL_SERVER_PREALLOC); in rxrpc_service_prealloc_one()
103 __set_bit(RXRPC_CALL_EV_INITIAL_PING, &call->events); in rxrpc_service_prealloc_one()
105 trace_rxrpc_call(call->debug_id, refcount_read(&call->ref), in rxrpc_service_prealloc_one()
124 call->user_call_ID = user_call_ID; in rxrpc_service_prealloc_one()
125 call->notify_rx = notify_rx; in rxrpc_service_prealloc_one()
127 rxrpc_get_call(call, rxrpc_call_get_kernel_service); in rxrpc_service_prealloc_one()
128 user_attach_call(call, user_call_ID); in rxrpc_service_prealloc_one()
131 rxrpc_get_call(call, rxrpc_call_get_userid); in rxrpc_service_prealloc_one()
132 rb_link_node(&call->sock_node, parent, pp); in rxrpc_service_prealloc_one()
133 rb_insert_color(&call->sock_node, &rx->calls); in rxrpc_service_prealloc_one()
134 set_bit(RXRPC_CALL_HAS_USERID, &call->flags); in rxrpc_service_prealloc_one()
136 list_add(&call->sock_link, &rx->sock_calls); in rxrpc_service_prealloc_one()
140 rxnet = call->rxnet; in rxrpc_service_prealloc_one()
142 list_add_tail_rcu(&call->link, &rxnet->calls); in rxrpc_service_prealloc_one()
145 b->call_backlog[call_head] = call; in rxrpc_service_prealloc_one()
147 _leave(" = 0 [%d -> %lx]", call->debug_id, user_call_ID); in rxrpc_service_prealloc_one()
152 rxrpc_cleanup_call(call); in rxrpc_service_prealloc_one()
220 struct rxrpc_call *call = b->call_backlog[tail]; in rxrpc_discard_prealloc() local
221 rcu_assign_pointer(call->socket, rx); in rxrpc_discard_prealloc()
223 _debug("discard %lx", call->user_call_ID); in rxrpc_discard_prealloc()
224 rx->discard_new_call(call, call->user_call_ID); in rxrpc_discard_prealloc()
225 if (call->notify_rx) in rxrpc_discard_prealloc()
226 call->notify_rx = rxrpc_dummy_notify; in rxrpc_discard_prealloc()
227 rxrpc_put_call(call, rxrpc_call_put_kernel); in rxrpc_discard_prealloc()
229 rxrpc_call_completed(call); in rxrpc_discard_prealloc()
230 rxrpc_release_call(rx, call); in rxrpc_discard_prealloc()
231 rxrpc_put_call(call, rxrpc_call_put_discard_prealloc); in rxrpc_discard_prealloc()
239 * Allocate a new incoming call from the prealloc pool, along with a connection
251 struct rxrpc_call *call; in rxrpc_alloc_incoming_call() local
300 /* And now we can allocate and set up a new call */ in rxrpc_alloc_incoming_call()
301 call = b->call_backlog[call_tail]; in rxrpc_alloc_incoming_call()
306 rxrpc_see_call(call, rxrpc_call_see_accept); in rxrpc_alloc_incoming_call()
307 call->local = rxrpc_get_local(conn->local, rxrpc_local_get_call); in rxrpc_alloc_incoming_call()
308 call->conn = conn; in rxrpc_alloc_incoming_call()
309 call->security = conn->security; in rxrpc_alloc_incoming_call()
310 call->security_ix = conn->security_ix; in rxrpc_alloc_incoming_call()
311 call->peer = rxrpc_get_peer(conn->peer, rxrpc_peer_get_accept); in rxrpc_alloc_incoming_call()
312 call->dest_srx = peer->srx; in rxrpc_alloc_incoming_call()
313 call->cong_ssthresh = call->peer->cong_ssthresh; in rxrpc_alloc_incoming_call()
314 call->tx_last_sent = ktime_get_real(); in rxrpc_alloc_incoming_call()
315 return call; in rxrpc_alloc_incoming_call()
319 * Set up a new incoming call. Called from the I/O thread.
321 * If this is for a kernel service, when we allocate the call, it will have
337 struct rxrpc_call *call = NULL; in rxrpc_new_incoming_call() local
342 /* Don't set up a call for anything other than a DATA packet. */ in rxrpc_new_incoming_call()
349 * begin a call are explicitly rejected and the rest are just in rxrpc_new_incoming_call()
376 call = rxrpc_alloc_incoming_call(rx, local, peer, conn, sec, peer_srx, in rxrpc_new_incoming_call()
378 if (!call) { in rxrpc_new_incoming_call()
383 trace_rxrpc_receive(call, rxrpc_receive_incoming, in rxrpc_new_incoming_call()
386 /* Make the call live. */ in rxrpc_new_incoming_call()
387 rxrpc_incoming_call(rx, call, skb); in rxrpc_new_incoming_call()
388 conn = call->conn; in rxrpc_new_incoming_call()
391 rx->notify_new_call(&rx->sk, call, call->user_call_ID); in rxrpc_new_incoming_call()
396 set_bit(RXRPC_CONN_EV_CHALLENGE, &call->conn->events); in rxrpc_new_incoming_call()
397 rxrpc_queue_conn(call->conn, rxrpc_conn_queue_challenge); in rxrpc_new_incoming_call()
404 if (hlist_unhashed(&call->error_link)) { in rxrpc_new_incoming_call()
405 spin_lock(&call->peer->lock); in rxrpc_new_incoming_call()
406 hlist_add_head(&call->error_link, &call->peer->error_targets); in rxrpc_new_incoming_call()
407 spin_unlock(&call->peer->lock); in rxrpc_new_incoming_call()
410 _leave(" = %p{%d}", call, call->debug_id); in rxrpc_new_incoming_call()
411 rxrpc_input_call_event(call, skb); in rxrpc_new_incoming_call()
412 rxrpc_put_call(call, rxrpc_call_put_input); in rxrpc_new_incoming_call()
434 * Charge up socket with preallocated calls, attaching user call IDs.
451 * @notify_rx: Event notification function for the call
452 * @user_attach_call: Func to attach call to user_call_ID
453 * @user_call_ID: The tag to attach to the preallocated call
459 * The user is given a ref to hold on the call.
461 * Note that the call may be come connected before this function returns.