Page MenuHomeFreeBSD

D21117.id71874.diff
No OneTemporary

D21117.id71874.diff

Index: sys/netinet/tcp_input.c
===================================================================
--- sys/netinet/tcp_input.c
+++ sys/netinet/tcp_input.c
@@ -3418,7 +3418,8 @@
INP_WLOCK_ASSERT(tp->t_inpcb);
TCPSTAT_INC(tcps_rttupdated);
- tp->t_rttupdated++;
+ if (tp->t_rttupdated < UTYPE_MAX(tp->t_rttupdated))
+ (tp->t_rttupdated)++;
#ifdef STATS
stats_voi_update_abs_u32(tp->t_stats, VOI_TCP_RTT,
imax(0, rtt * 1000 / hz));
Index: sys/netinet/tcp_stacks/bbr.c
===================================================================
--- sys/netinet/tcp_stacks/bbr.c
+++ sys/netinet/tcp_stacks/bbr.c
@@ -6511,7 +6511,8 @@
tp->t_rttbest = tp->t_srtt + tp->t_rttvar;
}
KMOD_TCPSTAT_INC(tcps_rttupdated);
- tp->t_rttupdated++;
+ if (tp->t_rttupdated < UTYPE_MAX(tp->t_rttupdated))
+ (tp->t_rttupdated)++;
#ifdef STATS
stats_voi_update_abs_u32(tp->t_stats, VOI_TCP_RTT, imax(0, rtt_ticks));
#endif
Index: sys/netinet/tcp_stacks/rack.c
===================================================================
--- sys/netinet/tcp_stacks/rack.c
+++ sys/netinet/tcp_stacks/rack.c
@@ -6609,7 +6609,8 @@
tp->t_rttbest = tp->t_srtt + tp->t_rttvar;
}
KMOD_TCPSTAT_INC(tcps_rttupdated);
- tp->t_rttupdated++;
+ if (tp->t_rttupdated < UTYPE_MAX(tp->t_rttupdated))
+ (tp->t_rttupdated)++;
#ifdef STATS
stats_voi_update_abs_u32(tp->t_stats, VOI_TCP_RTT, imax(0, rtt));
#endif
Index: sys/netinet/tcp_usrreq.c
===================================================================
--- sys/netinet/tcp_usrreq.c
+++ sys/netinet/tcp_usrreq.c
@@ -2858,7 +2858,7 @@
tp->t_rttbest);
db_print_indent(indent);
- db_printf("t_rttupdated: %lu max_sndwnd: %u t_softerror: %d\n",
+ db_printf("t_rttupdated: %u max_sndwnd: %u t_softerror: %d\n",
tp->t_rttupdated, tp->max_sndwnd, tp->t_softerror);
db_print_indent(indent);
Index: sys/netinet/tcp_var.h
===================================================================
--- sys/netinet/tcp_var.h
+++ sys/netinet/tcp_var.h
@@ -217,7 +217,6 @@
uint32_t snd_ssthresh_prev; /* ssthresh prior to retransmit */
tcp_seq snd_recover_prev; /* snd_recover prior to retransmit */
int t_sndzerowin; /* zero-window updates sent */
- u_long t_rttupdated; /* number of times rtt sampled */
int snd_numholes; /* number of holes seen by sender */
u_int t_badrxtwin; /* window for retransmit recovery */
TAILQ_HEAD(sackhole_head, sackhole) snd_holes;
@@ -253,6 +252,7 @@
tcp_seq gput_seq; /* Outbound measurement seq */
tcp_seq gput_ack; /* Inbound measurement ack */
int32_t t_stats_gput_prev; /* XXXLAS: Prev gput measurement */
+ uint8_t t_rttupdated; /* number of times rtt sampled */
uint8_t t_tfo_client_cookie_len; /* TCP Fast Open client cookie length */
uint32_t t_end_info_status; /* Status flag of end info */
unsigned int *t_tfo_pending; /* TCP Fast Open server pending counter */
@@ -552,6 +552,13 @@
max((tp)->t_rttmin, (((tp)->t_srtt >> (TCP_RTT_SHIFT - TCP_DELTA_SHIFT)) \
+ (tp)->t_rttvar) >> TCP_DELTA_SHIFT)
+/*
+ * Programmatically determine the maximum value of
+ * an unsigned type, without integer overflow.
+ */
+#define UTYPE_MAX(x) \
+ ((((1ULL << (sizeof((x)) * 8 - 1)) - 1) * 2) + 1)
+
/*
* TCP statistics.
* Many of these should be kept per connection,

File Metadata

Mime Type
text/plain
Expires
Mon, May 18, 12:54 AM (18 h, 43 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33224279
Default Alt Text
D21117.id71874.diff (3 KB)

Event Timeline