Bring m_align() from FreeBSD.
authorRui Paulo <rpaulo@FreeBSD.org>
Fri, 19 Feb 2010 12:50:20 +0000 (12:50 +0000)
committerRui Paulo <rpaulo@FreeBSD.org>
Fri, 19 Feb 2010 12:50:20 +0000 (12:50 +0000)
sys/kern/uipc_mbuf.c

index 17f3a8d..aa2ff75 100644 (file)
@@ -1412,6 +1412,25 @@ m_adj(struct mbuf *mp, int req_len)
        }
 }
 
+/*
+ * Set the m_data pointer of a newly-allocated mbuf
+ * to place an object of the specified size at the
+ * end of the mbuf, longword aligned.
+ */
+void
+m_align(struct mbuf *m, int len)
+{
+       int adjust;
+
+       if (m->m_flags & M_EXT)
+               adjust = m->m_ext.ext_size - len;
+       else if (m->m_flags & M_PKTHDR)
+               adjust = MHLEN - len;
+       else
+               adjust = MLEN - len;
+       m->m_data += adjust &~ (sizeof(long)-1);
+}
+
 /*
  * Rearrange an mbuf chain so that len bytes are contiguous
  * and in the data area of an mbuf (so that mtod will work for a structure