summaryrefslogtreecommitdiffstats
path: root/sys/netinet/tcp_output.c
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2013-03-15 12:53:53 +0000
committerglebius <glebius@FreeBSD.org>2013-03-15 12:53:53 +0000
commitd9a8b8e5e610631cff464a76929f0ff4de7dcff2 (patch)
tree5e2c6a5ca0076dc6e27b417eedef8e5dc922bbd9 /sys/netinet/tcp_output.c
parent76306b34651c9b81d0d3bf6b97757c7373d3d636 (diff)
downloadFreeBSD-src-d9a8b8e5e610631cff464a76929f0ff4de7dcff2.zip
FreeBSD-src-d9a8b8e5e610631cff464a76929f0ff4de7dcff2.tar.gz
- Use m_getcl() instead of hand allocating.
Sponsored by: Nginx, Inc.
Diffstat (limited to 'sys/netinet/tcp_output.c')
-rw-r--r--sys/netinet/tcp_output.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c
index ac7ac31..e291bb3 100644
--- a/sys/netinet/tcp_output.c
+++ b/sys/netinet/tcp_output.c
@@ -842,23 +842,19 @@ send:
TCPSTAT_INC(tcps_sndpack);
TCPSTAT_ADD(tcps_sndbyte, len);
}
- MGETHDR(m, M_NOWAIT, MT_DATA);
+#ifdef INET6
+ if (MHLEN < hdrlen + max_linkhdr)
+ m = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR);
+ else
+#endif
+ m = m_gethdr(M_NOWAIT, MT_DATA);
+
if (m == NULL) {
SOCKBUF_UNLOCK(&so->so_snd);
error = ENOBUFS;
goto out;
}
-#ifdef INET6
- if (MHLEN < hdrlen + max_linkhdr) {
- MCLGET(m, M_NOWAIT);
- if ((m->m_flags & M_EXT) == 0) {
- SOCKBUF_UNLOCK(&so->so_snd);
- m_freem(m);
- error = ENOBUFS;
- goto out;
- }
- }
-#endif
+
m->m_data += max_linkhdr;
m->m_len = hdrlen;
OpenPOWER on IntegriCloud