Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
[linux-2.6-microblaze.git] / net / mptcp / options.c
index 7adcbc1..bebb759 100644 (file)
@@ -971,9 +971,11 @@ static void ack_update_msk(struct mptcp_sock *msk,
        old_snd_una = msk->snd_una;
        new_snd_una = mptcp_expand_seq(old_snd_una, mp_opt->data_ack, mp_opt->ack64);
 
-       /* ACK for data not even sent yet? Ignore. */
-       if (after64(new_snd_una, snd_nxt))
-               new_snd_una = old_snd_una;
+       /* ACK for data not even sent yet and even above recovery bound? Ignore.*/
+       if (unlikely(after64(new_snd_una, snd_nxt))) {
+               if (!msk->recovery || after64(new_snd_una, msk->recovery_snd_nxt))
+                       new_snd_una = old_snd_una;
+       }
 
        new_wnd_end = new_snd_una + tcp_sk(ssk)->snd_wnd;