summaryrefslogtreecommitdiffstats
path: root/sys/netinet6/ip6_input.c
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2013-03-15 12:33:23 +0000
committerglebius <glebius@FreeBSD.org>2013-03-15 12:33:23 +0000
commitace684a13202a960c7f5a15ff9d3604793bced5f (patch)
tree6e7806422a08895d3daea6fcce414df607e51d72 /sys/netinet6/ip6_input.c
parent9b5b993aea1b3a3be06fefb010355b869ce49aa8 (diff)
downloadFreeBSD-src-ace684a13202a960c7f5a15ff9d3604793bced5f.zip
FreeBSD-src-ace684a13202a960c7f5a15ff9d3604793bced5f.tar.gz
Use m_getcl() instead of hand made allocation.
Sponsored by: Nginx, Inc.
Diffstat (limited to 'sys/netinet6/ip6_input.c')
-rw-r--r--sys/netinet6/ip6_input.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/sys/netinet6/ip6_input.c b/sys/netinet6/ip6_input.c
index 45c4ff6..90a4f4e 100644
--- a/sys/netinet6/ip6_input.c
+++ b/sys/netinet6/ip6_input.c
@@ -497,21 +497,16 @@ ip6_input(struct mbuf *m)
if (m && m->m_next != NULL && m->m_pkthdr.len < MCLBYTES) {
struct mbuf *n;
- MGETHDR(n, M_NOWAIT, MT_HEADER);
- if (n)
- M_MOVE_PKTHDR(n, m);
- if (n && n->m_pkthdr.len > MHLEN) {
- MCLGET(n, M_NOWAIT);
- if ((n->m_flags & M_EXT) == 0) {
- m_freem(n);
- n = NULL;
- }
- }
+ if (m->m_pkthdr.len > MHLEN)
+ n = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR);
+ else
+ n = m_gethdr(M_NOWAIT, MT_DATA);
if (n == NULL) {
m_freem(m);
return; /* ENOBUFS */
}
+ M_MOVE_PKTHDR(n, m);
m_copydata(m, 0, n->m_pkthdr.len, mtod(n, caddr_t));
n->m_len = n->m_pkthdr.len;
m_freem(m);
OpenPOWER on IntegriCloud