Lines Matching refs:call
48 static void rxrpc_tx_backoff(struct rxrpc_call *call, int ret)
51 u16 tx_backoff = READ_ONCE(call->tx_backoff);
54 WRITE_ONCE(call->tx_backoff, tx_backoff + 1);
56 WRITE_ONCE(call->tx_backoff, 0);
62 * lets the far side know we're still interested in this call and helps keep
68 static void rxrpc_set_keepalive(struct rxrpc_call *call)
70 unsigned long now = jiffies, keepalive_at = call->next_rx_timo / 6;
73 WRITE_ONCE(call->keepalive_at, keepalive_at);
74 rxrpc_reduce_call_timer(call, keepalive_at, now,
82 struct rxrpc_call *call,
93 call->ackr_nr_unacked = 0;
94 atomic_set(&call->ackr_nr_consumed, 0);
95 rxrpc_inc_stat(call->rxnet, stat_tx_ack_fill);
96 clear_bit(RXRPC_CALL_RX_IS_IDLE, &call->flags);
98 window = call->ackr_window;
99 wtop = call->ackr_wtop;
100 sack = call->ackr_sack_base % RXRPC_SACK_SIZE;
109 memcpy(txb->acks, call->ackr_sack_table + sack, txb->ack.nAcks);
111 memcpy(txb->acks, call->ackr_sack_table + sack, wrap);
112 memcpy(txb->acks + wrap, call->ackr_sack_table,
126 qsize = (window - 1) - call->rx_consumed;
127 rsize = max_t(int, call->rx_winsize - qsize, 0);
144 static int rxrpc_begin_rtt_probe(struct rxrpc_call *call, rxrpc_serial_t serial,
147 unsigned long avail = call->rtt_avail;
154 if (!test_and_clear_bit(rtt_slot, &call->rtt_avail))
157 call->rtt_serial[rtt_slot] = serial;
158 call->rtt_sent_at[rtt_slot] = ktime_get_real();
160 set_bit(rtt_slot + RXRPC_CALL_RTT_PEND_SHIFT, &call->rtt_avail);
162 trace_rxrpc_rtt_tx(call, why, rtt_slot, serial);
166 trace_rxrpc_rtt_tx(call, rxrpc_rtt_tx_no_slot, rtt_slot, serial);
173 static void rxrpc_cancel_rtt_probe(struct rxrpc_call *call,
177 clear_bit(rtt_slot + RXRPC_CALL_RTT_PEND_SHIFT, &call->rtt_avail);
179 set_bit(rtt_slot, &call->rtt_avail);
180 trace_rxrpc_rtt_tx(call, rxrpc_rtt_tx_cancel, rtt_slot, serial);
187 int rxrpc_send_ack_packet(struct rxrpc_call *call, struct rxrpc_txbuf *txb)
197 if (test_bit(RXRPC_CALL_DISCONNECTED, &call->flags))
200 conn = call->conn;
202 msg.msg_name = &call->peer->srx.transport;
203 msg.msg_namelen = call->peer->srx.transport_len;
211 n = rxrpc_fill_out_ack(conn, call, txb, &rwind);
221 trace_rxrpc_tx_ack(call->debug_id, serial,
227 rtt_slot = rxrpc_begin_rtt_probe(call, serial, rxrpc_rtt_tx_ping);
229 rxrpc_inc_stat(call->rxnet, stat_tx_ack_send);
232 txb->ack.previousPacket = htonl(call->rx_highest_seq);
236 call->peer->last_tx_at = ktime_get_seconds();
238 trace_rxrpc_tx_fail(call->debug_id, serial, ret,
241 trace_rxrpc_tx_packet(call->debug_id, &txb->wire,
244 call->peer->rtt_last_req = ktime_get_real();
246 rxrpc_tx_backoff(call, ret);
248 if (!__rxrpc_call_is_complete(call)) {
250 rxrpc_cancel_rtt_probe(call, serial, rtt_slot);
251 rxrpc_set_keepalive(call);
258 * Send an ABORT call packet.
260 int rxrpc_send_abort_packet(struct rxrpc_call *call)
269 /* Don't bother sending aborts for a client call once the server has
272 * the reply, it's not worth it if we can send a new call on the same
273 * channel instead, thereby closing off this call.
275 if (rxrpc_is_client_call(call) &&
276 test_bit(RXRPC_CALL_TX_ALL_ACKED, &call->flags))
279 if (test_bit(RXRPC_CALL_DISCONNECTED, &call->flags))
282 conn = call->conn;
284 msg.msg_name = &call->peer->srx.transport;
285 msg.msg_namelen = call->peer->srx.transport_len;
291 pkt.whdr.cid = htonl(call->cid);
292 pkt.whdr.callNumber = htonl(call->call_id);
297 pkt.whdr.securityIndex = call->security_ix;
299 pkt.whdr.serviceId = htons(call->dest_srx.srx_service);
300 pkt.abort_code = htonl(call->abort_code);
312 trace_rxrpc_tx_fail(call->debug_id, serial, ret,
315 trace_rxrpc_tx_packet(call->debug_id, &pkt.whdr,
317 rxrpc_tx_backoff(call, ret);
324 int rxrpc_send_data_packet(struct rxrpc_call *call, struct rxrpc_txbuf *txb)
327 struct rxrpc_connection *conn = call->conn;
349 msg.msg_name = &call->peer->srx.transport;
350 msg.msg_namelen = call->peer->srx.transport_len;
359 * service call, lest OpenAFS incorrectly send us an ACK with some
366 else if (test_and_clear_bit(RXRPC_CALL_EV_ACK_LOST, &call->events))
370 else if (call->cong_mode == RXRPC_CALL_SLOW_START && call->cong_cwnd <= 2)
372 else if (call->tx_winsize <= 2)
374 else if (call->peer->rtt_count < 3 && txb->seq & 1)
376 else if (ktime_before(ktime_add_ms(call->peer->rtt_last_req, 1000), ktime_get_real()))
381 rxrpc_inc_stat(call->rxnet, stat_why_req_ack[why]);
382 trace_rxrpc_req_ack(call->debug_id, txb->seq, why);
391 trace_rxrpc_tx_data(call, txb->seq, serial,
399 trace_rxrpc_tx_data(call, txb->seq, serial, txb->wire.flags,
409 cmpxchg(&call->tx_transmitted, txb->seq - 1, txb->seq);
413 if (txb->len >= call->peer->maxdata)
418 rtt_slot = rxrpc_begin_rtt_probe(call, serial, rxrpc_rtt_tx_data);
426 rxrpc_inc_stat(call->rxnet, stat_tx_data_send);
431 rxrpc_inc_stat(call->rxnet, stat_tx_data_send_fail);
432 rxrpc_cancel_rtt_probe(call, serial, rtt_slot);
433 trace_rxrpc_tx_fail(call->debug_id, serial, ret,
436 trace_rxrpc_tx_packet(call->debug_id, &txb->wire,
440 rxrpc_tx_backoff(call, ret);
446 call->tx_last_sent = txb->last_sent;
448 call->peer->rtt_last_req = txb->last_sent;
449 if (call->peer->rtt_count > 1) {
452 ack_lost_at = rxrpc_get_rto_backoff(call->peer, false);
454 WRITE_ONCE(call->ack_lost_at, ack_lost_at);
455 rxrpc_reduce_call_timer(call, ack_lost_at, nowj,
462 &call->flags)) {
465 expect_rx_by = nowj + call->next_rx_timo;
466 WRITE_ONCE(call->expect_rx_by, expect_rx_by);
467 rxrpc_reduce_call_timer(call, expect_rx_by, nowj,
471 rxrpc_set_keepalive(call);
473 /* Cancel the call if the initial transmission fails,
478 if (!test_and_set_bit(RXRPC_CALL_BEGAN_RX_TIMER, &call->flags))
479 rxrpc_set_call_completion(call, RXRPC_CALL_LOCAL_ERROR,
483 _leave(" = %d [%u]", ret, call->peer->maxdata);
492 rtt_slot = rxrpc_begin_rtt_probe(call, serial, rxrpc_rtt_tx_data);
498 rxrpc_inc_stat(call->rxnet, stat_tx_data_send_frag);
510 rxrpc_inc_stat(call->rxnet, stat_tx_data_send_fail);
511 rxrpc_cancel_rtt_probe(call, serial, rtt_slot);
512 trace_rxrpc_tx_fail(call->debug_id, serial, ret,
515 trace_rxrpc_tx_packet(call->debug_id, &txb->wire,
518 rxrpc_tx_backoff(call, ret);
698 static inline void rxrpc_instant_resend(struct rxrpc_call *call,
701 if (!__rxrpc_call_is_complete(call))
708 void rxrpc_transmit_one(struct rxrpc_call *call, struct rxrpc_txbuf *txb)
712 ret = rxrpc_send_data_packet(call, txb);
718 rxrpc_set_call_completion(call, RXRPC_CALL_LOCAL_ERROR,
723 rxrpc_instant_resend(call, txb);
727 unsigned long resend_at = now + call->peer->rto_j;
729 WRITE_ONCE(call->resend_at, resend_at);
730 rxrpc_reduce_call_timer(call, resend_at, now,