|
@@ -1242,16 +1242,19 @@ void rxrpc_data_ready(struct sock *udp_sk)
|
|
|
goto discard_unlock;
|
|
|
|
|
|
if (sp->hdr.callNumber == chan->last_call) {
|
|
|
- /* For the previous service call, if completed successfully, we
|
|
|
- * discard all further packets.
|
|
|
+ if (chan->call ||
|
|
|
+ sp->hdr.type == RXRPC_PACKET_TYPE_ABORT)
|
|
|
+ goto discard_unlock;
|
|
|
+
|
|
|
+ /* For the previous service call, if completed
|
|
|
+ * successfully, we discard all further packets.
|
|
|
*/
|
|
|
if (rxrpc_conn_is_service(conn) &&
|
|
|
- (chan->last_type == RXRPC_PACKET_TYPE_ACK ||
|
|
|
- sp->hdr.type == RXRPC_PACKET_TYPE_ABORT))
|
|
|
+ chan->last_type == RXRPC_PACKET_TYPE_ACK)
|
|
|
goto discard_unlock;
|
|
|
|
|
|
- /* But otherwise we need to retransmit the final packet from
|
|
|
- * data cached in the connection record.
|
|
|
+ /* But otherwise we need to retransmit the final packet
|
|
|
+ * from data cached in the connection record.
|
|
|
*/
|
|
|
rxrpc_post_packet_to_conn(conn, skb);
|
|
|
goto out_unlock;
|