==== //depot/user/bmilekic/mbuma/src/sys/kern/uipc_mbuf.c#3 - /home/hmp/perforce/mbuma/src/sys/kern/uipc_mbuf.c ==== @@ -668,25 +668,25 @@ while (totlen > 0) { if (top) { - MGET(m, M_DONTWAIT, MT_DATA); + if (totlen + off >= MINCLSIZE) { + m = m_getcl(M_DONTWAIT, MT_DATA, 0); + len = MCLBYTES; + } else { + m = m_get(M_DONTWAIT, MT_DATA); + len = MLEN; + } if (m == NULL) { m_freem(top); return (NULL); } - len = MLEN; } - if (totlen + off >= MINCLSIZE) { - MCLGET(m, M_DONTWAIT); - if (m->m_flags & M_EXT) - len = MCLBYTES; - } else { - /* - * Place initial small packet/header at end of mbuf. - */ - if (top == NULL && totlen + off + max_linkhdr <= len) { - m->m_data += max_linkhdr; - len -= max_linkhdr; - } + + /* + * Place initial small packet/header at end of mbuf. + */ + if (top == NULL && totlen + off + max_linkhdr <= len) { + m->m_data += max_linkhdr; + len -= max_linkhdr; } if (off) { m->m_data += off; ==== //depot/user/bmilekic/mbuma/src/sys/kern/uipc_socket2.c#2 - /home/hmp/perforce/mbuma/src/sys/kern/uipc_socket2.c ==== @@ -835,15 +835,13 @@ if (CMSG_SPACE((u_int)size) > MCLBYTES) return ((struct mbuf *) NULL); - if ((m = m_get(M_DONTWAIT, MT_CONTROL)) == NULL) - return ((struct mbuf *) NULL); - if (CMSG_SPACE((u_int)size) > MLEN) { - MCLGET(m, M_DONTWAIT); - if ((m->m_flags & M_EXT) == 0) { - m_free(m); - return ((struct mbuf *) NULL); - } - } + if (CMSG_SPACE((u_int)size) > MLEN) + m_getcl(M_DONTWAIT, MT_CONTROL, 0); /* Note; !M_PKTHDR */ + else + m_get(M_DONTWAIT, MT_CONTROL); + if (m == NULL) + return NULL; /* ENOBUFS */ + cp = mtod(m, struct cmsghdr *); m->m_len = 0; KASSERT(CMSG_SPACE((u_int)size) <= M_TRAILINGSPACE(m),