Lines Matching refs:call
45 static void rxrpc_set_keepalive(struct rxrpc_call *call) in rxrpc_set_keepalive() argument
47 unsigned long now = jiffies, keepalive_at = call->next_rx_timo / 6; in rxrpc_set_keepalive()
50 WRITE_ONCE(call->keepalive_at, keepalive_at); in rxrpc_set_keepalive()
51 rxrpc_reduce_call_timer(call, keepalive_at, now, in rxrpc_set_keepalive()
59 struct rxrpc_call *call, in rxrpc_fill_out_ack() argument
72 serial = call->ackr_serial; in rxrpc_fill_out_ack()
73 hard_ack = READ_ONCE(call->rx_hard_ack); in rxrpc_fill_out_ack()
74 top = smp_load_acquire(&call->rx_top); in rxrpc_fill_out_ack()
79 pkt->ack.maxSkew = htons(call->ackr_skew); in rxrpc_fill_out_ack()
81 pkt->ack.previousPacket = htonl(call->ackr_prev_seq); in rxrpc_fill_out_ack()
93 if (call->rxtx_buffer[ix]) in rxrpc_fill_out_ack()
103 jmax = (call->nr_jumbo_bad > 3) ? 1 : rxrpc_rx_jumbo_max; in rxrpc_fill_out_ack()
106 pkt->ackinfo.rwind = htonl(call->rx_winsize); in rxrpc_fill_out_ack()
118 int rxrpc_send_ack_packet(struct rxrpc_call *call, bool ping, in rxrpc_send_ack_packet() argument
131 spin_lock_bh(&call->lock); in rxrpc_send_ack_packet()
132 if (call->conn) in rxrpc_send_ack_packet()
133 conn = rxrpc_get_connection_maybe(call->conn); in rxrpc_send_ack_packet()
134 spin_unlock_bh(&call->lock); in rxrpc_send_ack_packet()
144 msg.msg_name = &call->peer->srx.transport; in rxrpc_send_ack_packet()
145 msg.msg_namelen = call->peer->srx.transport_len; in rxrpc_send_ack_packet()
151 pkt->whdr.cid = htonl(call->cid); in rxrpc_send_ack_packet()
152 pkt->whdr.callNumber = htonl(call->call_id); in rxrpc_send_ack_packet()
157 pkt->whdr.securityIndex = call->security_ix; in rxrpc_send_ack_packet()
159 pkt->whdr.serviceId = htons(call->service_id); in rxrpc_send_ack_packet()
161 spin_lock_bh(&call->lock); in rxrpc_send_ack_packet()
165 reason = call->ackr_reason; in rxrpc_send_ack_packet()
166 if (!call->ackr_reason) { in rxrpc_send_ack_packet()
167 spin_unlock_bh(&call->lock); in rxrpc_send_ack_packet()
171 call->ackr_reason = 0; in rxrpc_send_ack_packet()
173 n = rxrpc_fill_out_ack(conn, call, pkt, &hard_ack, &top, reason); in rxrpc_send_ack_packet()
175 spin_unlock_bh(&call->lock); in rxrpc_send_ack_packet()
185 trace_rxrpc_tx_ack(call->debug_id, serial, in rxrpc_send_ack_packet()
193 call->ping_serial = serial; in rxrpc_send_ack_packet()
200 call->ping_time = ktime_get_real(); in rxrpc_send_ack_packet()
201 set_bit(RXRPC_CALL_PINGING, &call->flags); in rxrpc_send_ack_packet()
202 trace_rxrpc_rtt_tx(call, rxrpc_rtt_tx_ping, serial); in rxrpc_send_ack_packet()
208 trace_rxrpc_tx_fail(call->debug_id, serial, ret, in rxrpc_send_ack_packet()
211 trace_rxrpc_tx_packet(call->debug_id, &pkt->whdr, in rxrpc_send_ack_packet()
214 if (call->state < RXRPC_CALL_COMPLETE) { in rxrpc_send_ack_packet()
217 clear_bit(RXRPC_CALL_PINGING, &call->flags); in rxrpc_send_ack_packet()
218 rxrpc_propose_ACK(call, pkt->ack.reason, in rxrpc_send_ack_packet()
224 spin_lock_bh(&call->lock); in rxrpc_send_ack_packet()
225 if (after(hard_ack, call->ackr_consumed)) in rxrpc_send_ack_packet()
226 call->ackr_consumed = hard_ack; in rxrpc_send_ack_packet()
227 if (after(top, call->ackr_seen)) in rxrpc_send_ack_packet()
228 call->ackr_seen = top; in rxrpc_send_ack_packet()
229 spin_unlock_bh(&call->lock); in rxrpc_send_ack_packet()
232 rxrpc_set_keepalive(call); in rxrpc_send_ack_packet()
244 int rxrpc_send_abort_packet(struct rxrpc_call *call) in rxrpc_send_abort_packet() argument
259 if (rxrpc_is_client_call(call) && in rxrpc_send_abort_packet()
260 test_bit(RXRPC_CALL_TX_LAST, &call->flags)) in rxrpc_send_abort_packet()
263 spin_lock_bh(&call->lock); in rxrpc_send_abort_packet()
264 if (call->conn) in rxrpc_send_abort_packet()
265 conn = rxrpc_get_connection_maybe(call->conn); in rxrpc_send_abort_packet()
266 spin_unlock_bh(&call->lock); in rxrpc_send_abort_packet()
270 msg.msg_name = &call->peer->srx.transport; in rxrpc_send_abort_packet()
271 msg.msg_namelen = call->peer->srx.transport_len; in rxrpc_send_abort_packet()
277 pkt.whdr.cid = htonl(call->cid); in rxrpc_send_abort_packet()
278 pkt.whdr.callNumber = htonl(call->call_id); in rxrpc_send_abort_packet()
283 pkt.whdr.securityIndex = call->security_ix; in rxrpc_send_abort_packet()
285 pkt.whdr.serviceId = htons(call->service_id); in rxrpc_send_abort_packet()
286 pkt.abort_code = htonl(call->abort_code); in rxrpc_send_abort_packet()
298 trace_rxrpc_tx_fail(call->debug_id, serial, ret, in rxrpc_send_abort_packet()
301 trace_rxrpc_tx_packet(call->debug_id, &pkt.whdr, in rxrpc_send_abort_packet()
312 int rxrpc_send_data_packet(struct rxrpc_call *call, struct sk_buff *skb, in rxrpc_send_data_packet() argument
315 struct rxrpc_connection *conn = call->conn; in rxrpc_send_data_packet()
331 whdr.cid = htonl(call->cid); in rxrpc_send_data_packet()
332 whdr.callNumber = htonl(call->call_id); in rxrpc_send_data_packet()
338 whdr.securityIndex = call->security_ix; in rxrpc_send_data_packet()
340 whdr.serviceId = htons(call->service_id); in rxrpc_send_data_packet()
352 msg.msg_name = &call->peer->srx.transport; in rxrpc_send_data_packet()
353 msg.msg_namelen = call->peer->srx.transport_len; in rxrpc_send_data_packet()
368 (test_and_clear_bit(RXRPC_CALL_EV_ACK_LOST, &call->events) || in rxrpc_send_data_packet()
370 call->cong_mode == RXRPC_CALL_SLOW_START || in rxrpc_send_data_packet()
371 (call->peer->rtt_usage < 3 && sp->hdr.seq & 1) || in rxrpc_send_data_packet()
372 ktime_before(ktime_add_ms(call->peer->rtt_last_req, 1000), in rxrpc_send_data_packet()
389 if (iov[1].iov_len >= call->peer->maxdata) in rxrpc_send_data_packet()
409 trace_rxrpc_tx_fail(call->debug_id, serial, ret, in rxrpc_send_data_packet()
412 trace_rxrpc_tx_packet(call->debug_id, &whdr, in rxrpc_send_data_packet()
418 trace_rxrpc_tx_data(call, sp->hdr.seq, serial, whdr.flags, in rxrpc_send_data_packet()
422 call->peer->rtt_last_req = skb->tstamp; in rxrpc_send_data_packet()
423 trace_rxrpc_rtt_tx(call, rxrpc_rtt_tx_data, serial); in rxrpc_send_data_packet()
424 if (call->peer->rtt_usage > 1) { in rxrpc_send_data_packet()
427 ack_lost_at = nsecs_to_jiffies(2 * call->peer->rtt); in rxrpc_send_data_packet()
432 WRITE_ONCE(call->ack_lost_at, ack_lost_at); in rxrpc_send_data_packet()
433 rxrpc_reduce_call_timer(call, ack_lost_at, nowj, in rxrpc_send_data_packet()
440 &call->flags)) { in rxrpc_send_data_packet()
443 expect_rx_by = nowj + call->next_rx_timo; in rxrpc_send_data_packet()
444 WRITE_ONCE(call->expect_rx_by, expect_rx_by); in rxrpc_send_data_packet()
445 rxrpc_reduce_call_timer(call, expect_rx_by, nowj, in rxrpc_send_data_packet()
450 rxrpc_set_keepalive(call); in rxrpc_send_data_packet()
452 _leave(" = %d [%u]", ret, call->peer->maxdata); in rxrpc_send_data_packet()
504 trace_rxrpc_tx_fail(call->debug_id, serial, ret, in rxrpc_send_data_packet()
507 trace_rxrpc_tx_packet(call->debug_id, &whdr, in rxrpc_send_data_packet()