The branch main has been updated by rrs:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=631449d5d03506295eaa6947c1b0e8a168a2f6b7

commit 631449d5d03506295eaa6947c1b0e8a168a2f6b7
Author:     Randall Stewart <r...@freebsd.org>
AuthorDate: 2021-05-24 18:42:15 +0000
Commit:     Randall Stewart <r...@freebsd.org>
CommitDate: 2021-05-24 18:42:15 +0000

    tcp: Fix an issue with the PUSH bit as well as fill in the missing mtu 
change for fsb's
    
    The push bit itself was also not actually being properly moved to
    the right edge. The FIN bit was incorrectly on the left edge. We
    fix these two issues as well as plumb in the mtu_change for
    alternate stacks.
    
    Reviewed by: mtuexen
    Sponsored by: Netflix Inc
    Differential Revision:  https://reviews.freebsd.org/D30413
---
 sys/netinet/tcp_stacks/rack.c | 8 ++++++--
 sys/netinet/tcp_subr.c        | 9 +++++++++
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/sys/netinet/tcp_stacks/rack.c b/sys/netinet/tcp_stacks/rack.c
index 2713554626e9..84e330efa74a 100644
--- a/sys/netinet/tcp_stacks/rack.c
+++ b/sys/netinet/tcp_stacks/rack.c
@@ -6058,8 +6058,12 @@ rack_clone_rsm(struct tcp_rack *rack, struct 
rack_sendmap *nrsm,
        if (nrsm->r_flags & RACK_HAS_SYN)
                nrsm->r_flags &= ~RACK_HAS_SYN;
        /* Now if we have a FIN flag we keep it on the right edge */
-       if (nrsm->r_flags & RACK_HAS_FIN)
-               nrsm->r_flags &= ~RACK_HAS_FIN;
+       if (rsm->r_flags & RACK_HAS_FIN)
+               rsm->r_flags &= ~RACK_HAS_FIN;
+       /* Push bit must go to the right edge as well */
+       if (rsm->r_flags & RACK_HAD_PUSH)
+               rsm->r_flags &= ~RACK_HAD_PUSH;
+       
        /*
         * Now we need to find nrsm's new location in the mbuf chain
         * we basically calculate a new offset, which is soff +
diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c
index c44f26f78a2f..de22310d241a 100644
--- a/sys/netinet/tcp_subr.c
+++ b/sys/netinet/tcp_subr.c
@@ -3407,6 +3407,15 @@ tcp_mtudisc(struct inpcb *inp, int mtuoffer)
        tp->snd_recover = tp->snd_max;
        if (tp->t_flags & TF_SACK_PERMIT)
                EXIT_FASTRECOVERY(tp->t_flags);
+       if (tp->t_fb->tfb_tcp_mtu_chg != NULL) {
+               /*
+                * Conceptually the snd_nxt setting
+                * and freeing sack holes should
+                * be done by the default stacks
+                * own tfb_tcp_mtu_chg().
+                */
+               tp->t_fb->tfb_tcp_mtu_chg(tp);
+       }
        tp->t_fb->tfb_tcp_output(tp);
 }
 
_______________________________________________
dev-commits-src-main@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "dev-commits-src-main-unsubscr...@freebsd.org"

Reply via email to