diff -ru /cvs/sys_old/netncp/ncp_rq.c /usr/src/sys/netncp/ncp_rq.c --- /cvs/sys_old/netncp/ncp_rq.c Sun Dec 24 16:01:24 2000 +++ /usr/src/sys/netncp/ncp_rq.c Sun Dec 24 20:02:52 2000 @@ -62,7 +62,7 @@ rqp->cred = cred; m = m_gethdr(M_TRYWAIT, MT_DATA); if (m == NULL) - return ENOBUFS; /* if M_TRYWAIT ? */ + return ENOBUFS; m->m_pkthdr.rcvif = NULL; rqp->rq = rqp->mrq = m; rqp->rp = NULL; @@ -107,13 +107,17 @@ while (rest > 0) { /* NCPSDEBUG("%d\n",rest);*/ m = m_get(M_TRYWAIT, MT_DATA); + if (m == NULL) { + m_freem(top); + return; + } if (rest > MINCLSIZE) { - MCLGET(m,M_TRYWAIT); + MCLGET(m, M_TRYWAIT); mlen = ( (m->m_flags & M_EXT) == 0) ? MLEN : MCLBYTES; } else { mlen = MLEN; } - m->m_len = 0/*min(mlen,rest)*/; + m->m_len = 0; /* min(mlen,rest) */ mp->m_next = m; mp = m; rest -= mlen; @@ -136,6 +140,8 @@ if (M_TRAILINGSPACE(rqp->mrq)<(size)) { struct mbuf *m; m = m_get(M_TRYWAIT, MT_DATA); + if (m == NULL) + return; m->m_len = 0; rqp->bpos = mtod(m, caddr_t); rqp->mrq->m_next = m; @@ -556,8 +562,23 @@ mlen = M_TRAILINGSPACE(mp); if (mlen == 0) { MGET(mp, M_TRYWAIT, MT_DATA); - if (clflg) + if (mp == NULL) { + if ((*mq)->m_next != NULL) + /* XXX: Is this OK? */ + m_freem((*mq)->m_next); + m_free(mp); + return ENOBUFS; + } + if (clflg) { MCLGET(mp, M_TRYWAIT); + if ((mp->m_ext & M_EXT) == 0) { + if ((*mq)->m_next != NULL) + /* XXX: Is this OK? */ + m_freem((*mq)->m_next); + m_free(mp); + return ENOBUFS; + } + } mp->m_len = 0; mp2->m_next = mp; mp2 = mp;