rxrpc: Keep the ACK serial in a var in rxrpc_input_ack()
Keep the ACK serial number in a variable in rxrpc_input_ack() as it's used frequently. Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
@@ -843,7 +843,7 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
|
|||||||
struct rxrpc_ackinfo info;
|
struct rxrpc_ackinfo info;
|
||||||
u8 acks[RXRPC_MAXACKS];
|
u8 acks[RXRPC_MAXACKS];
|
||||||
} buf;
|
} buf;
|
||||||
rxrpc_serial_t acked_serial;
|
rxrpc_serial_t ack_serial, acked_serial;
|
||||||
rxrpc_seq_t first_soft_ack, hard_ack, prev_pkt;
|
rxrpc_seq_t first_soft_ack, hard_ack, prev_pkt;
|
||||||
int nr_acks, offset, ioffset;
|
int nr_acks, offset, ioffset;
|
||||||
|
|
||||||
@@ -856,6 +856,7 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
|
|||||||
}
|
}
|
||||||
offset += sizeof(buf.ack);
|
offset += sizeof(buf.ack);
|
||||||
|
|
||||||
|
ack_serial = sp->hdr.serial;
|
||||||
acked_serial = ntohl(buf.ack.serial);
|
acked_serial = ntohl(buf.ack.serial);
|
||||||
first_soft_ack = ntohl(buf.ack.firstPacket);
|
first_soft_ack = ntohl(buf.ack.firstPacket);
|
||||||
prev_pkt = ntohl(buf.ack.previousPacket);
|
prev_pkt = ntohl(buf.ack.previousPacket);
|
||||||
@@ -864,31 +865,31 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
|
|||||||
summary.ack_reason = (buf.ack.reason < RXRPC_ACK__INVALID ?
|
summary.ack_reason = (buf.ack.reason < RXRPC_ACK__INVALID ?
|
||||||
buf.ack.reason : RXRPC_ACK__INVALID);
|
buf.ack.reason : RXRPC_ACK__INVALID);
|
||||||
|
|
||||||
trace_rxrpc_rx_ack(call, sp->hdr.serial, acked_serial,
|
trace_rxrpc_rx_ack(call, ack_serial, acked_serial,
|
||||||
first_soft_ack, prev_pkt,
|
first_soft_ack, prev_pkt,
|
||||||
summary.ack_reason, nr_acks);
|
summary.ack_reason, nr_acks);
|
||||||
|
|
||||||
if (buf.ack.reason == RXRPC_ACK_PING_RESPONSE)
|
if (buf.ack.reason == RXRPC_ACK_PING_RESPONSE)
|
||||||
rxrpc_input_ping_response(call, skb->tstamp, acked_serial,
|
rxrpc_input_ping_response(call, skb->tstamp, acked_serial,
|
||||||
sp->hdr.serial);
|
ack_serial);
|
||||||
if (buf.ack.reason == RXRPC_ACK_REQUESTED)
|
if (buf.ack.reason == RXRPC_ACK_REQUESTED)
|
||||||
rxrpc_input_requested_ack(call, skb->tstamp, acked_serial,
|
rxrpc_input_requested_ack(call, skb->tstamp, acked_serial,
|
||||||
sp->hdr.serial);
|
ack_serial);
|
||||||
|
|
||||||
if (buf.ack.reason == RXRPC_ACK_PING) {
|
if (buf.ack.reason == RXRPC_ACK_PING) {
|
||||||
_proto("Rx ACK %%%u PING Request", sp->hdr.serial);
|
_proto("Rx ACK %%%u PING Request", ack_serial);
|
||||||
rxrpc_propose_ACK(call, RXRPC_ACK_PING_RESPONSE,
|
rxrpc_propose_ACK(call, RXRPC_ACK_PING_RESPONSE,
|
||||||
sp->hdr.serial, true, true,
|
ack_serial, true, true,
|
||||||
rxrpc_propose_ack_respond_to_ping);
|
rxrpc_propose_ack_respond_to_ping);
|
||||||
} else if (sp->hdr.flags & RXRPC_REQUEST_ACK) {
|
} else if (sp->hdr.flags & RXRPC_REQUEST_ACK) {
|
||||||
rxrpc_propose_ACK(call, RXRPC_ACK_REQUESTED,
|
rxrpc_propose_ACK(call, RXRPC_ACK_REQUESTED,
|
||||||
sp->hdr.serial, true, true,
|
ack_serial, true, true,
|
||||||
rxrpc_propose_ack_respond_to_ack);
|
rxrpc_propose_ack_respond_to_ack);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Discard any out-of-order or duplicate ACKs (outside lock). */
|
/* Discard any out-of-order or duplicate ACKs (outside lock). */
|
||||||
if (!rxrpc_is_ack_valid(call, first_soft_ack, prev_pkt)) {
|
if (!rxrpc_is_ack_valid(call, first_soft_ack, prev_pkt)) {
|
||||||
trace_rxrpc_rx_discard_ack(call->debug_id, sp->hdr.serial,
|
trace_rxrpc_rx_discard_ack(call->debug_id, ack_serial,
|
||||||
first_soft_ack, call->ackr_first_seq,
|
first_soft_ack, call->ackr_first_seq,
|
||||||
prev_pkt, call->ackr_prev_seq);
|
prev_pkt, call->ackr_prev_seq);
|
||||||
return;
|
return;
|
||||||
@@ -904,7 +905,7 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
|
|||||||
|
|
||||||
/* Discard any out-of-order or duplicate ACKs (inside lock). */
|
/* Discard any out-of-order or duplicate ACKs (inside lock). */
|
||||||
if (!rxrpc_is_ack_valid(call, first_soft_ack, prev_pkt)) {
|
if (!rxrpc_is_ack_valid(call, first_soft_ack, prev_pkt)) {
|
||||||
trace_rxrpc_rx_discard_ack(call->debug_id, sp->hdr.serial,
|
trace_rxrpc_rx_discard_ack(call->debug_id, ack_serial,
|
||||||
first_soft_ack, call->ackr_first_seq,
|
first_soft_ack, call->ackr_first_seq,
|
||||||
prev_pkt, call->ackr_prev_seq);
|
prev_pkt, call->ackr_prev_seq);
|
||||||
goto out;
|
goto out;
|
||||||
@@ -964,7 +965,7 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
|
|||||||
RXRPC_TX_ANNO_LAST &&
|
RXRPC_TX_ANNO_LAST &&
|
||||||
summary.nr_acks == call->tx_top - hard_ack &&
|
summary.nr_acks == call->tx_top - hard_ack &&
|
||||||
rxrpc_is_client_call(call))
|
rxrpc_is_client_call(call))
|
||||||
rxrpc_propose_ACK(call, RXRPC_ACK_PING, sp->hdr.serial,
|
rxrpc_propose_ACK(call, RXRPC_ACK_PING, ack_serial,
|
||||||
false, true,
|
false, true,
|
||||||
rxrpc_propose_ack_ping_for_lost_reply);
|
rxrpc_propose_ack_ping_for_lost_reply);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user