|
@@ -3104,7 +3104,7 @@ static void tcp_ack_tstamp(struct sock *sk, struct sk_buff *skb,
|
|
|
* arrived at the other end.
|
|
|
*/
|
|
|
static int tcp_clean_rtx_queue(struct sock *sk, int prior_fackets,
|
|
|
- u32 prior_snd_una,
|
|
|
+ u32 prior_snd_una, int *acked,
|
|
|
struct tcp_sacktag_state *sack)
|
|
|
{
|
|
|
const struct inet_connection_sock *icsk = inet_csk(sk);
|
|
@@ -3277,6 +3277,7 @@ static int tcp_clean_rtx_queue(struct sock *sk, int prior_fackets,
|
|
|
}
|
|
|
}
|
|
|
#endif
|
|
|
+ *acked = pkts_acked;
|
|
|
return flag;
|
|
|
}
|
|
|
|
|
@@ -3642,10 +3643,8 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
|
|
|
goto no_queue;
|
|
|
|
|
|
/* See if we can take anything off of the retransmit queue. */
|
|
|
- acked = tp->packets_out;
|
|
|
- flag |= tcp_clean_rtx_queue(sk, prior_fackets, prior_snd_una,
|
|
|
+ flag |= tcp_clean_rtx_queue(sk, prior_fackets, prior_snd_una, &acked,
|
|
|
&sack_state);
|
|
|
- acked -= tp->packets_out;
|
|
|
|
|
|
if (tcp_ack_is_dubious(sk, flag)) {
|
|
|
is_dupack = !(flag & (FLAG_SND_UNA_ADVANCED | FLAG_NOT_DUP));
|