diff options
author | glebius <glebius@FreeBSD.org> | 2013-03-15 12:53:53 +0000 |
---|---|---|
committer | glebius <glebius@FreeBSD.org> | 2013-03-15 12:53:53 +0000 |
commit | d9a8b8e5e610631cff464a76929f0ff4de7dcff2 (patch) | |
tree | 5e2c6a5ca0076dc6e27b417eedef8e5dc922bbd9 | |
parent | 76306b34651c9b81d0d3bf6b97757c7373d3d636 (diff) | |
download | FreeBSD-src-d9a8b8e5e610631cff464a76929f0ff4de7dcff2.zip FreeBSD-src-d9a8b8e5e610631cff464a76929f0ff4de7dcff2.tar.gz |
- Use m_getcl() instead of hand allocating.
Sponsored by: Nginx, Inc.
-rw-r--r-- | sys/netinet/tcp_output.c | 20 |
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; |