PERFORCE change 166451 for review
Andre Oppermann
andre at FreeBSD.org
Thu Jul 23 14:34:30 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=166451
Change 166451 by andre at andre_t61 on 2009/07/23 14:34:26
Bring back tcp reassembly timers lost in the last integrate/resolve.
Affected files ...
.. //depot/projects/tcp_reass/netinet/tcp_timer.c#10 edit
Differences ...
==== //depot/projects/tcp_reass/netinet/tcp_timer.c#10 (text+ko) ====
@@ -597,6 +597,46 @@
}
void
+tcp_timer_reass(void *xtp)
+{
+ struct tcpcb *tp = xtp;
+ struct inpcb *inp;
+ CURVNET_SET(tp->t_vnet);
+
+ INP_INFO_RLOCK(&V_tcbinfo);
+ inp = tp->t_inpcb;
+ /*
+ * XXXRW: While this assert is in fact correct, bugs in the tcpcb
+ * tear-down mean we need it as a work-around for races between
+ * timers and tcp_discardcb().
+ *
+ * KASSERT(inp != NULL, ("tcp_timer_reass: inp == NULL"));
+ */
+ if (inp == NULL) {
+ tcp_timer_race++;
+ INP_INFO_RUNLOCK(&V_tcbinfo);
+ CURVNET_RESTORE();
+ return;
+ }
+ INP_WLOCK(inp);
+ INP_INFO_RUNLOCK(&V_tcbinfo);
+ if ((inp->inp_vflag & INP_DROPPED) || callout_pending(&tp->t_timers->tt_reass)
+ || !callout_active(&tp->t_timers->tt_reass)) {
+ INP_WUNLOCK(inp);
+ CURVNET_RESTORE();
+ return;
+ }
+ callout_deactivate(&tp->t_timers->tt_reass);
+
+ TCPSTAT_INC(tcps_reass_flush);
+ tcp_reass_flush(tp);
+ tp->t_flags |= TF_ACKNOW;
+ (void) tcp_output(tp);
+ INP_WUNLOCK(inp);
+ CURVNET_RESTORE();
+}
+
+void
tcp_timer_activate(struct tcpcb *tp, int timer_type, u_int delta)
{
struct callout *t_callout;
@@ -623,6 +663,10 @@
t_callout = &tp->t_timers->tt_2msl;
f_callout = tcp_timer_2msl;
break;
+ case TT_REASS:
+ t_callout = &tp->t_timers->tt_reass;
+ f_callout = tcp_timer_reass;
+ break;
default:
panic("bad timer_type");
}
@@ -654,6 +698,8 @@
case TT_2MSL:
t_callout = &tp->t_timers->tt_2msl;
break;
+ case TT_REASS:
+ t_callout = &tp->t_timers->tt_reass;
default:
panic("bad timer_type");
}
More information about the p4-projects
mailing list