Date: Fri, 15 Mar 2013 14:00:57 +0100 From: Andre Oppermann <andre@freebsd.org> To: Gleb Smirnoff <glebius@FreeBSD.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r248323 - head/sys/netinet Message-ID: <51431B89.5010501@freebsd.org> In-Reply-To: <201303151253.r2FCrsSs016150@svn.freebsd.org> References: <201303151253.r2FCrsSs016150@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 15.03.2013 13:53, Gleb Smirnoff wrote: > Author: glebius > Date: Fri Mar 15 12:53:53 2013 > New Revision: 248323 > URL: http://svnweb.freebsd.org/changeset/base/248323 > > Log: > - Use m_getcl() instead of hand allocating. > > Sponsored by: Nginx, Inc. > > Modified: > head/sys/netinet/tcp_output.c > > Modified: head/sys/netinet/tcp_output.c > ============================================================================== > --- head/sys/netinet/tcp_output.c Fri Mar 15 12:52:59 2013 (r248322) > +++ head/sys/netinet/tcp_output.c Fri Mar 15 12:53:53 2013 (r248323) > @@ -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); > + m = m_getm2(hdrlen + max_linkhdr, M_NOWAIT, MT_DATA, M_PKTHDR); would be even more compact. Since max_linkhdr could be large as well, the possibility of a cluster applies to IPv4 too. -- Andre > 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; > > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?51431B89.5010501>