aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet/tcp_output.c
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2013-03-15 12:53:53 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2013-03-15 12:53:53 +0000
commit39f6074e2e41806ddf24108603d6d5ff2addcb81 (patch)
tree5e2c6a5ca0076dc6e27b417eedef8e5dc922bbd9 /sys/netinet/tcp_output.c
parentc69f77c339d888004b44276072e1e7b1b224c3cb (diff)
downloadsrc-39f6074e2e41806ddf24108603d6d5ff2addcb81.tar.gz
src-39f6074e2e41806ddf24108603d6d5ff2addcb81.zip
- Use m_getcl() instead of hand allocating.
Sponsored by: Nginx, Inc.
Notes
Notes: svn path=/head/; revision=248323
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 ac7ac3185292..e291bb308313 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;