Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F139388810
D47130.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D47130.diff
View Options
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c
--- a/sys/netinet/tcp_input.c
+++ b/sys/netinet/tcp_input.c
@@ -1517,6 +1517,21 @@
}
}
+/*
+ * Drop space held by incoming segment.
+ */
+static inline void
+tcp_do_segment_drop(struct tcpcb *tp, struct mbuf *m, struct tcphdr *th)
+{
+ INP_WLOCK_ASSERT(tptoinpcb(tp));
+ TCP_PROBE3(debug__input, tp, th, m);
+
+ if (tp != NULL) {
+ INP_WUNLOCK(tptoinpcb(tp));
+ }
+ m_freem(m);
+}
+
void
tcp_do_segment(struct tcpcb *tp, struct mbuf *m, struct tcphdr *th,
int drop_hdrlen, int tlen, uint8_t iptos)
@@ -1562,7 +1577,7 @@
"sysctl setting)\n", s, __func__);
free(s, M_TCPLOG);
}
- goto drop;
+ return tcp_do_segment_drop(tp, m, th);
}
/*
@@ -1728,7 +1743,7 @@
"segment silently dropped\n", s, __func__);
free(s, M_TCPLOG);
}
- goto drop;
+ return tcp_do_segment_drop(tp, m, th);
}
}
/*
@@ -2010,9 +2025,9 @@
/* non-initial SYN is ignored */
if ((tcp_timer_active(tp, TT_DELACK) ||
tcp_timer_active(tp, TT_REXMT)))
- goto drop;
+ return tcp_do_segment_drop(tp, m, th);
} else if (!(thflags & (TH_ACK|TH_FIN|TH_RST))) {
- goto drop;
+ return tcp_do_segment_drop(tp, m, th);
}
}
break;
@@ -2040,9 +2055,9 @@
tp = tcp_drop(tp, ECONNREFUSED);
}
if (thflags & TH_RST)
- goto drop;
+ return tcp_do_segment_drop(tp, m, th);
if (!(thflags & TH_SYN))
- goto drop;
+ return tcp_do_segment_drop(tp, m, th);
tp->irs = th->th_seq;
tcp_rcvseqinit(tp);
@@ -2209,7 +2224,7 @@
m = NULL;
}
}
- goto drop;
+ return tcp_do_segment_drop(tp, m, th);
}
/*
@@ -2230,7 +2245,7 @@
tcp_send_challenge_ack(tp, th, m);
m = NULL;
}
- goto drop;
+ return tcp_do_segment_drop(tp, m, th);
}
/*
@@ -2259,7 +2274,7 @@
TCPSTAT_INC(tcps_pawsdrop);
if (tlen)
goto dropafterack;
- goto drop;
+ return tcp_do_segment_drop(tp, m, th);
}
}
@@ -2428,7 +2443,7 @@
} else if (tp->t_flags & TF_ACKNOW)
goto dropafterack;
else
- goto drop;
+ return tcp_do_segment_drop(tp, m, th);
}
/*
@@ -2467,7 +2482,7 @@
TCPSTAT_INC(tcps_rcvacktooold);
tcp_send_challenge_ack(tp, th, m);
m = NULL;
- goto drop;
+ return tcp_do_segment_drop(tp, m, th);
}
}
switch (tp->t_state) {
@@ -2677,7 +2692,7 @@
tp->snd_cwnd += maxseg;
}
(void) tcp_output(tp);
- goto drop;
+ return tcp_do_segment_drop(tp, m, th);
} else if (tp->t_dupacks == tcprexmtthresh ||
(tp->t_flags & TF_SACK_PERMIT &&
V_tcp_do_newsack &&
@@ -2749,7 +2764,7 @@
if (SEQ_GT(th->th_ack, tp->snd_una)) {
goto resume_partialack;
}
- goto drop;
+ return tcp_do_segment_drop(tp, m, th);
}
tp->snd_nxt = th->th_ack;
tp->snd_cwnd = maxseg;
@@ -2762,7 +2777,7 @@
(tp->t_dupacks - tp->snd_limited);
if (SEQ_GT(onxt, tp->snd_nxt))
tp->snd_nxt = onxt;
- goto drop;
+ return tcp_do_segment_drop(tp, m, th);
} else if (V_tcp_do_rfc3042) {
/*
* Process first and second duplicate
@@ -2820,7 +2835,7 @@
++tp->snd_limited;
}
tp->snd_cwnd = oldcwnd;
- goto drop;
+ return tcp_do_segment_drop(tp, m, th);
}
}
break;
@@ -3106,7 +3121,7 @@
case TCPS_LAST_ACK:
if (ourfinisacked) {
tp = tcp_close(tp);
- goto drop;
+ return tcp_do_segment_drop(tp, m, th);
}
break;
}
@@ -3452,17 +3467,6 @@
INP_WUNLOCK(inp);
} else
tcp_dropwithreset(m, th, NULL, tlen, rstreason);
- return;
-
-drop:
- /*
- * Drop space held by incoming segment and return.
- */
- TCP_PROBE3(debug__input, tp, th, m);
- if (tp != NULL) {
- INP_WUNLOCK(inp);
- }
- m_freem(m);
}
/*
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Dec 12, 2:27 PM (2 h, 51 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26898282
Default Alt Text
D47130.diff (3 KB)
Attached To
Mode
D47130: tcp: remove the `goto drop` label by reusing equivalences in tcp_do_segment().
Attached
Detach File
Event Timeline
Log In to Comment