svn commit: r248416 - head/sys/netinet/libalias

Gleb Smirnoff glebius at FreeBSD.org
Sun Mar 17 07:37:11 UTC 2013


Author: glebius
Date: Sun Mar 17 07:37:10 2013
New Revision: 248416
URL: http://svnweb.freebsd.org/changeset/base/248416

Log:
  In m_megapullup() instead of reserving some space at the end of packet,
  m_align() it, reserving space to prepend data.
  
  Reviewed by:	mav

Modified:
  head/sys/netinet/libalias/alias.c

Modified: head/sys/netinet/libalias/alias.c
==============================================================================
--- head/sys/netinet/libalias/alias.c	Sun Mar 17 07:28:17 2013	(r248415)
+++ head/sys/netinet/libalias/alias.c	Sun Mar 17 07:37:10 2013	(r248416)
@@ -1749,26 +1749,22 @@ LibAliasUnLoadAllModule(void)
 struct mbuf *
 m_megapullup(struct mbuf *m, int len) {
 	struct mbuf *mcl;
-	
+
 	if (len > m->m_pkthdr.len)
 		goto bad;
-	
-	/* Do not reallocate packet if it is sequentional,
-	 * writable and has some extra space for expansion.
-	 * XXX: Constant 100bytes is completely empirical. */
-#define	RESERVE 100
-	if (m->m_next == NULL && M_WRITABLE(m) && M_TRAILINGSPACE(m) >= RESERVE)
+
+	if (m->m_next == NULL && M_WRITABLE(m))
 		return (m);
 
-	mcl = m_get2(len + RESERVE, M_NOWAIT, MT_DATA, M_PKTHDR);
+	mcl = m_get2(len, M_NOWAIT, MT_DATA, M_PKTHDR);
 	if (mcl == NULL)
 		goto bad;
- 
+	m_align(mcl, len);
 	m_move_pkthdr(mcl, m);
 	m_copydata(m, 0, len, mtod(mcl, caddr_t));
 	mcl->m_len = mcl->m_pkthdr.len = len;
 	m_freem(m);
- 
+
 	return (mcl);
 bad:
 	m_freem(m);


More information about the svn-src-all mailing list