Lines Matching full:txb
78 struct rxrpc_txbuf *txb, in rxrpc_fill_out_ack() argument
82 struct rxrpc_wire_header *whdr = txb->kvec[0].iov_base; in rxrpc_fill_out_ack()
83 struct rxrpc_acktrailer *trailer = txb->kvec[2].iov_base + 3; in rxrpc_fill_out_ack()
89 u8 *filler = txb->kvec[2].iov_base; in rxrpc_fill_out_ack()
90 u8 *sackp = txb->kvec[1].iov_base; in rxrpc_fill_out_ack()
100 txb->flags |= RXRPC_SLOW_START_OK; in rxrpc_fill_out_ack()
113 txb->flags |= RXRPC_REQUEST_ACK; in rxrpc_fill_out_ack()
116 txb->len += ack->nAcks; in rxrpc_fill_out_ack()
117 txb->kvec[1].iov_base = sackp; in rxrpc_fill_out_ack()
118 txb->kvec[1].iov_len = ack->nAcks; in rxrpc_fill_out_ack()
140 txb->ack_rwind = rsize; in rxrpc_fill_out_ack()
178 static void rxrpc_send_ack_packet(struct rxrpc_call *call, struct rxrpc_txbuf *txb) in rxrpc_send_ack_packet() argument
180 struct rxrpc_wire_header *whdr = txb->kvec[0].iov_base; in rxrpc_send_ack_packet()
198 whdr->flags = txb->flags & RXRPC_TXBUF_WIRE_FLAGS; in rxrpc_send_ack_packet()
200 txb->serial = rxrpc_get_next_serial(conn); in rxrpc_send_ack_packet()
201 whdr->serial = htonl(txb->serial); in rxrpc_send_ack_packet()
202 trace_rxrpc_tx_ack(call->debug_id, txb->serial, in rxrpc_send_ack_packet()
205 txb->ack_rwind); in rxrpc_send_ack_packet()
209 iov_iter_kvec(&msg.msg_iter, WRITE, txb->kvec, txb->nr_kvec, txb->len); in rxrpc_send_ack_packet()
211 ret = do_udp_sendmsg(conn->local->socket, &msg, txb->len); in rxrpc_send_ack_packet()
214 trace_rxrpc_tx_fail(call->debug_id, txb->serial, ret, in rxrpc_send_ack_packet()
221 rxrpc_begin_rtt_probe(call, txb->serial, now, rxrpc_rtt_tx_ping); in rxrpc_send_ack_packet()
222 if (txb->flags & RXRPC_REQUEST_ACK) in rxrpc_send_ack_packet()
235 struct rxrpc_txbuf *txb; in rxrpc_send_ACK() local
242 txb = rxrpc_alloc_ack_txbuf(call, call->ackr_wtop - call->ackr_window); in rxrpc_send_ACK()
243 if (!txb) { in rxrpc_send_ACK()
248 txb->ack_why = why; in rxrpc_send_ACK()
250 rxrpc_fill_out_ack(call, txb, ack_reason, serial); in rxrpc_send_ACK()
256 rxrpc_send_ack_packet(call, txb); in rxrpc_send_ACK()
257 rxrpc_put_txbuf(txb, rxrpc_txbuf_put_ack_tx); in rxrpc_send_ACK()
327 static void rxrpc_prepare_data_subpacket(struct rxrpc_call *call, struct rxrpc_txbuf *txb, in rxrpc_prepare_data_subpacket() argument
330 struct rxrpc_wire_header *whdr = txb->kvec[0].iov_base; in rxrpc_prepare_data_subpacket()
334 _enter("%x,{%d}", txb->seq, txb->len); in rxrpc_prepare_data_subpacket()
336 txb->serial = serial; in rxrpc_prepare_data_subpacket()
339 txb->seq == 1) in rxrpc_prepare_data_subpacket()
349 if (txb->flags & RXRPC_REQUEST_ACK) in rxrpc_prepare_data_subpacket()
351 else if ((txb->flags & RXRPC_LAST_PACKET) && rxrpc_sending_to_client(txb)) in rxrpc_prepare_data_subpacket()
355 else if (txb->flags & RXRPC_TXBUF_RESENT) in rxrpc_prepare_data_subpacket()
361 else if (call->peer->rtt_count < 3 && txb->seq & 1) in rxrpc_prepare_data_subpacket()
369 trace_rxrpc_req_ack(call->debug_id, txb->seq, why); in rxrpc_prepare_data_subpacket()
371 txb->flags |= RXRPC_REQUEST_ACK; in rxrpc_prepare_data_subpacket()
374 whdr->flags = txb->flags & RXRPC_TXBUF_WIRE_FLAGS; in rxrpc_prepare_data_subpacket()
375 whdr->serial = htonl(txb->serial); in rxrpc_prepare_data_subpacket()
376 whdr->cksum = txb->cksum; in rxrpc_prepare_data_subpacket()
378 trace_rxrpc_tx_data(call, txb->seq, txb->serial, txb->flags, false); in rxrpc_prepare_data_subpacket()
384 static size_t rxrpc_prepare_data_packet(struct rxrpc_call *call, struct rxrpc_txbuf *txb) in rxrpc_prepare_data_packet() argument
391 rxrpc_prepare_data_subpacket(call, txb, serial); in rxrpc_prepare_data_packet()
393 return txb->len; in rxrpc_prepare_data_packet()
399 static void rxrpc_tstamp_data_packets(struct rxrpc_call *call, struct rxrpc_txbuf *txb) in rxrpc_tstamp_data_packets() argument
402 bool ack_requested = txb->flags & RXRPC_REQUEST_ACK; in rxrpc_tstamp_data_packets()
405 txb->last_sent = now; in rxrpc_tstamp_data_packets()
408 rxrpc_begin_rtt_probe(call, txb->serial, now, rxrpc_rtt_tx_data); in rxrpc_tstamp_data_packets()
432 static int rxrpc_send_data_packet(struct rxrpc_call *call, struct rxrpc_txbuf *txb) in rxrpc_send_data_packet() argument
434 struct rxrpc_wire_header *whdr = txb->kvec[0].iov_base; in rxrpc_send_data_packet()
441 _enter("%x,{%d}", txb->seq, txb->len); in rxrpc_send_data_packet()
443 len = rxrpc_prepare_data_packet(call, txb); in rxrpc_send_data_packet()
449 trace_rxrpc_tx_data(call, txb->seq, txb->serial, in rxrpc_send_data_packet()
450 txb->flags, true); in rxrpc_send_data_packet()
455 iov_iter_kvec(&msg.msg_iter, WRITE, txb->kvec, txb->nr_kvec, len); in rxrpc_send_data_packet()
467 if (txb->seq == call->tx_transmitted + 1) in rxrpc_send_data_packet()
468 call->tx_transmitted = txb->seq; in rxrpc_send_data_packet()
472 if (txb->len >= call->peer->maxdata) { in rxrpc_send_data_packet()
493 trace_rxrpc_tx_fail(call->debug_id, txb->serial, ret, frag); in rxrpc_send_data_packet()
507 rxrpc_tstamp_data_packets(call, txb); in rxrpc_send_data_packet()
700 struct rxrpc_txbuf *txb) in rxrpc_instant_resend() argument
709 void rxrpc_transmit_one(struct rxrpc_call *call, struct rxrpc_txbuf *txb) in rxrpc_transmit_one() argument
713 ret = rxrpc_send_data_packet(call, txb); in rxrpc_transmit_one()
724 rxrpc_instant_resend(call, txb); in rxrpc_transmit_one()