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);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to