@@ -710,20 +710,19 @@ static rxrpc_seq_t rxrpc_input_check_prev_ack(struct rxrpc_call *call,
710
710
rxrpc_seq_t seq )
711
711
{
712
712
struct sk_buff * skb = call -> cong_last_nack ;
713
- struct rxrpc_ackpacket ack ;
714
713
struct rxrpc_skb_priv * sp = rxrpc_skb (skb );
715
714
unsigned int i , new_acks = 0 , retained_nacks = 0 ;
716
- rxrpc_seq_t old_seq = sp -> first_ack ;
717
- u8 * acks = skb -> data + sizeof (struct rxrpc_wire_header ) + sizeof (ack );
715
+ rxrpc_seq_t old_seq = sp -> ack . first_ack ;
716
+ u8 * acks = skb -> data + sizeof (struct rxrpc_wire_header ) + sizeof (struct rxrpc_ackpacket );
718
717
719
- if (after_eq (seq , old_seq + sp -> nr_acks )) {
720
- summary -> nr_new_acks += sp -> nr_nacks ;
721
- summary -> nr_new_acks += seq - (old_seq + sp -> nr_acks );
718
+ if (after_eq (seq , old_seq + sp -> ack . nr_acks )) {
719
+ summary -> nr_new_acks += sp -> ack . nr_nacks ;
720
+ summary -> nr_new_acks += seq - (old_seq + sp -> ack . nr_acks );
722
721
summary -> nr_retained_nacks = 0 ;
723
722
} else if (seq == old_seq ) {
724
- summary -> nr_retained_nacks = sp -> nr_nacks ;
723
+ summary -> nr_retained_nacks = sp -> ack . nr_nacks ;
725
724
} else {
726
- for (i = 0 ; i < sp -> nr_acks ; i ++ ) {
725
+ for (i = 0 ; i < sp -> ack . nr_acks ; i ++ ) {
727
726
if (acks [i ] == RXRPC_ACK_TYPE_NACK ) {
728
727
if (before (old_seq + i , seq ))
729
728
new_acks ++ ;
@@ -736,7 +735,7 @@ static rxrpc_seq_t rxrpc_input_check_prev_ack(struct rxrpc_call *call,
736
735
summary -> nr_retained_nacks = retained_nacks ;
737
736
}
738
737
739
- return old_seq + sp -> nr_acks ;
738
+ return old_seq + sp -> ack . nr_acks ;
740
739
}
741
740
742
741
/*
@@ -756,10 +755,10 @@ static void rxrpc_input_soft_acks(struct rxrpc_call *call,
756
755
{
757
756
struct rxrpc_skb_priv * sp = rxrpc_skb (skb );
758
757
unsigned int i , old_nacks = 0 ;
759
- rxrpc_seq_t lowest_nak = seq + sp -> nr_acks ;
758
+ rxrpc_seq_t lowest_nak = seq + sp -> ack . nr_acks ;
760
759
u8 * acks = skb -> data + sizeof (struct rxrpc_wire_header ) + sizeof (struct rxrpc_ackpacket );
761
760
762
- for (i = 0 ; i < sp -> nr_acks ; i ++ ) {
761
+ for (i = 0 ; i < sp -> ack . nr_acks ; i ++ ) {
763
762
if (acks [i ] == RXRPC_ACK_TYPE_ACK ) {
764
763
summary -> nr_acks ++ ;
765
764
if (after_eq (seq , since ))
@@ -771,7 +770,7 @@ static void rxrpc_input_soft_acks(struct rxrpc_call *call,
771
770
old_nacks ++ ;
772
771
} else {
773
772
summary -> nr_new_nacks ++ ;
774
- sp -> nr_nacks ++ ;
773
+ sp -> ack . nr_nacks ++ ;
775
774
}
776
775
777
776
if (before (seq , lowest_nak ))
@@ -832,7 +831,6 @@ static bool rxrpc_is_ack_valid(struct rxrpc_call *call,
832
831
static void rxrpc_input_ack (struct rxrpc_call * call , struct sk_buff * skb )
833
832
{
834
833
struct rxrpc_ack_summary summary = { 0 };
835
- struct rxrpc_ackpacket ack ;
836
834
struct rxrpc_skb_priv * sp = rxrpc_skb (skb );
837
835
struct rxrpc_acktrailer trailer ;
838
836
rxrpc_serial_t ack_serial , acked_serial ;
@@ -841,29 +839,24 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
841
839
842
840
_enter ("" );
843
841
844
- offset = sizeof (struct rxrpc_wire_header );
845
- if (skb_copy_bits (skb , offset , & ack , sizeof (ack )) < 0 )
846
- return rxrpc_proto_abort (call , 0 , rxrpc_badmsg_short_ack );
847
- offset += sizeof (ack );
848
-
849
- ack_serial = sp -> hdr .serial ;
850
- acked_serial = ntohl (ack .serial );
851
- first_soft_ack = ntohl (ack .firstPacket );
852
- prev_pkt = ntohl (ack .previousPacket );
853
- hard_ack = first_soft_ack - 1 ;
854
- nr_acks = ack .nAcks ;
855
- sp -> first_ack = first_soft_ack ;
856
- sp -> nr_acks = nr_acks ;
857
- summary .ack_reason = (ack .reason < RXRPC_ACK__INVALID ?
858
- ack .reason : RXRPC_ACK__INVALID );
842
+ offset = sizeof (struct rxrpc_wire_header ) + sizeof (struct rxrpc_ackpacket );
843
+
844
+ ack_serial = sp -> hdr .serial ;
845
+ acked_serial = sp -> ack .acked_serial ;
846
+ first_soft_ack = sp -> ack .first_ack ;
847
+ prev_pkt = sp -> ack .prev_ack ;
848
+ nr_acks = sp -> ack .nr_acks ;
849
+ hard_ack = first_soft_ack - 1 ;
850
+ summary .ack_reason = (sp -> ack .reason < RXRPC_ACK__INVALID ?
851
+ sp -> ack .reason : RXRPC_ACK__INVALID );
859
852
860
853
trace_rxrpc_rx_ack (call , ack_serial , acked_serial ,
861
854
first_soft_ack , prev_pkt ,
862
855
summary .ack_reason , nr_acks );
863
- rxrpc_inc_stat (call -> rxnet , stat_rx_acks [ack . reason ]);
856
+ rxrpc_inc_stat (call -> rxnet , stat_rx_acks [summary . ack_reason ]);
864
857
865
858
if (acked_serial != 0 ) {
866
- switch (ack . reason ) {
859
+ switch (summary . ack_reason ) {
867
860
case RXRPC_ACK_PING_RESPONSE :
868
861
rxrpc_complete_rtt_probe (call , skb -> tstamp , acked_serial , ack_serial ,
869
862
rxrpc_rtt_rx_ping_response );
@@ -883,7 +876,7 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
883
876
* indicates that the client address changed due to NAT. The server
884
877
* lost the call because it switched to a different peer.
885
878
*/
886
- if (unlikely (ack . reason == RXRPC_ACK_EXCEEDS_WINDOW ) &&
879
+ if (unlikely (summary . ack_reason == RXRPC_ACK_EXCEEDS_WINDOW ) &&
887
880
first_soft_ack == 1 &&
888
881
prev_pkt == 0 &&
889
882
rxrpc_is_client_call (call )) {
@@ -896,7 +889,7 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
896
889
* indicate a change of address. However, we can retransmit the call
897
890
* if we still have it buffered to the beginning.
898
891
*/
899
- if (unlikely (ack . reason == RXRPC_ACK_OUT_OF_SEQUENCE ) &&
892
+ if (unlikely (summary . ack_reason == RXRPC_ACK_OUT_OF_SEQUENCE ) &&
900
893
first_soft_ack == 1 &&
901
894
prev_pkt == 0 &&
902
895
call -> acks_hard_ack == 0 &&
@@ -937,7 +930,7 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
937
930
call -> acks_first_seq = first_soft_ack ;
938
931
call -> acks_prev_seq = prev_pkt ;
939
932
940
- switch (ack . reason ) {
933
+ switch (summary . ack_reason ) {
941
934
case RXRPC_ACK_PING :
942
935
break ;
943
936
default :
@@ -994,7 +987,7 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
994
987
rxrpc_congestion_management (call , skb , & summary , acked_serial );
995
988
996
989
send_response :
997
- if (ack . reason == RXRPC_ACK_PING )
990
+ if (summary . ack_reason == RXRPC_ACK_PING )
998
991
rxrpc_send_ACK (call , RXRPC_ACK_PING_RESPONSE , ack_serial ,
999
992
rxrpc_propose_ack_respond_to_ping );
1000
993
else if (sp -> hdr .flags & RXRPC_REQUEST_ACK )
0 commit comments