Index: head/sys/dev/en/midway.c =================================================================== --- head/sys/dev/en/midway.c +++ head/sys/dev/en/midway.c @@ -1935,7 +1935,7 @@ m->m_pkthdr.rcvif = NULL; m->m_pkthdr.len = pktlen; m->m_len = EN_RX1BUF; - MH_ALIGN(m, EN_RX1BUF); + M_ALIGN(m, EN_RX1BUF); if (m->m_len >= totlen) { m->m_len = totlen; Index: head/sys/dev/fatm/if_fatm.c =================================================================== --- head/sys/dev/fatm/if_fatm.c +++ head/sys/dev/fatm/if_fatm.c @@ -1105,7 +1105,7 @@ LIST_INSERT_HEAD(&sc->rbuf_free, rb, link); break; } - MH_ALIGN(m, SMALL_BUFFER_LEN); + M_ALIGN(m, SMALL_BUFFER_LEN); error = bus_dmamap_load(sc->rbuf_tag, rb->map, m->m_data, SMALL_BUFFER_LEN, dmaload_helper, &phys, BUS_DMA_NOWAIT); Index: head/sys/dev/iscsi_initiator/isc_soc.c =================================================================== --- head/sys/dev/iscsi_initiator/isc_soc.c +++ head/sys/dev/iscsi_initiator/isc_soc.c @@ -110,7 +110,7 @@ | Add any AHS to the iSCSI hdr mbuf */ if((mh->m_len + pp->ahs_len) < MHLEN) { - MH_ALIGN(mh, mh->m_len + pp->ahs_len); + M_ALIGN(mh, mh->m_len + pp->ahs_len); bcopy(&pp->ipdu, mh->m_data, mh->m_len); bcopy(pp->ahs_addr, mh->m_data + mh->m_len, pp->ahs_len); mh->m_len += pp->ahs_len; @@ -119,7 +119,7 @@ panic("len AHS=%d too big, not impleneted yet", pp->ahs_len); } else { - MH_ALIGN(mh, mh->m_len); + M_ALIGN(mh, mh->m_len); bcopy(&pp->ipdu, mh->m_data, mh->m_len); } mh->m_pkthdr.len = mh->m_len; Index: head/sys/dev/patm/if_patm_rx.c =================================================================== --- head/sys/dev/patm/if_patm_rx.c +++ head/sys/dev/patm/if_patm_rx.c @@ -471,7 +471,7 @@ default: case PATM_RAW_CELL: m->m_len = m->m_pkthdr.len = 53; - MH_ALIGN(m, 53); + M_ALIGN(m, 53); dst = mtod(m, u_char *); *dst++ = *cell++; *dst++ = *cell++; @@ -483,7 +483,7 @@ case PATM_RAW_NOHEC: m->m_len = m->m_pkthdr.len = 52; - MH_ALIGN(m, 52); + M_ALIGN(m, 52); dst = mtod(m, u_char *); *dst++ = *cell++; *dst++ = *cell++; @@ -494,7 +494,7 @@ case PATM_RAW_CS: m->m_len = m->m_pkthdr.len = 64; - MH_ALIGN(m, 64); + M_ALIGN(m, 64); dst = mtod(m, u_char *); *dst++ = *cell++; *dst++ = *cell++; Index: head/sys/kern/uipc_mbuf.c =================================================================== --- head/sys/kern/uipc_mbuf.c +++ head/sys/kern/uipc_mbuf.c @@ -574,13 +574,8 @@ m_move_pkthdr(mn, m); mn->m_next = m; m = mn; - if(m->m_flags & M_PKTHDR) { - if (len < MHLEN) - MH_ALIGN(m, len); - } else { - if (len < MLEN) - M_ALIGN(m, len); - } + if (len < M_SIZE(m)) + M_ALIGN(m, len); m->m_len = len; return (m); } @@ -1226,7 +1221,7 @@ goto extpacket; if (remain > MHLEN) { /* m can't be the lead packet */ - MH_ALIGN(n, 0); + M_ALIGN(n, 0); n->m_next = m_split(m, len, wait); if (n->m_next == NULL) { (void) m_free(n); @@ -1236,7 +1231,7 @@ return (n); } } else - MH_ALIGN(n, remain); + M_ALIGN(n, remain); } else if (remain == 0) { n = m->m_next; m->m_next = NULL; @@ -1888,33 +1883,6 @@ } /* - * 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) -{ -#ifdef INVARIANTS - const char *msg = "%s: not a virgin mbuf"; -#endif - int adjust; - - if (m->m_flags & M_EXT) { - KASSERT(m->m_data == m->m_ext.ext_buf, (msg, __func__)); - adjust = m->m_ext.ext_size - len; - } else if (m->m_flags & M_PKTHDR) { - KASSERT(m->m_data == m->m_pktdat, (msg, __func__)); - adjust = MHLEN - len; - } else { - KASSERT(m->m_data == m->m_dat, (msg, __func__)); - adjust = MLEN - len; - } - - m->m_data += adjust &~ (sizeof(long)-1); -} - -/* * Create a writable copy of the mbuf chain. While doing this * we compact the chain with a goal of producing a chain with * at most two mbufs. The second mbuf in this chain is likely Index: head/sys/net80211/ieee80211_freebsd.c =================================================================== --- head/sys/net80211/ieee80211_freebsd.c +++ head/sys/net80211/ieee80211_freebsd.c @@ -420,7 +420,7 @@ * frames which all fit in MHLEN. */ if (m != NULL) - MH_ALIGN(m, len); + M_ALIGN(m, len); } else { m = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR); if (m != NULL) Index: head/sys/netinet/if_ether.c =================================================================== --- head/sys/netinet/if_ether.c +++ head/sys/netinet/if_ether.c @@ -261,7 +261,7 @@ m->m_len = sizeof(*ah) + 2 * sizeof(struct in_addr) + 2 * ifp->if_addrlen; m->m_pkthdr.len = m->m_len; - MH_ALIGN(m, m->m_len); + M_ALIGN(m, m->m_len); ah = mtod(m, struct arphdr *); bzero((caddr_t)ah, m->m_len); #ifdef MAC Index: head/sys/netinet/igmp.c =================================================================== --- head/sys/netinet/igmp.c +++ head/sys/netinet/igmp.c @@ -2212,7 +2212,7 @@ m = m_gethdr(M_NOWAIT, MT_DATA); if (m == NULL) return (ENOMEM); - MH_ALIGN(m, sizeof(struct ip) + sizeof(struct igmp)); + M_ALIGN(m, sizeof(struct ip) + sizeof(struct igmp)); m->m_pkthdr.len = sizeof(struct ip) + sizeof(struct igmp); @@ -2793,7 +2793,7 @@ if (m == NULL) { m = m_gethdr(M_NOWAIT, MT_DATA); if (m) - MH_ALIGN(m, IGMP_LEADINGSPACE); + M_ALIGN(m, IGMP_LEADINGSPACE); } if (m == NULL) return (-ENOMEM); @@ -2917,7 +2917,7 @@ if (m == NULL) { m = m_gethdr(M_NOWAIT, MT_DATA); if (m) - MH_ALIGN(m, IGMP_LEADINGSPACE); + M_ALIGN(m, IGMP_LEADINGSPACE); } if (m == NULL) return (-ENOMEM); @@ -3073,7 +3073,7 @@ if (m == NULL) { m = m_gethdr(M_NOWAIT, MT_DATA); if (m) - MH_ALIGN(m, IGMP_LEADINGSPACE); + M_ALIGN(m, IGMP_LEADINGSPACE); } if (m == NULL) { CTR1(KTR_IGMPV3, Index: head/sys/netinet/ip_carp.c =================================================================== --- head/sys/netinet/ip_carp.c +++ head/sys/netinet/ip_carp.c @@ -840,7 +840,7 @@ m->m_pkthdr.len = len; m->m_pkthdr.rcvif = NULL; m->m_len = len; - MH_ALIGN(m, m->m_len); + M_ALIGN(m, m->m_len); m->m_flags |= M_MCAST; ip = mtod(m, struct ip *); ip->ip_v = IPVERSION; @@ -892,7 +892,7 @@ m->m_pkthdr.len = len; m->m_pkthdr.rcvif = NULL; m->m_len = len; - MH_ALIGN(m, m->m_len); + M_ALIGN(m, m->m_len); m->m_flags |= M_MCAST; ip6 = mtod(m, struct ip6_hdr *); bzero(ip6, sizeof(*ip6)); Index: head/sys/netinet/sctp_os_bsd.h =================================================================== --- head/sys/netinet/sctp_os_bsd.h +++ head/sys/netinet/sctp_os_bsd.h @@ -304,11 +304,7 @@ #define SCTP_BUF_RECVIF(m) (m->m_pkthdr.rcvif) #define SCTP_BUF_PREPEND M_PREPEND -#define SCTP_ALIGN_TO_END(m, len) if(m->m_flags & M_PKTHDR) { \ - MH_ALIGN(m, len); \ - } else if ((m->m_flags & M_EXT) == 0) { \ - M_ALIGN(m, len); \ - } +#define SCTP_ALIGN_TO_END(m, len) M_ALIGN(m, len) /* We make it so if you have up to 4 threads * writing based on the default size of Index: head/sys/netinet/tcp_output.c =================================================================== --- head/sys/netinet/tcp_output.c +++ head/sys/netinet/tcp_output.c @@ -1007,7 +1007,7 @@ #ifdef INET6 if (isipv6 && (MHLEN < hdrlen + max_linkhdr) && MHLEN >= hdrlen) { - MH_ALIGN(m, hdrlen); + M_ALIGN(m, hdrlen); } else #endif m->m_data += max_linkhdr; Index: head/sys/netinet6/ip6_output.c =================================================================== --- head/sys/netinet6/ip6_output.c +++ head/sys/netinet6/ip6_output.c @@ -2940,7 +2940,7 @@ return ENOBUFS; } m_move_pkthdr(mh, m); - MH_ALIGN(mh, sizeof(*ip6)); + M_ALIGN(mh, sizeof(*ip6)); m->m_len -= sizeof(*ip6); m->m_data += sizeof(*ip6); mh->m_next = m; Index: head/sys/netinet6/mld6.c =================================================================== --- head/sys/netinet6/mld6.c +++ head/sys/netinet6/mld6.c @@ -1818,7 +1818,7 @@ * that ether_output() does not need to allocate another mbuf * for the header in the most common case. */ - MH_ALIGN(mh, sizeof(struct ip6_hdr)); + M_ALIGN(mh, sizeof(struct ip6_hdr)); mh->m_pkthdr.len = sizeof(struct ip6_hdr) + sizeof(struct mld_hdr); mh->m_len = sizeof(struct ip6_hdr); @@ -3179,7 +3179,7 @@ m_freem(m); return (NULL); } - MH_ALIGN(mh, sizeof(struct ip6_hdr) + sizeof(struct mldv2_report)); + M_ALIGN(mh, sizeof(struct ip6_hdr) + sizeof(struct mldv2_report)); mldreclen = m_length(m, NULL); CTR2(KTR_MLD, "%s: mldreclen is %d", __func__, mldreclen); Index: head/sys/netinet6/nd6_nbr.c =================================================================== --- head/sys/netinet6/nd6_nbr.c +++ head/sys/netinet6/nd6_nbr.c @@ -431,7 +431,7 @@ icmp6len = sizeof(*nd_ns); m->m_pkthdr.len = m->m_len = sizeof(*ip6) + icmp6len; - m->m_data += max_linkhdr; /* or MH_ALIGN() equivalent? */ + m->m_data += max_linkhdr; /* or M_ALIGN() equivalent? */ /* fill neighbor solicitation packet */ ip6 = mtod(m, struct ip6_hdr *); @@ -1003,7 +1003,7 @@ icmp6len = sizeof(*nd_na); m->m_pkthdr.len = m->m_len = sizeof(struct ip6_hdr) + icmp6len; - m->m_data += max_linkhdr; /* or MH_ALIGN() equivalent? */ + m->m_data += max_linkhdr; /* or M_ALIGN() equivalent? */ /* fill neighbor advertisement packet */ ip6 = mtod(m, struct ip6_hdr *); Index: head/sys/sys/mbuf.h =================================================================== --- head/sys/sys/mbuf.h +++ head/sys/sys/mbuf.h @@ -810,42 +810,6 @@ ("%s: attempted use of a free mbuf!", __func__)) /* - * Set the m_data pointer of a newly-allocated mbuf (m_get/MGET) to place an - * object of the specified size at the end of the mbuf, longword aligned. - */ -#define M_ALIGN(m, len) do { \ - KASSERT(!((m)->m_flags & (M_PKTHDR|M_EXT)), \ - ("%s: M_ALIGN not normal mbuf", __func__)); \ - KASSERT((m)->m_data == (m)->m_dat, \ - ("%s: M_ALIGN not a virgin mbuf", __func__)); \ - (m)->m_data += (MLEN - (len)) & ~(sizeof(long) - 1); \ -} while (0) - -/* - * As above, for mbufs allocated with m_gethdr/MGETHDR or initialized by - * M_DUP/MOVE_PKTHDR. - */ -#define MH_ALIGN(m, len) do { \ - KASSERT((m)->m_flags & M_PKTHDR && !((m)->m_flags & M_EXT), \ - ("%s: MH_ALIGN not PKTHDR mbuf", __func__)); \ - KASSERT((m)->m_data == (m)->m_pktdat, \ - ("%s: MH_ALIGN not a virgin mbuf", __func__)); \ - (m)->m_data += (MHLEN - (len)) & ~(sizeof(long) - 1); \ -} while (0) - -/* - * As above, for mbuf with external storage. - */ -#define MEXT_ALIGN(m, len) do { \ - KASSERT((m)->m_flags & M_EXT, \ - ("%s: MEXT_ALIGN not an M_EXT mbuf", __func__)); \ - KASSERT((m)->m_data == (m)->m_ext.ext_buf, \ - ("%s: MEXT_ALIGN not a virgin mbuf", __func__)); \ - (m)->m_data += ((m)->m_ext.ext_size - (len)) & \ - ~(sizeof(long) - 1); \ -} while (0) - -/* * Return the address of the start of the buffer associated with an mbuf, * handling external storage, packet-header mbufs, and regular data mbufs. */ @@ -864,6 +828,41 @@ MLEN) /* + * 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. + * + * NB: Historically, we had M_ALIGN(), MH_ALIGN(), and MEXT_ALIGN() as + * separate macros, each asserting that it was called at the proper moment. + * This required callers to themselves test the storage type and call the + * right one. Rather than require callers to be aware of those layout + * decisions, we centralize here. + */ +static __inline void +m_align(struct mbuf *m, int len) +{ +#ifdef INVARIANTS + const char *msg = "%s: not a virgin mbuf"; +#endif + int adjust; + + KASSERT(m->m_data == M_START(m), (msg, __func__)); + + 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); +} + +#define M_ALIGN(m, len) m_align(m, len) +#define MH_ALIGN(m, len) m_align(m, len) +#define MEXT_ALIGN(m, len) m_align(m, len) + +/* * Compute the amount of space available before the current start of data in * an mbuf. *