Index: sys/netinet/khelp/h_ertt.c =================================================================== --- sys/netinet/khelp/h_ertt.c +++ sys/netinet/khelp/h_ertt.c @@ -83,7 +83,7 @@ */ struct txseginfo { /* Segment length. */ - long len; + uint32_t len; /* Segment sequence number. */ tcp_seq seq; /* Time stamp indicating when the packet was sent. */ @@ -366,8 +366,8 @@ &rtt_bytes_adjust, CORRECT_ACK); if (txsi->flags & TXSI_TSO) { - txsi->len -= acked; - if (txsi->len > 0) { + if (txsi->len > acked) { + txsi->len -= acked; /* * This presumes ack for first bytes in * txsi, this may not be true but it @@ -400,6 +400,7 @@ */ break; } + txsi->len = 0; } TAILQ_REMOVE(&e_t->txsegi_q, txsi, txsegi_lnk); @@ -435,7 +436,7 @@ struct tcpopt *to; struct tcp_hhook_data *thdp; struct txseginfo *txsi; - long len; + uint32_t len; int tso; KASSERT(ctx_data != NULL, ("%s: ctx_data is NULL!", __func__)); Index: sys/netinet/tcp_output.c =================================================================== --- sys/netinet/tcp_output.c +++ sys/netinet/tcp_output.c @@ -142,7 +142,7 @@ static void inline hhook_run_tcp_est_out(struct tcpcb *tp, struct tcphdr *th, struct tcpopt *to, - long len, int tso); + uint32_t len, int tso); static void inline cc_after_idle(struct tcpcb *tp); /* @@ -150,7 +150,7 @@ */ static void inline hhook_run_tcp_est_out(struct tcpcb *tp, struct tcphdr *th, - struct tcpopt *to, long len, int tso) + struct tcpopt *to, uint32_t len, int tso) { struct tcp_hhook_data hhook_data; Index: sys/netinet/tcp_var.h =================================================================== --- sys/netinet/tcp_var.h +++ sys/netinet/tcp_var.h @@ -644,7 +644,7 @@ struct tcpcb *tp; struct tcphdr *th; struct tcpopt *to; - long len; + uint32_t len; int tso; tcp_seq curack; };