@@ -38,7 +38,8 @@ struct rxrpc_abort_buffer {
3838static size_t rxrpc_fill_out_ack (struct rxrpc_call * call ,
3939 struct rxrpc_ack_buffer * pkt ,
4040 rxrpc_seq_t * _hard_ack ,
41- rxrpc_seq_t * _top )
41+ rxrpc_seq_t * _top ,
42+ u8 reason )
4243{
4344 rxrpc_serial_t serial ;
4445 rxrpc_seq_t hard_ack , top , seq ;
@@ -58,10 +59,10 @@ static size_t rxrpc_fill_out_ack(struct rxrpc_call *call,
5859 pkt -> ack .firstPacket = htonl (hard_ack + 1 );
5960 pkt -> ack .previousPacket = htonl (call -> ackr_prev_seq );
6061 pkt -> ack .serial = htonl (serial );
61- pkt -> ack .reason = call -> ackr_reason ;
62+ pkt -> ack .reason = reason ;
6263 pkt -> ack .nAcks = top - hard_ack ;
6364
64- if (pkt -> ack . reason == RXRPC_ACK_PING )
65+ if (reason == RXRPC_ACK_PING )
6566 pkt -> whdr .flags |= RXRPC_REQUEST_ACK ;
6667
6768 if (after (top , hard_ack )) {
@@ -93,7 +94,7 @@ static size_t rxrpc_fill_out_ack(struct rxrpc_call *call,
9394/*
9495 * Send an ACK call packet.
9596 */
96- int rxrpc_send_ack_packet (struct rxrpc_call * call )
97+ int rxrpc_send_ack_packet (struct rxrpc_call * call , bool ping )
9798{
9899 struct rxrpc_connection * conn = NULL ;
99100 struct rxrpc_ack_buffer * pkt ;
@@ -102,8 +103,8 @@ int rxrpc_send_ack_packet(struct rxrpc_call *call)
102103 rxrpc_serial_t serial ;
103104 rxrpc_seq_t hard_ack , top ;
104105 size_t len , n ;
105- bool ping = false;
106106 int ret ;
107+ u8 reason ;
107108
108109 spin_lock_bh (& call -> lock );
109110 if (call -> conn )
@@ -136,14 +137,18 @@ int rxrpc_send_ack_packet(struct rxrpc_call *call)
136137 pkt -> whdr .serviceId = htons (call -> service_id );
137138
138139 spin_lock_bh (& call -> lock );
139- if (!call -> ackr_reason ) {
140- spin_unlock_bh (& call -> lock );
141- ret = 0 ;
142- goto out ;
140+ if (ping ) {
141+ reason = RXRPC_ACK_PING ;
142+ } else {
143+ reason = call -> ackr_reason ;
144+ if (!call -> ackr_reason ) {
145+ spin_unlock_bh (& call -> lock );
146+ ret = 0 ;
147+ goto out ;
148+ }
149+ call -> ackr_reason = 0 ;
143150 }
144- ping = (call -> ackr_reason == RXRPC_ACK_PING );
145- n = rxrpc_fill_out_ack (call , pkt , & hard_ack , & top );
146- call -> ackr_reason = 0 ;
151+ n = rxrpc_fill_out_ack (call , pkt , & hard_ack , & top , reason );
147152
148153 spin_unlock_bh (& call -> lock );
149154
@@ -161,7 +166,7 @@ int rxrpc_send_ack_packet(struct rxrpc_call *call)
161166 pkt -> ack .reason , pkt -> ack .nAcks );
162167
163168 if (ping ) {
164- call -> ackr_ping = serial ;
169+ call -> ping_serial = serial ;
165170 smp_wmb ();
166171 /* We need to stick a time in before we send the packet in case
167172 * the reply gets back before kernel_sendmsg() completes - but
@@ -170,18 +175,19 @@ int rxrpc_send_ack_packet(struct rxrpc_call *call)
170175 * the packet transmission is more likely to happen towards the
171176 * end of the kernel_sendmsg() call.
172177 */
173- call -> ackr_ping_time = ktime_get_real ();
178+ call -> ping_time = ktime_get_real ();
174179 set_bit (RXRPC_CALL_PINGING , & call -> flags );
175180 trace_rxrpc_rtt_tx (call , rxrpc_rtt_tx_ping , serial );
176181 }
177182
178183 ret = kernel_sendmsg (conn -> params .local -> socket , & msg , iov , 2 , len );
179184 if (ping )
180- call -> ackr_ping_time = ktime_get_real ();
185+ call -> ping_time = ktime_get_real ();
181186
182187 if (call -> state < RXRPC_CALL_COMPLETE ) {
183188 if (ret < 0 ) {
184- clear_bit (RXRPC_CALL_PINGING , & call -> flags );
189+ if (ping )
190+ clear_bit (RXRPC_CALL_PINGING , & call -> flags );
185191 rxrpc_propose_ACK (call , pkt -> ack .reason ,
186192 ntohs (pkt -> ack .maxSkew ),
187193 ntohl (pkt -> ack .serial ),
0 commit comments