* Rename M_WAIT mbuf subsystem flag to M_TRYWAIT.

This is because calls with M_WAIT (now M_TRYWAIT) may not wait
  forever when nothing is available for allocation, and may end up
  returning NULL. Hopefully we now communicate more of the right thing
  to developers and make it very clear that it's necessary to check whether
  calls with M_(TRY)WAIT also resulted in a failed allocation.
  M_TRYWAIT basically means "try harder, block if necessary, but don't
  necessarily wait forever." The time spent blocking is tunable with
  the kern.ipc.mbuf_wait sysctl.
  M_WAIT is now deprecated but still defined for the next little while.

* Fix a typo in a comment in mbuf.h

* Fix some code that was actually passing the mbuf subsystem's M_WAIT to
  malloc(). Made it pass M_WAITOK instead. If we were ever to redefine the
  value of the M_WAIT flag, this could have became a big problem.
This commit is contained in:
Bosko Milekic 2000-12-21 21:44:31 +00:00
parent b3a120de36
commit 2a0c503e7a
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=70254
51 changed files with 198 additions and 197 deletions

View File

@ -1207,8 +1207,8 @@ musycc_connect(hook_p hook)
sc->mdt[ch][i].m = NULL;
sc->mdt[ch][i].data = 0;
MGETHDR(m, M_WAIT, MT_DATA);
MCLGET(m, M_WAIT);
MGETHDR(m, M_TRYWAIT, MT_DATA);
MCLGET(m, M_TRYWAIT);
sc->mdr[ch][i].m = m;
sc->mdr[ch][i].data = vtophys(m->m_data);
sc->mdr[ch][i].status = 1600; /* MTU */

View File

@ -206,8 +206,8 @@ m_alloc_ref(nmb, how)
nbytes = round_page(nmb * sizeof(union mext_refcnt));
mtx_exit(&mcntfree.m_mtx, MTX_DEF);
mtx_enter(&Giant, MTX_DEF);
if ((p = (caddr_t)kmem_malloc(mb_map, nbytes, how == M_WAIT ? M_WAIT :
M_NOWAIT)) == NULL) {
if ((p = (caddr_t)kmem_malloc(mb_map, nbytes, how == M_TRYWAIT ?
M_WAITOK : M_NOWAIT)) == NULL) {
mtx_exit(&Giant, MTX_DEF);
mtx_enter(&mcntfree.m_mtx, MTX_DEF); /* XXX: We must be holding
it going out. */
@ -265,11 +265,11 @@ m_mballoc(nmb, how)
nbytes = round_page(nmb * MSIZE);
/* XXX: The letting go of the mmbfree lock here may eventually
be moved to only be done for M_WAIT calls to kmem_malloc() */
be moved to only be done for M_TRYWAIT calls to kmem_malloc() */
mtx_exit(&mmbfree.m_mtx, MTX_DEF);
mtx_enter(&Giant, MTX_DEF);
p = (caddr_t)kmem_malloc(mb_map, nbytes, M_NOWAIT);
if (p == 0 && how == M_WAIT) {
if (p == 0 && how == M_TRYWAIT) {
atomic_add_long(&mbstat.m_wait, 1);
p = (caddr_t)kmem_malloc(mb_map, nbytes, M_WAITOK);
}
@ -302,8 +302,8 @@ m_mballoc(nmb, how)
/*
* Once the mb_map has been exhausted and if the call to the allocation macros
* (or, in some cases, functions) is with M_WAIT, then it is necessary to rely
* solely on reclaimed mbufs.
* (or, in some cases, functions) is with M_TRYWAIT, then it is necessary to
* rely solely on reclaimed mbufs.
*
* Here we request for the protocols to free up some resources and, if we
* still cannot get anything, then we wait for an mbuf to be freed for a
@ -385,7 +385,7 @@ m_clalloc(ncl, how)
mtx_exit(&mclfree.m_mtx, MTX_DEF);
mtx_enter(&Giant, MTX_DEF);
p = (caddr_t)kmem_malloc(mb_map, ctob(npg),
how != M_WAIT ? M_NOWAIT : M_WAITOK);
how == M_TRYWAIT ? M_WAITOK : M_NOWAIT);
mtx_exit(&Giant, MTX_DEF);
ncl = ncl * PAGE_SIZE / MCLBYTES;
mtx_enter(&mclfree.m_mtx, MTX_DEF);
@ -414,7 +414,7 @@ m_clalloc(ncl, how)
/*
* Once the mb_map submap has been exhausted and the allocation is called with
* M_WAIT, we rely on the mclfree list. If nothing is free, we will
* M_TRYWAIT, we rely on the mclfree list. If nothing is free, we will
* sleep for a designated amount of time (mbuf_wait) or until we're woken up
* due to sudden mcluster availability.
*
@ -578,7 +578,7 @@ m_prepend(m, len, how)
/*
* Make a copy of an mbuf chain starting "off0" bytes from the beginning,
* continuing for "len" bytes. If len is M_COPYALL, copy to end of mbuf.
* The wait parameter is a choice of M_WAIT/M_DONTWAIT from caller.
* The wait parameter is a choice of M_TRYWAIT/M_DONTWAIT from caller.
* Note that the copy is read-only, because clusters are not copied,
* only their reference counts are incremented.
*/

View File

@ -558,7 +558,7 @@ sosend(so, addr, uio, top, control, flags, p)
top->m_flags |= M_EOR;
} else do {
if (top == 0) {
MGETHDR(m, M_WAIT, MT_DATA);
MGETHDR(m, M_TRYWAIT, MT_DATA);
if (m == NULL) {
error = ENOBUFS;
goto release;
@ -567,7 +567,7 @@ sosend(so, addr, uio, top, control, flags, p)
m->m_pkthdr.len = 0;
m->m_pkthdr.rcvif = (struct ifnet *)0;
} else {
MGET(m, M_WAIT, MT_DATA);
MGET(m, M_TRYWAIT, MT_DATA);
if (m == NULL) {
error = ENOBUFS;
goto release;
@ -575,7 +575,7 @@ sosend(so, addr, uio, top, control, flags, p)
mlen = MLEN;
}
if (resid >= MINCLSIZE) {
MCLGET(m, M_WAIT);
MCLGET(m, M_TRYWAIT);
if ((m->m_flags & M_EXT) == 0)
goto nopages;
mlen = MCLBYTES;
@ -695,7 +695,7 @@ soreceive(so, psa, uio, mp0, controlp, flagsp)
else
flags = 0;
if (flags & MSG_OOB) {
m = m_get(M_WAIT, MT_DATA);
m = m_get(M_TRYWAIT, MT_DATA);
if (m == NULL)
return (ENOBUFS);
error = (*pr->pr_usrreqs->pru_rcvoob)(so, m, flags & MSG_PEEK);
@ -887,7 +887,7 @@ soreceive(so, psa, uio, mp0, controlp, flagsp)
moff += len;
else {
if (mp)
*mp = m_copym(m, 0, len, M_WAIT);
*mp = m_copym(m, 0, len, M_TRYWAIT);
m->m_data += len;
m->m_len -= len;
so->so_rcv.sb_cc -= len;
@ -1390,11 +1390,11 @@ soopt_getm(struct sockopt *sopt, struct mbuf **mp)
struct mbuf *m, *m_prev;
int sopt_size = sopt->sopt_valsize;
MGET(m, sopt->sopt_p ? M_WAIT : M_DONTWAIT, MT_DATA);
MGET(m, sopt->sopt_p ? M_TRYWAIT : M_DONTWAIT, MT_DATA);
if (m == 0)
return ENOBUFS;
if (sopt_size > MLEN) {
MCLGET(m, sopt->sopt_p ? M_WAIT : M_DONTWAIT);
MCLGET(m, sopt->sopt_p ? M_TRYWAIT : M_DONTWAIT);
if ((m->m_flags & M_EXT) == 0) {
m_free(m);
return ENOBUFS;
@ -1408,13 +1408,13 @@ soopt_getm(struct sockopt *sopt, struct mbuf **mp)
m_prev = m;
while (sopt_size) {
MGET(m, sopt->sopt_p ? M_WAIT : M_DONTWAIT, MT_DATA);
MGET(m, sopt->sopt_p ? M_TRYWAIT : M_DONTWAIT, MT_DATA);
if (m == 0) {
m_freem(*mp);
return ENOBUFS;
}
if (sopt_size > MLEN) {
MCLGET(m, sopt->sopt_p ? M_WAIT : M_DONTWAIT);
MCLGET(m, sopt->sopt_p ? M_TRYWAIT : M_DONTWAIT);
if ((m->m_flags & M_EXT) == 0) {
m_freem(*mp);
return ENOBUFS;

View File

@ -548,7 +548,7 @@ sendit(p, s, mp, flags)
if (mp->msg_flags == MSG_COMPAT) {
register struct cmsghdr *cm;
M_PREPEND(control, sizeof(*cm), M_WAIT);
M_PREPEND(control, sizeof(*cm), M_TRYWAIT);
if (control == 0) {
error = ENOBUFS;
goto bad;
@ -1331,7 +1331,7 @@ sockargs(mp, buf, buflen, type)
#endif
return (EINVAL);
}
m = m_get(M_WAIT, type);
m = m_get(M_TRYWAIT, type);
if (m == NULL)
return (ENOBUFS);
m->m_len = buflen;
@ -1702,7 +1702,7 @@ sendfile(struct proc *p, struct sendfile_args *uap)
/*
* Get an mbuf header and set it up as having external storage.
*/
MGETHDR(m, M_WAIT, MT_DATA);
MGETHDR(m, M_TRYWAIT, MT_DATA);
if (m == NULL) {
error = ENOBUFS;
sf_buf_free((void *)sf->kva, NULL);

View File

@ -1017,7 +1017,7 @@ unp_internalize(control, p)
if (newlen - control->m_len > M_TRAILINGSPACE(control)) {
if (control->m_flags & M_EXT)
return (E2BIG);
MCLGET(control, M_WAIT);
MCLGET(control, M_TRYWAIT);
if ((control->m_flags & M_EXT) == 0)
return (ENOBUFS);

View File

@ -231,12 +231,12 @@ bpf_movein(uio, linktype, mp, sockp, datlen)
if ((unsigned)len > MCLBYTES)
return (EIO);
MGETHDR(m, M_WAIT, MT_DATA);
MGETHDR(m, M_TRYWAIT, MT_DATA);
if (m == 0)
return (ENOBUFS);
if (len > MHLEN) {
#if BSD >= 199103
MCLGET(m, M_WAIT);
MCLGET(m, M_TRYWAIT);
if ((m->m_flags & M_EXT) == 0) {
#else
MCLGET(m);

View File

@ -46,7 +46,7 @@
*/
#define malloc(size, type, canwait) bpf_alloc(size, canwait)
#define free(cp, type) m_free(*(struct mbuf **)(cp - 8))
#define M_WAITOK M_WAIT
#define M_WAITOK M_TRYWAIT
/* This mapping works for our purposes. */
#define ERESTART EINTR

View File

@ -439,7 +439,7 @@ ef_output(struct ifnet *ifp, struct mbuf **mp, struct sockaddr *dst, short *tp,
type = htons(m->m_pkthdr.len);
break;
case ETHER_FT_8022:
M_PREPEND(m, ETHER_HDR_LEN + 3, M_WAIT);
M_PREPEND(m, ETHER_HDR_LEN + 3, M_TRYWAIT);
if (m == NULL) {
*mp = NULL;
return ENOBUFS;
@ -462,7 +462,7 @@ ef_output(struct ifnet *ifp, struct mbuf **mp, struct sockaddr *dst, short *tp,
*hlen += 3;
break;
case ETHER_FT_SNAP:
M_PREPEND(m, 8, M_WAIT);
M_PREPEND(m, 8, M_TRYWAIT);
if (m == NULL) {
*mp = NULL;
return ENOBUFS;

View File

@ -221,7 +221,7 @@ ether_output(ifp, m, dst, rt0)
if ( aa->aa_flags & AFA_PHASE2 ) {
struct llc llc;
M_PREPEND(m, sizeof(struct llc), M_WAIT);
M_PREPEND(m, sizeof(struct llc), M_TRYWAIT);
llc.llc_dsap = llc.llc_ssap = LLC_SNAP_LSAP;
llc.llc_control = LLC_UI;
bcopy(at_org_code, llc.llc_snap_org_code, sizeof(at_org_code));
@ -246,7 +246,7 @@ ether_output(ifp, m, dst, rt0)
type = htons( m->m_pkthdr.len);
break;
case 0xe0e0: /* Novell 802.2 and Token-Ring */
M_PREPEND(m, 3, M_WAIT);
M_PREPEND(m, 3, M_TRYWAIT);
type = htons( m->m_pkthdr.len);
cp = mtod(m, u_char *);
*cp++ = 0xE0;

View File

@ -213,7 +213,7 @@ fddi_output(ifp, m, dst, rt0)
if (aa->aa_flags & AFA_PHASE2) {
struct llc llc;
M_PREPEND(m, sizeof(struct llc), M_WAIT);
M_PREPEND(m, sizeof(struct llc), M_TRYWAIT);
if (m == 0)
senderr(ENOBUFS);
llc.llc_dsap = llc.llc_ssap = LLC_SNAP_LSAP;

View File

@ -118,7 +118,7 @@ gifattach(dummy)
register int i;
ngif = NGIF;
gif = sc = malloc (ngif * sizeof(struct gif_softc), M_DEVBUF, M_WAIT);
gif = sc = malloc (ngif * sizeof(struct gif_softc), M_DEVBUF, M_WAITOK);
bzero(sc, ngif * sizeof(struct gif_softc));
for (i = 0; i < ngif; sc++, i++) {
sc->gif_if.if_name = "gif";

View File

@ -253,9 +253,9 @@ slcreate()
MALLOC(sc, struct sl_softc *, sizeof(*sc), M_SL, M_WAITOK | M_ZERO);
m = m_gethdr(M_WAIT, MT_DATA);
m = m_gethdr(M_TRYWAIT, MT_DATA);
if (m != NULL) {
MCLGET(m, M_WAIT);
MCLGET(m, M_TRYWAIT);
if ((m->m_flags & M_EXT) == 0) {
m_free(m);
m = NULL;

View File

@ -173,7 +173,7 @@ stfattach(dummy)
const struct encaptab *p;
nstf = NSTF;
stf = malloc(nstf * sizeof(struct stf_softc), M_DEVBUF, M_WAIT);
stf = malloc(nstf * sizeof(struct stf_softc), M_DEVBUF, M_WAITOK);
bzero(stf, nstf * sizeof(struct stf_softc));
sc = stf;

View File

@ -391,7 +391,7 @@ pppwrite(tp, uio, flag)
s = spltty();
for (mp = &m0; uio->uio_resid; mp = &m->m_next) {
MGET(m, M_WAIT, MT_DATA);
MGET(m, M_TRYWAIT, MT_DATA);
if ((*mp = m) == NULL) {
m_freem(m0);
splx(s);

View File

@ -161,7 +161,7 @@ aarpwhohas( struct arpcom *ac, struct sockaddr_at *sat )
bcopy((caddr_t)atmulticastaddr, (caddr_t)eh->ether_dhost,
sizeof( eh->ether_dhost ));
eh->ether_type = htons(sizeof(struct llc) + sizeof(struct ether_aarp));
M_PREPEND( m, sizeof( struct llc ), M_WAIT );
M_PREPEND( m, sizeof( struct llc ), M_TRYWAIT );
llc = mtod( m, struct llc *);
llc->llc_dsap = llc->llc_ssap = LLC_SNAP_LSAP;
llc->llc_control = LLC_UI;
@ -571,7 +571,7 @@ aarpprobe( void *arg )
sizeof( eh->ether_dhost ));
eh->ether_type = htons( sizeof( struct llc ) +
sizeof( struct ether_aarp ));
M_PREPEND( m, sizeof( struct llc ), M_WAIT );
M_PREPEND( m, sizeof( struct llc ), M_TRYWAIT );
llc = mtod( m, struct llc *);
llc->llc_dsap = llc->llc_ssap = LLC_SNAP_LSAP;
llc->llc_control = LLC_UI;

View File

@ -48,7 +48,7 @@ ddp_output( struct mbuf *m, struct socket *so)
struct ddpehdr *deh;
struct ddpcb *ddp = sotoddpcb( so );
M_PREPEND( m, sizeof( struct ddpehdr ), M_WAIT );
M_PREPEND( m, sizeof( struct ddpehdr ), M_TRYWAIT );
deh = mtod( m, struct ddpehdr *);
deh->deh_pad = 0;
@ -189,7 +189,7 @@ ddp_route( struct mbuf *m, struct route *ro)
* packets end up poorly aligned due to the three byte elap header.
*/
if ( !(aa->aa_flags & AFA_PHASE2) ) {
MGET( m0, M_WAIT, MT_HEADER );
MGET( m0, M_TRYWAIT, MT_HEADER );
if ( m0 == 0 ) {
m_freem( m );
printf("ddp_route: no buffers\n");

View File

@ -210,7 +210,7 @@
#include <sys/mbuf.h>
typedef struct mbuf KBuffer;
#define KB_F_WAIT M_WAIT
#define KB_F_WAIT M_TRYWAIT
#define KB_F_NOWAIT M_DONTWAIT
#define KB_T_HEADER MT_HEADER

View File

@ -1115,7 +1115,7 @@ ip_ctloutput(so, sopt)
error = EMSGSIZE;
break;
}
MGET(m, sopt->sopt_p ? M_WAIT : M_DONTWAIT, MT_HEADER);
MGET(m, sopt->sopt_p ? M_TRYWAIT : M_DONTWAIT, MT_HEADER);
if (m == 0) {
error = ENOBUFS;
break;

View File

@ -195,7 +195,7 @@ rip_output(m, so, dst)
m_freem(m);
return(EMSGSIZE);
}
M_PREPEND(m, sizeof(struct ip), M_WAIT);
M_PREPEND(m, sizeof(struct ip), M_TRYWAIT);
ip = mtod(m, struct ip *);
ip->ip_tos = 0;
ip->ip_off = 0;

View File

@ -1045,11 +1045,11 @@ ip6_fw_ctl(int stage, struct mbuf **mm)
if (stage == IPV6_FW_GET) {
struct ip6_fw_chain *fcp = ip6_fw_chain.lh_first;
*mm = m = m_get(M_WAIT, MT_DATA); /* XXX */
*mm = m = m_get(M_TRYWAIT, MT_DATA); /* XXX */
if (!m)
return(ENOBUFS);
if (sizeof *(fcp->rule) > MLEN) {
MCLGET(m, M_WAIT);
MCLGET(m, M_TRYWAIT);
if ((m->m_flags & M_EXT) == 0) {
m_free(m);
return(ENOBUFS);
@ -1058,14 +1058,14 @@ ip6_fw_ctl(int stage, struct mbuf **mm)
for (; fcp; fcp = fcp->chain.le_next) {
memcpy(m->m_data, fcp->rule, sizeof *(fcp->rule));
m->m_len = sizeof *(fcp->rule);
m->m_next = m_get(M_WAIT, MT_DATA); /* XXX */
m->m_next = m_get(M_TRYWAIT, MT_DATA); /* XXX */
if (!m->m_next) {
m_freem(*mm);
return(ENOBUFS);
}
m = m->m_next;
if (sizeof *(fcp->rule) > MLEN) {
MCLGET(m, M_WAIT);
MCLGET(m, M_TRYWAIT);
if ((m->m_flags & M_EXT) == 0) {
m_freem(*mm);
return(ENOBUFS);

View File

@ -1330,7 +1330,7 @@ ip6_ctloutput(so, sopt)
break;
}
/* XXX */
MGET(m, sopt->sopt_p ? M_WAIT : M_DONTWAIT, MT_HEADER);
MGET(m, sopt->sopt_p ? M_TRYWAIT : M_DONTWAIT, MT_HEADER);
if (m == 0) {
error = ENOBUFS;
break;
@ -1920,7 +1920,7 @@ ip6_getmoptions(optname, im6o, mp)
{
u_int *hlim, *loop, *ifindex;
*mp = m_get(M_WAIT, MT_HEADER); /*XXX*/
*mp = m_get(M_TRYWAIT, MT_HEADER); /*XXX*/
switch (optname) {

View File

@ -333,7 +333,7 @@ rip6_output(m, va_alist)
code = icmp6->icmp6_code;
}
M_PREPEND(m, sizeof(*ip6), M_WAIT);
M_PREPEND(m, sizeof(*ip6), M_TRYWAIT);
ip6 = mtod(m, struct ip6_hdr *);
/*

View File

@ -751,7 +751,7 @@ spx_output(cb, m0)
* from usrreq(), so it is OK to
* block.
*/
m = m_copym(m0, 0, mtu, M_WAIT);
m = m_copym(m0, 0, mtu, M_TRYWAIT);
if (cb->s_flags & SF_NEWCALL) {
struct mbuf *mm = m;
spx_newchecks[7]++;

View File

@ -60,9 +60,9 @@ ncp_rq_head(struct ncp_rq *rqp, u_int32_t ptype, u_int8_t fn,struct proc *p,
bzero(rqp, sizeof(*rqp));
rqp->p = p;
rqp->cred = cred;
m = m_gethdr(M_WAIT, MT_DATA);
m = m_gethdr(M_TRYWAIT, MT_DATA);
if (m == NULL)
return ENOBUFS; /* if M_WAIT ? */
return ENOBUFS; /* if M_TRYWAIT ? */
m->m_pkthdr.rcvif = NULL;
rqp->rq = rqp->mrq = m;
rqp->rp = NULL;
@ -106,9 +106,9 @@ m_getm(struct mbuf *top, int len) {
mp = top;
while (rest > 0) {
/* NCPSDEBUG("%d\n",rest);*/
m = m_get(M_WAIT, MT_DATA);
m = m_get(M_TRYWAIT, MT_DATA);
if (rest > MINCLSIZE) {
MCLGET(m,M_WAIT);
MCLGET(m,M_TRYWAIT);
mlen = ( (m->m_flags & M_EXT) == 0) ? MLEN : MCLBYTES;
} else {
mlen = MLEN;
@ -135,7 +135,7 @@ ncp_mchecksize(struct ncp_rq *rqp, int size) {
panic("ncp_mchecksize\n");
if (M_TRAILINGSPACE(rqp->mrq)<(size)) {
struct mbuf *m;
m = m_get(M_WAIT, MT_DATA);
m = m_get(M_TRYWAIT, MT_DATA);
m->m_len = 0;
rqp->bpos = mtod(m, caddr_t);
rqp->mrq->m_next = m;
@ -435,7 +435,7 @@ ncp_rp_mbuf(struct ncp_rq *rqp, int size) {
register struct mbuf *m=rqp->mrp, *rm;
register unsigned count;
rm = m_copym(m, rqp->bpos - mtod(m,caddr_t), size, M_WAIT);
rm = m_copym(m, rqp->bpos - mtod(m,caddr_t), size, M_TRYWAIT);
while (size > 0) {
if (m == 0) {
printf("ncp_rp_mbuf: can't advance\n");
@ -555,9 +555,9 @@ nwfs_uiotombuf(uiop, mq, siz, bpos)
while (left > 0) {
mlen = M_TRAILINGSPACE(mp);
if (mlen == 0) {
MGET(mp, M_WAIT, MT_DATA);
MGET(mp, M_TRYWAIT, MT_DATA);
if (clflg)
MCLGET(mp, M_WAIT);
MCLGET(mp, M_TRYWAIT);
mp->m_len = 0;
mp2->m_next = mp;
mp2 = mp;

View File

@ -171,7 +171,7 @@ ncp_sock_send(struct socket *so, struct mbuf *top, struct ncp_rq *rqp)
int sendwait;
for(;;) {
m = m_copym(top, 0, M_COPYALL, M_WAIT);
m = m_copym(top, 0, M_COPYALL, M_TRYWAIT);
/* NCPDDEBUG(m);*/
error = so->so_proto->pr_usrreqs->pru_sosend(so, to, 0, m, 0, flags, p);
if (error == 0 || error == EINTR || error == ENETDOWN)

View File

@ -743,7 +743,7 @@ spp_output(cb, m0)
* from usrreq(), so it is OK to
* block.
*/
m = m_copym(m0, 0, mtu, M_WAIT);
m = m_copym(m0, 0, mtu, M_TRYWAIT);
if (cb->s_flags & SF_NEWCALL) {
struct mbuf *mm = m;
spp_newchecks[7]++;

View File

@ -1755,7 +1755,7 @@ md_lookup_swap(struct sockaddr_in *mdsin, /* mountd server address */
u_int32_t v3[21];
} fattribs;
m = m_get(M_WAIT,MT_DATA);
m = m_get(M_TRYWAIT,MT_DATA);
if (m == NULL)
return ENOBUFS;

View File

@ -149,7 +149,7 @@ krpc_portmap(sin, prog, vers, portp, procp)
return 0;
}
m = m_get(M_WAIT, MT_DATA);
m = m_get(M_TRYWAIT, MT_DATA);
if (m == NULL)
return ENOBUFS;
sdata = mtod(m, struct sdata *);
@ -275,7 +275,7 @@ krpc_call(sa, prog, vers, func, data, from_p, procp)
/*
* Prepend RPC message header.
*/
mhead = m_gethdr(M_WAIT, MT_DATA);
mhead = m_gethdr(M_TRYWAIT, MT_DATA);
mhead->m_next = *data;
call = mtod(mhead, struct rpc_call *);
mhead->m_len = sizeof(*call);
@ -315,7 +315,7 @@ krpc_call(sa, prog, vers, func, data, from_p, procp)
timo = 0;
for (;;) {
/* Send RPC request (or re-send). */
m = m_copym(mhead, 0, M_COPYALL, M_WAIT);
m = m_copym(mhead, 0, M_COPYALL, M_TRYWAIT);
if (m == NULL) {
error = ENOBUFS;
goto out;
@ -471,9 +471,9 @@ xdr_string_encode(str, len)
if (mlen > MCLBYTES) /* If too big, we just can't do it. */
return (NULL);
m = m_get(M_WAIT, MT_DATA);
m = m_get(M_TRYWAIT, MT_DATA);
if (mlen > MLEN) {
MCLGET(m, M_WAIT);
MCLGET(m, M_TRYWAIT);
if ((m->m_flags & M_EXT) == 0) {
(void) m_free(m); /* There can be only one. */
return (NULL);

View File

@ -588,9 +588,9 @@ nfsm_reqh(vp, procid, hsiz, bposp)
struct nfsmount *nmp;
int nqflag;
MGET(mb, M_WAIT, MT_DATA);
MGET(mb, M_TRYWAIT, MT_DATA);
if (hsiz >= MINCLSIZE)
MCLGET(mb, M_WAIT);
MCLGET(mb, M_TRYWAIT);
mb->m_len = 0;
bpos = mtod(mb, caddr_t);
@ -646,9 +646,9 @@ nfsm_rpchead(cr, nmflag, procid, auth_type, auth_len, auth_str, verf_len,
int siz, grpsiz, authsiz;
authsiz = nfsm_rndup(auth_len);
MGETHDR(mb, M_WAIT, MT_DATA);
MGETHDR(mb, M_TRYWAIT, MT_DATA);
if ((authsiz + 10 * NFSX_UNSIGNED) >= MINCLSIZE) {
MCLGET(mb, M_WAIT);
MCLGET(mb, M_TRYWAIT);
} else if ((authsiz + 10 * NFSX_UNSIGNED) < MHLEN) {
MH_ALIGN(mb, authsiz + 10 * NFSX_UNSIGNED);
} else {
@ -711,9 +711,9 @@ nfsm_rpchead(cr, nmflag, procid, auth_type, auth_len, auth_str, verf_len,
siz = auth_len;
while (siz > 0) {
if (M_TRAILINGSPACE(mb) == 0) {
MGET(mb2, M_WAIT, MT_DATA);
MGET(mb2, M_TRYWAIT, MT_DATA);
if (siz >= MINCLSIZE)
MCLGET(mb2, M_WAIT);
MCLGET(mb2, M_TRYWAIT);
mb->m_next = mb2;
mb = mb2;
mb->m_len = 0;
@ -744,9 +744,9 @@ nfsm_rpchead(cr, nmflag, procid, auth_type, auth_len, auth_str, verf_len,
siz = verf_len;
while (siz > 0) {
if (M_TRAILINGSPACE(mb) == 0) {
MGET(mb2, M_WAIT, MT_DATA);
MGET(mb2, M_TRYWAIT, MT_DATA);
if (siz >= MINCLSIZE)
MCLGET(mb2, M_WAIT);
MCLGET(mb2, M_TRYWAIT);
mb->m_next = mb2;
mb = mb2;
mb->m_len = 0;
@ -887,9 +887,9 @@ nfsm_uiotombuf(uiop, mq, siz, bpos)
while (left > 0) {
mlen = M_TRAILINGSPACE(mp);
if (mlen == 0) {
MGET(mp, M_WAIT, MT_DATA);
MGET(mp, M_TRYWAIT, MT_DATA);
if (clflg)
MCLGET(mp, M_WAIT);
MCLGET(mp, M_TRYWAIT);
mp->m_len = 0;
mp2->m_next = mp;
mp2 = mp;
@ -919,7 +919,7 @@ nfsm_uiotombuf(uiop, mq, siz, bpos)
}
if (rem > 0) {
if (rem > M_TRAILINGSPACE(mp)) {
MGET(mp, M_WAIT, MT_DATA);
MGET(mp, M_TRYWAIT, MT_DATA);
mp->m_len = 0;
mp2->m_next = mp;
}
@ -968,7 +968,7 @@ nfsm_disct(mdp, dposp, siz, left, cp2)
} else if (siz > MHLEN) {
panic("nfs S too big");
} else {
MGET(mp2, M_WAIT, MT_DATA);
MGET(mp2, M_TRYWAIT, MT_DATA);
mp2->m_next = mp->m_next;
mp->m_next = mp2;
mp->m_len -= left;
@ -1061,9 +1061,9 @@ nfsm_strtmbuf(mb, bpos, cp, siz)
}
/* Loop around adding mbufs */
while (siz > 0) {
MGET(m1, M_WAIT, MT_DATA);
MGET(m1, M_TRYWAIT, MT_DATA);
if (siz > MLEN)
MCLGET(m1, M_WAIT);
MCLGET(m1, M_TRYWAIT);
m1->m_len = NFSMSIZ(m1);
m2->m_next = m1;
m2 = m1;

View File

@ -94,7 +94,7 @@ struct mbuf *nfsm_rpchead __P((struct ucred *cr, int nmflag, int procid,
#define nfsm_build(a,c,s) \
do { \
if ((s) > M_TRAILINGSPACE(mb)) { \
MGET(mb2, M_WAIT, MT_DATA); \
MGET(mb2, M_TRYWAIT, MT_DATA); \
if ((s) > MLEN) \
panic("build > MLEN"); \
mb->m_next = mb2; \
@ -491,8 +491,8 @@ struct mbuf *nfsm_rpchead __P((struct ucred *cr, int nmflag, int procid,
if (bp >= be) { \
if (mp == mb) \
mp->m_len += bp-bpos; \
MGET(mp, M_WAIT, MT_DATA); \
MCLGET(mp, M_WAIT); \
MGET(mp, M_TRYWAIT, MT_DATA); \
MCLGET(mp, M_TRYWAIT); \
mp->m_len = NFSMSIZ(mp); \
mp2->m_next = mp; \
mp2 = mp; \

View File

@ -554,7 +554,7 @@ nqsrv_send_eviction(vp, lp, slp, nam, cred)
* Record Mark.
*/
if (sotype == SOCK_STREAM) {
M_PREPEND(m, NFSX_UNSIGNED, M_WAIT);
M_PREPEND(m, NFSX_UNSIGNED, M_TRYWAIT);
*mtod(m, u_int32_t *) = htonl(0x80000000 |
(m->m_pkthdr.len - NFSX_UNSIGNED));
}
@ -932,7 +932,7 @@ nqnfs_vacated(vp, cred)
RPCAUTH_UNIX, 5 * NFSX_UNSIGNED, (char *)0,
0, (char *)NULL, mreq, i, &mheadend, &xid);
if (nmp->nm_sotype == SOCK_STREAM) {
M_PREPEND(m, NFSX_UNSIGNED, M_WAIT);
M_PREPEND(m, NFSX_UNSIGNED, M_TRYWAIT);
*mtod(m, u_int32_t *) = htonl(0x80000000 | (m->m_pkthdr.len -
NFSX_UNSIGNED));
}

View File

@ -689,8 +689,8 @@ nfsrv_readlink(nfsd, slp, procp, mrq)
len = 0;
i = 0;
while (len < NFS_MAXPATHLEN) {
MGET(mp, M_WAIT, MT_DATA);
MCLGET(mp, M_WAIT);
MGET(mp, M_TRYWAIT, MT_DATA);
MCLGET(mp, M_TRYWAIT);
mp->m_len = NFSMSIZ(mp);
if (len == 0)
mp3 = mp2 = mp;
@ -940,8 +940,8 @@ nfsrv_read(nfsd, slp, procp, mrq)
i++;
}
if (left > 0) {
MGET(m, M_WAIT, MT_DATA);
MCLGET(m, M_WAIT);
MGET(m, M_TRYWAIT, MT_DATA);
MCLGET(m, M_TRYWAIT);
m->m_len = 0;
m2->m_next = m;
m2 = m;

View File

@ -590,7 +590,7 @@ nfs_receive(rep, aname, mp)
goto tryagain;
}
while (rep->r_flags & R_MUSTRESEND) {
m = m_copym(rep->r_mreq, 0, M_COPYALL, M_WAIT);
m = m_copym(rep->r_mreq, 0, M_COPYALL, M_TRYWAIT);
nfsstats.rpcretries++;
error = nfs_send(so, rep->r_nmp->nm_nam, m, rep);
if (error) {
@ -1014,7 +1014,7 @@ nfs_request(vp, mrest, procnum, procp, cred, mrp, mdp, dposp)
* For stream protocols, insert a Sun RPC Record Mark.
*/
if (nmp->nm_sotype == SOCK_STREAM) {
M_PREPEND(m, NFSX_UNSIGNED, M_WAIT);
M_PREPEND(m, NFSX_UNSIGNED, M_TRYWAIT);
*mtod(m, u_int32_t *) = htonl(0x80000000 |
(m->m_pkthdr.len - NFSX_UNSIGNED));
}
@ -1058,7 +1058,7 @@ nfs_request(vp, mrest, procnum, procp, cred, mrp, mdp, dposp)
if (nmp->nm_soflags & PR_CONNREQUIRED)
error = nfs_sndlock(rep);
if (!error) {
m2 = m_copym(m, 0, M_COPYALL, M_WAIT);
m2 = m_copym(m, 0, M_COPYALL, M_TRYWAIT);
error = nfs_send(nmp->nm_so, nmp->nm_nam, m2, rep);
if (nmp->nm_soflags & PR_CONNREQUIRED)
nfs_sndunlock(rep);
@ -1237,7 +1237,7 @@ nfs_rephead(siz, nd, slp, err, cache, frev, mrq, mbp, bposp)
caddr_t bpos;
struct mbuf *mb, *mb2;
MGETHDR(mreq, M_WAIT, MT_DATA);
MGETHDR(mreq, M_TRYWAIT, MT_DATA);
mb = mreq;
/*
* If this is a big reply, use a cluster else
@ -1245,7 +1245,7 @@ nfs_rephead(siz, nd, slp, err, cache, frev, mrq, mbp, bposp)
*/
siz += RPC_REPLYSIZ;
if ((max_hdr + siz) >= MINCLSIZE) {
MCLGET(mreq, M_WAIT);
MCLGET(mreq, M_TRYWAIT);
} else
mreq->m_data += max_hdr;
tl = mtod(mreq, u_int32_t *);
@ -1686,9 +1686,9 @@ nfs_realign(pm, hsiz)
while ((m = *pm) != NULL) {
if ((m->m_len & 0x3) || (mtod(m, intptr_t) & 0x3)) {
MGET(n, M_WAIT, MT_DATA);
MGET(n, M_TRYWAIT, MT_DATA);
if (m->m_len >= MINCLSIZE) {
MCLGET(n, M_WAIT);
MCLGET(n, M_TRYWAIT);
}
n->m_len = 0;
break;
@ -1978,7 +1978,7 @@ nfs_msg(p, server, msg)
* Socket upcall routine for the nfsd sockets.
* The caddr_t arg is a pointer to the "struct nfssvc_sock".
* Essentially do as much as possible non-blocking, else punt and it will
* be called with M_WAIT from an nfsd.
* be called with M_TRYWAIT from an nfsd.
*/
void
nfsrv_rcv(so, arg, waitflag)

View File

@ -201,7 +201,7 @@ nfsrv_getcache(nd, slp, repp)
} else if (rp->rc_flag & RC_REPMBUF) {
nfsstats.srvcache_nonidemdonehits++;
*repp = m_copym(rp->rc_reply, 0, M_COPYALL,
M_WAIT);
M_TRYWAIT);
ret = RC_REPLY;
} else {
nfsstats.srvcache_idemdonehits++;
@ -313,7 +313,7 @@ nfsrv_updatecache(nd, repvalid, repmbuf)
rp->rc_flag |= RC_REPSTATUS;
} else {
rp->rc_reply = m_copym(repmbuf,
0, M_COPYALL, M_WAIT);
0, M_COPYALL, M_TRYWAIT);
rp->rc_flag |= RC_REPMBUF;
}
}

View File

@ -588,9 +588,9 @@ nfsm_reqh(vp, procid, hsiz, bposp)
struct nfsmount *nmp;
int nqflag;
MGET(mb, M_WAIT, MT_DATA);
MGET(mb, M_TRYWAIT, MT_DATA);
if (hsiz >= MINCLSIZE)
MCLGET(mb, M_WAIT);
MCLGET(mb, M_TRYWAIT);
mb->m_len = 0;
bpos = mtod(mb, caddr_t);
@ -646,9 +646,9 @@ nfsm_rpchead(cr, nmflag, procid, auth_type, auth_len, auth_str, verf_len,
int siz, grpsiz, authsiz;
authsiz = nfsm_rndup(auth_len);
MGETHDR(mb, M_WAIT, MT_DATA);
MGETHDR(mb, M_TRYWAIT, MT_DATA);
if ((authsiz + 10 * NFSX_UNSIGNED) >= MINCLSIZE) {
MCLGET(mb, M_WAIT);
MCLGET(mb, M_TRYWAIT);
} else if ((authsiz + 10 * NFSX_UNSIGNED) < MHLEN) {
MH_ALIGN(mb, authsiz + 10 * NFSX_UNSIGNED);
} else {
@ -711,9 +711,9 @@ nfsm_rpchead(cr, nmflag, procid, auth_type, auth_len, auth_str, verf_len,
siz = auth_len;
while (siz > 0) {
if (M_TRAILINGSPACE(mb) == 0) {
MGET(mb2, M_WAIT, MT_DATA);
MGET(mb2, M_TRYWAIT, MT_DATA);
if (siz >= MINCLSIZE)
MCLGET(mb2, M_WAIT);
MCLGET(mb2, M_TRYWAIT);
mb->m_next = mb2;
mb = mb2;
mb->m_len = 0;
@ -744,9 +744,9 @@ nfsm_rpchead(cr, nmflag, procid, auth_type, auth_len, auth_str, verf_len,
siz = verf_len;
while (siz > 0) {
if (M_TRAILINGSPACE(mb) == 0) {
MGET(mb2, M_WAIT, MT_DATA);
MGET(mb2, M_TRYWAIT, MT_DATA);
if (siz >= MINCLSIZE)
MCLGET(mb2, M_WAIT);
MCLGET(mb2, M_TRYWAIT);
mb->m_next = mb2;
mb = mb2;
mb->m_len = 0;
@ -887,9 +887,9 @@ nfsm_uiotombuf(uiop, mq, siz, bpos)
while (left > 0) {
mlen = M_TRAILINGSPACE(mp);
if (mlen == 0) {
MGET(mp, M_WAIT, MT_DATA);
MGET(mp, M_TRYWAIT, MT_DATA);
if (clflg)
MCLGET(mp, M_WAIT);
MCLGET(mp, M_TRYWAIT);
mp->m_len = 0;
mp2->m_next = mp;
mp2 = mp;
@ -919,7 +919,7 @@ nfsm_uiotombuf(uiop, mq, siz, bpos)
}
if (rem > 0) {
if (rem > M_TRAILINGSPACE(mp)) {
MGET(mp, M_WAIT, MT_DATA);
MGET(mp, M_TRYWAIT, MT_DATA);
mp->m_len = 0;
mp2->m_next = mp;
}
@ -968,7 +968,7 @@ nfsm_disct(mdp, dposp, siz, left, cp2)
} else if (siz > MHLEN) {
panic("nfs S too big");
} else {
MGET(mp2, M_WAIT, MT_DATA);
MGET(mp2, M_TRYWAIT, MT_DATA);
mp2->m_next = mp->m_next;
mp->m_next = mp2;
mp->m_len -= left;
@ -1061,9 +1061,9 @@ nfsm_strtmbuf(mb, bpos, cp, siz)
}
/* Loop around adding mbufs */
while (siz > 0) {
MGET(m1, M_WAIT, MT_DATA);
MGET(m1, M_TRYWAIT, MT_DATA);
if (siz > MLEN)
MCLGET(m1, M_WAIT);
MCLGET(m1, M_TRYWAIT);
m1->m_len = NFSMSIZ(m1);
m2->m_next = m1;
m2 = m1;

View File

@ -480,7 +480,7 @@ nfssvc_nfsd(nsd, argp, p)
slp->ns_flag &= ~SLP_NEEDQ;
(void) nfs_slplock(slp, 1);
nfsrv_rcv(slp->ns_so, (caddr_t)slp,
M_WAIT);
M_TRYWAIT);
nfs_slpunlock(slp);
}
error = nfsrv_dorec(slp, nfsd, &nd);
@ -632,7 +632,7 @@ nfssvc_nfsd(nsd, argp, p)
* Record Mark.
*/
if (sotype == SOCK_STREAM) {
M_PREPEND(m, NFSX_UNSIGNED, M_WAIT);
M_PREPEND(m, NFSX_UNSIGNED, M_TRYWAIT);
*mtod(m, u_int32_t *) = htonl(0x80000000 | siz);
}
if (slp->ns_so->so_proto->pr_flags & PR_CONNREQUIRED)

View File

@ -94,7 +94,7 @@ struct mbuf *nfsm_rpchead __P((struct ucred *cr, int nmflag, int procid,
#define nfsm_build(a,c,s) \
do { \
if ((s) > M_TRAILINGSPACE(mb)) { \
MGET(mb2, M_WAIT, MT_DATA); \
MGET(mb2, M_TRYWAIT, MT_DATA); \
if ((s) > MLEN) \
panic("build > MLEN"); \
mb->m_next = mb2; \
@ -491,8 +491,8 @@ struct mbuf *nfsm_rpchead __P((struct ucred *cr, int nmflag, int procid,
if (bp >= be) { \
if (mp == mb) \
mp->m_len += bp-bpos; \
MGET(mp, M_WAIT, MT_DATA); \
MCLGET(mp, M_WAIT); \
MGET(mp, M_TRYWAIT, MT_DATA); \
MCLGET(mp, M_TRYWAIT); \
mp->m_len = NFSMSIZ(mp); \
mp2->m_next = mp; \
mp2 = mp; \

View File

@ -1755,7 +1755,7 @@ md_lookup_swap(struct sockaddr_in *mdsin, /* mountd server address */
u_int32_t v3[21];
} fattribs;
m = m_get(M_WAIT,MT_DATA);
m = m_get(M_TRYWAIT,MT_DATA);
if (m == NULL)
return ENOBUFS;

View File

@ -149,7 +149,7 @@ krpc_portmap(sin, prog, vers, portp, procp)
return 0;
}
m = m_get(M_WAIT, MT_DATA);
m = m_get(M_TRYWAIT, MT_DATA);
if (m == NULL)
return ENOBUFS;
sdata = mtod(m, struct sdata *);
@ -275,7 +275,7 @@ krpc_call(sa, prog, vers, func, data, from_p, procp)
/*
* Prepend RPC message header.
*/
mhead = m_gethdr(M_WAIT, MT_DATA);
mhead = m_gethdr(M_TRYWAIT, MT_DATA);
mhead->m_next = *data;
call = mtod(mhead, struct rpc_call *);
mhead->m_len = sizeof(*call);
@ -315,7 +315,7 @@ krpc_call(sa, prog, vers, func, data, from_p, procp)
timo = 0;
for (;;) {
/* Send RPC request (or re-send). */
m = m_copym(mhead, 0, M_COPYALL, M_WAIT);
m = m_copym(mhead, 0, M_COPYALL, M_TRYWAIT);
if (m == NULL) {
error = ENOBUFS;
goto out;
@ -471,9 +471,9 @@ xdr_string_encode(str, len)
if (mlen > MCLBYTES) /* If too big, we just can't do it. */
return (NULL);
m = m_get(M_WAIT, MT_DATA);
m = m_get(M_TRYWAIT, MT_DATA);
if (mlen > MLEN) {
MCLGET(m, M_WAIT);
MCLGET(m, M_TRYWAIT);
if ((m->m_flags & M_EXT) == 0) {
(void) m_free(m); /* There can be only one. */
return (NULL);

View File

@ -480,7 +480,7 @@ nfssvc_nfsd(nsd, argp, p)
slp->ns_flag &= ~SLP_NEEDQ;
(void) nfs_slplock(slp, 1);
nfsrv_rcv(slp->ns_so, (caddr_t)slp,
M_WAIT);
M_TRYWAIT);
nfs_slpunlock(slp);
}
error = nfsrv_dorec(slp, nfsd, &nd);
@ -632,7 +632,7 @@ nfssvc_nfsd(nsd, argp, p)
* Record Mark.
*/
if (sotype == SOCK_STREAM) {
M_PREPEND(m, NFSX_UNSIGNED, M_WAIT);
M_PREPEND(m, NFSX_UNSIGNED, M_TRYWAIT);
*mtod(m, u_int32_t *) = htonl(0x80000000 | siz);
}
if (slp->ns_so->so_proto->pr_flags & PR_CONNREQUIRED)

View File

@ -590,7 +590,7 @@ nfs_receive(rep, aname, mp)
goto tryagain;
}
while (rep->r_flags & R_MUSTRESEND) {
m = m_copym(rep->r_mreq, 0, M_COPYALL, M_WAIT);
m = m_copym(rep->r_mreq, 0, M_COPYALL, M_TRYWAIT);
nfsstats.rpcretries++;
error = nfs_send(so, rep->r_nmp->nm_nam, m, rep);
if (error) {
@ -1014,7 +1014,7 @@ nfs_request(vp, mrest, procnum, procp, cred, mrp, mdp, dposp)
* For stream protocols, insert a Sun RPC Record Mark.
*/
if (nmp->nm_sotype == SOCK_STREAM) {
M_PREPEND(m, NFSX_UNSIGNED, M_WAIT);
M_PREPEND(m, NFSX_UNSIGNED, M_TRYWAIT);
*mtod(m, u_int32_t *) = htonl(0x80000000 |
(m->m_pkthdr.len - NFSX_UNSIGNED));
}
@ -1058,7 +1058,7 @@ nfs_request(vp, mrest, procnum, procp, cred, mrp, mdp, dposp)
if (nmp->nm_soflags & PR_CONNREQUIRED)
error = nfs_sndlock(rep);
if (!error) {
m2 = m_copym(m, 0, M_COPYALL, M_WAIT);
m2 = m_copym(m, 0, M_COPYALL, M_TRYWAIT);
error = nfs_send(nmp->nm_so, nmp->nm_nam, m2, rep);
if (nmp->nm_soflags & PR_CONNREQUIRED)
nfs_sndunlock(rep);
@ -1237,7 +1237,7 @@ nfs_rephead(siz, nd, slp, err, cache, frev, mrq, mbp, bposp)
caddr_t bpos;
struct mbuf *mb, *mb2;
MGETHDR(mreq, M_WAIT, MT_DATA);
MGETHDR(mreq, M_TRYWAIT, MT_DATA);
mb = mreq;
/*
* If this is a big reply, use a cluster else
@ -1245,7 +1245,7 @@ nfs_rephead(siz, nd, slp, err, cache, frev, mrq, mbp, bposp)
*/
siz += RPC_REPLYSIZ;
if ((max_hdr + siz) >= MINCLSIZE) {
MCLGET(mreq, M_WAIT);
MCLGET(mreq, M_TRYWAIT);
} else
mreq->m_data += max_hdr;
tl = mtod(mreq, u_int32_t *);
@ -1686,9 +1686,9 @@ nfs_realign(pm, hsiz)
while ((m = *pm) != NULL) {
if ((m->m_len & 0x3) || (mtod(m, intptr_t) & 0x3)) {
MGET(n, M_WAIT, MT_DATA);
MGET(n, M_TRYWAIT, MT_DATA);
if (m->m_len >= MINCLSIZE) {
MCLGET(n, M_WAIT);
MCLGET(n, M_TRYWAIT);
}
n->m_len = 0;
break;
@ -1978,7 +1978,7 @@ nfs_msg(p, server, msg)
* Socket upcall routine for the nfsd sockets.
* The caddr_t arg is a pointer to the "struct nfssvc_sock".
* Essentially do as much as possible non-blocking, else punt and it will
* be called with M_WAIT from an nfsd.
* be called with M_TRYWAIT from an nfsd.
*/
void
nfsrv_rcv(so, arg, waitflag)

View File

@ -588,9 +588,9 @@ nfsm_reqh(vp, procid, hsiz, bposp)
struct nfsmount *nmp;
int nqflag;
MGET(mb, M_WAIT, MT_DATA);
MGET(mb, M_TRYWAIT, MT_DATA);
if (hsiz >= MINCLSIZE)
MCLGET(mb, M_WAIT);
MCLGET(mb, M_TRYWAIT);
mb->m_len = 0;
bpos = mtod(mb, caddr_t);
@ -646,9 +646,9 @@ nfsm_rpchead(cr, nmflag, procid, auth_type, auth_len, auth_str, verf_len,
int siz, grpsiz, authsiz;
authsiz = nfsm_rndup(auth_len);
MGETHDR(mb, M_WAIT, MT_DATA);
MGETHDR(mb, M_TRYWAIT, MT_DATA);
if ((authsiz + 10 * NFSX_UNSIGNED) >= MINCLSIZE) {
MCLGET(mb, M_WAIT);
MCLGET(mb, M_TRYWAIT);
} else if ((authsiz + 10 * NFSX_UNSIGNED) < MHLEN) {
MH_ALIGN(mb, authsiz + 10 * NFSX_UNSIGNED);
} else {
@ -711,9 +711,9 @@ nfsm_rpchead(cr, nmflag, procid, auth_type, auth_len, auth_str, verf_len,
siz = auth_len;
while (siz > 0) {
if (M_TRAILINGSPACE(mb) == 0) {
MGET(mb2, M_WAIT, MT_DATA);
MGET(mb2, M_TRYWAIT, MT_DATA);
if (siz >= MINCLSIZE)
MCLGET(mb2, M_WAIT);
MCLGET(mb2, M_TRYWAIT);
mb->m_next = mb2;
mb = mb2;
mb->m_len = 0;
@ -744,9 +744,9 @@ nfsm_rpchead(cr, nmflag, procid, auth_type, auth_len, auth_str, verf_len,
siz = verf_len;
while (siz > 0) {
if (M_TRAILINGSPACE(mb) == 0) {
MGET(mb2, M_WAIT, MT_DATA);
MGET(mb2, M_TRYWAIT, MT_DATA);
if (siz >= MINCLSIZE)
MCLGET(mb2, M_WAIT);
MCLGET(mb2, M_TRYWAIT);
mb->m_next = mb2;
mb = mb2;
mb->m_len = 0;
@ -887,9 +887,9 @@ nfsm_uiotombuf(uiop, mq, siz, bpos)
while (left > 0) {
mlen = M_TRAILINGSPACE(mp);
if (mlen == 0) {
MGET(mp, M_WAIT, MT_DATA);
MGET(mp, M_TRYWAIT, MT_DATA);
if (clflg)
MCLGET(mp, M_WAIT);
MCLGET(mp, M_TRYWAIT);
mp->m_len = 0;
mp2->m_next = mp;
mp2 = mp;
@ -919,7 +919,7 @@ nfsm_uiotombuf(uiop, mq, siz, bpos)
}
if (rem > 0) {
if (rem > M_TRAILINGSPACE(mp)) {
MGET(mp, M_WAIT, MT_DATA);
MGET(mp, M_TRYWAIT, MT_DATA);
mp->m_len = 0;
mp2->m_next = mp;
}
@ -968,7 +968,7 @@ nfsm_disct(mdp, dposp, siz, left, cp2)
} else if (siz > MHLEN) {
panic("nfs S too big");
} else {
MGET(mp2, M_WAIT, MT_DATA);
MGET(mp2, M_TRYWAIT, MT_DATA);
mp2->m_next = mp->m_next;
mp->m_next = mp2;
mp->m_len -= left;
@ -1061,9 +1061,9 @@ nfsm_strtmbuf(mb, bpos, cp, siz)
}
/* Loop around adding mbufs */
while (siz > 0) {
MGET(m1, M_WAIT, MT_DATA);
MGET(m1, M_TRYWAIT, MT_DATA);
if (siz > MLEN)
MCLGET(m1, M_WAIT);
MCLGET(m1, M_TRYWAIT);
m1->m_len = NFSMSIZ(m1);
m2->m_next = m1;
m2 = m1;

View File

@ -94,7 +94,7 @@ struct mbuf *nfsm_rpchead __P((struct ucred *cr, int nmflag, int procid,
#define nfsm_build(a,c,s) \
do { \
if ((s) > M_TRAILINGSPACE(mb)) { \
MGET(mb2, M_WAIT, MT_DATA); \
MGET(mb2, M_TRYWAIT, MT_DATA); \
if ((s) > MLEN) \
panic("build > MLEN"); \
mb->m_next = mb2; \
@ -491,8 +491,8 @@ struct mbuf *nfsm_rpchead __P((struct ucred *cr, int nmflag, int procid,
if (bp >= be) { \
if (mp == mb) \
mp->m_len += bp-bpos; \
MGET(mp, M_WAIT, MT_DATA); \
MCLGET(mp, M_WAIT); \
MGET(mp, M_TRYWAIT, MT_DATA); \
MCLGET(mp, M_TRYWAIT); \
mp->m_len = NFSMSIZ(mp); \
mp2->m_next = mp; \
mp2 = mp; \

View File

@ -689,8 +689,8 @@ nfsrv_readlink(nfsd, slp, procp, mrq)
len = 0;
i = 0;
while (len < NFS_MAXPATHLEN) {
MGET(mp, M_WAIT, MT_DATA);
MCLGET(mp, M_WAIT);
MGET(mp, M_TRYWAIT, MT_DATA);
MCLGET(mp, M_TRYWAIT);
mp->m_len = NFSMSIZ(mp);
if (len == 0)
mp3 = mp2 = mp;
@ -940,8 +940,8 @@ nfsrv_read(nfsd, slp, procp, mrq)
i++;
}
if (left > 0) {
MGET(m, M_WAIT, MT_DATA);
MCLGET(m, M_WAIT);
MGET(m, M_TRYWAIT, MT_DATA);
MCLGET(m, M_TRYWAIT);
m->m_len = 0;
m2->m_next = m;
m2 = m;

View File

@ -201,7 +201,7 @@ nfsrv_getcache(nd, slp, repp)
} else if (rp->rc_flag & RC_REPMBUF) {
nfsstats.srvcache_nonidemdonehits++;
*repp = m_copym(rp->rc_reply, 0, M_COPYALL,
M_WAIT);
M_TRYWAIT);
ret = RC_REPLY;
} else {
nfsstats.srvcache_idemdonehits++;
@ -313,7 +313,7 @@ nfsrv_updatecache(nd, repvalid, repmbuf)
rp->rc_flag |= RC_REPSTATUS;
} else {
rp->rc_reply = m_copym(repmbuf,
0, M_COPYALL, M_WAIT);
0, M_COPYALL, M_TRYWAIT);
rp->rc_flag |= RC_REPMBUF;
}
}

View File

@ -590,7 +590,7 @@ nfs_receive(rep, aname, mp)
goto tryagain;
}
while (rep->r_flags & R_MUSTRESEND) {
m = m_copym(rep->r_mreq, 0, M_COPYALL, M_WAIT);
m = m_copym(rep->r_mreq, 0, M_COPYALL, M_TRYWAIT);
nfsstats.rpcretries++;
error = nfs_send(so, rep->r_nmp->nm_nam, m, rep);
if (error) {
@ -1014,7 +1014,7 @@ nfs_request(vp, mrest, procnum, procp, cred, mrp, mdp, dposp)
* For stream protocols, insert a Sun RPC Record Mark.
*/
if (nmp->nm_sotype == SOCK_STREAM) {
M_PREPEND(m, NFSX_UNSIGNED, M_WAIT);
M_PREPEND(m, NFSX_UNSIGNED, M_TRYWAIT);
*mtod(m, u_int32_t *) = htonl(0x80000000 |
(m->m_pkthdr.len - NFSX_UNSIGNED));
}
@ -1058,7 +1058,7 @@ nfs_request(vp, mrest, procnum, procp, cred, mrp, mdp, dposp)
if (nmp->nm_soflags & PR_CONNREQUIRED)
error = nfs_sndlock(rep);
if (!error) {
m2 = m_copym(m, 0, M_COPYALL, M_WAIT);
m2 = m_copym(m, 0, M_COPYALL, M_TRYWAIT);
error = nfs_send(nmp->nm_so, nmp->nm_nam, m2, rep);
if (nmp->nm_soflags & PR_CONNREQUIRED)
nfs_sndunlock(rep);
@ -1237,7 +1237,7 @@ nfs_rephead(siz, nd, slp, err, cache, frev, mrq, mbp, bposp)
caddr_t bpos;
struct mbuf *mb, *mb2;
MGETHDR(mreq, M_WAIT, MT_DATA);
MGETHDR(mreq, M_TRYWAIT, MT_DATA);
mb = mreq;
/*
* If this is a big reply, use a cluster else
@ -1245,7 +1245,7 @@ nfs_rephead(siz, nd, slp, err, cache, frev, mrq, mbp, bposp)
*/
siz += RPC_REPLYSIZ;
if ((max_hdr + siz) >= MINCLSIZE) {
MCLGET(mreq, M_WAIT);
MCLGET(mreq, M_TRYWAIT);
} else
mreq->m_data += max_hdr;
tl = mtod(mreq, u_int32_t *);
@ -1686,9 +1686,9 @@ nfs_realign(pm, hsiz)
while ((m = *pm) != NULL) {
if ((m->m_len & 0x3) || (mtod(m, intptr_t) & 0x3)) {
MGET(n, M_WAIT, MT_DATA);
MGET(n, M_TRYWAIT, MT_DATA);
if (m->m_len >= MINCLSIZE) {
MCLGET(n, M_WAIT);
MCLGET(n, M_TRYWAIT);
}
n->m_len = 0;
break;
@ -1978,7 +1978,7 @@ nfs_msg(p, server, msg)
* Socket upcall routine for the nfsd sockets.
* The caddr_t arg is a pointer to the "struct nfssvc_sock".
* Essentially do as much as possible non-blocking, else punt and it will
* be called with M_WAIT from an nfsd.
* be called with M_TRYWAIT from an nfsd.
*/
void
nfsrv_rcv(so, arg, waitflag)

View File

@ -588,9 +588,9 @@ nfsm_reqh(vp, procid, hsiz, bposp)
struct nfsmount *nmp;
int nqflag;
MGET(mb, M_WAIT, MT_DATA);
MGET(mb, M_TRYWAIT, MT_DATA);
if (hsiz >= MINCLSIZE)
MCLGET(mb, M_WAIT);
MCLGET(mb, M_TRYWAIT);
mb->m_len = 0;
bpos = mtod(mb, caddr_t);
@ -646,9 +646,9 @@ nfsm_rpchead(cr, nmflag, procid, auth_type, auth_len, auth_str, verf_len,
int siz, grpsiz, authsiz;
authsiz = nfsm_rndup(auth_len);
MGETHDR(mb, M_WAIT, MT_DATA);
MGETHDR(mb, M_TRYWAIT, MT_DATA);
if ((authsiz + 10 * NFSX_UNSIGNED) >= MINCLSIZE) {
MCLGET(mb, M_WAIT);
MCLGET(mb, M_TRYWAIT);
} else if ((authsiz + 10 * NFSX_UNSIGNED) < MHLEN) {
MH_ALIGN(mb, authsiz + 10 * NFSX_UNSIGNED);
} else {
@ -711,9 +711,9 @@ nfsm_rpchead(cr, nmflag, procid, auth_type, auth_len, auth_str, verf_len,
siz = auth_len;
while (siz > 0) {
if (M_TRAILINGSPACE(mb) == 0) {
MGET(mb2, M_WAIT, MT_DATA);
MGET(mb2, M_TRYWAIT, MT_DATA);
if (siz >= MINCLSIZE)
MCLGET(mb2, M_WAIT);
MCLGET(mb2, M_TRYWAIT);
mb->m_next = mb2;
mb = mb2;
mb->m_len = 0;
@ -744,9 +744,9 @@ nfsm_rpchead(cr, nmflag, procid, auth_type, auth_len, auth_str, verf_len,
siz = verf_len;
while (siz > 0) {
if (M_TRAILINGSPACE(mb) == 0) {
MGET(mb2, M_WAIT, MT_DATA);
MGET(mb2, M_TRYWAIT, MT_DATA);
if (siz >= MINCLSIZE)
MCLGET(mb2, M_WAIT);
MCLGET(mb2, M_TRYWAIT);
mb->m_next = mb2;
mb = mb2;
mb->m_len = 0;
@ -887,9 +887,9 @@ nfsm_uiotombuf(uiop, mq, siz, bpos)
while (left > 0) {
mlen = M_TRAILINGSPACE(mp);
if (mlen == 0) {
MGET(mp, M_WAIT, MT_DATA);
MGET(mp, M_TRYWAIT, MT_DATA);
if (clflg)
MCLGET(mp, M_WAIT);
MCLGET(mp, M_TRYWAIT);
mp->m_len = 0;
mp2->m_next = mp;
mp2 = mp;
@ -919,7 +919,7 @@ nfsm_uiotombuf(uiop, mq, siz, bpos)
}
if (rem > 0) {
if (rem > M_TRAILINGSPACE(mp)) {
MGET(mp, M_WAIT, MT_DATA);
MGET(mp, M_TRYWAIT, MT_DATA);
mp->m_len = 0;
mp2->m_next = mp;
}
@ -968,7 +968,7 @@ nfsm_disct(mdp, dposp, siz, left, cp2)
} else if (siz > MHLEN) {
panic("nfs S too big");
} else {
MGET(mp2, M_WAIT, MT_DATA);
MGET(mp2, M_TRYWAIT, MT_DATA);
mp2->m_next = mp->m_next;
mp->m_next = mp2;
mp->m_len -= left;
@ -1061,9 +1061,9 @@ nfsm_strtmbuf(mb, bpos, cp, siz)
}
/* Loop around adding mbufs */
while (siz > 0) {
MGET(m1, M_WAIT, MT_DATA);
MGET(m1, M_TRYWAIT, MT_DATA);
if (siz > MLEN)
MCLGET(m1, M_WAIT);
MCLGET(m1, M_TRYWAIT);
m1->m_len = NFSMSIZ(m1);
m2->m_next = m1;
m2 = m1;

View File

@ -480,7 +480,7 @@ nfssvc_nfsd(nsd, argp, p)
slp->ns_flag &= ~SLP_NEEDQ;
(void) nfs_slplock(slp, 1);
nfsrv_rcv(slp->ns_so, (caddr_t)slp,
M_WAIT);
M_TRYWAIT);
nfs_slpunlock(slp);
}
error = nfsrv_dorec(slp, nfsd, &nd);
@ -632,7 +632,7 @@ nfssvc_nfsd(nsd, argp, p)
* Record Mark.
*/
if (sotype == SOCK_STREAM) {
M_PREPEND(m, NFSX_UNSIGNED, M_WAIT);
M_PREPEND(m, NFSX_UNSIGNED, M_TRYWAIT);
*mtod(m, u_int32_t *) = htonl(0x80000000 | siz);
}
if (slp->ns_so->so_proto->pr_flags & PR_CONNREQUIRED)

View File

@ -94,7 +94,7 @@ struct mbuf *nfsm_rpchead __P((struct ucred *cr, int nmflag, int procid,
#define nfsm_build(a,c,s) \
do { \
if ((s) > M_TRAILINGSPACE(mb)) { \
MGET(mb2, M_WAIT, MT_DATA); \
MGET(mb2, M_TRYWAIT, MT_DATA); \
if ((s) > MLEN) \
panic("build > MLEN"); \
mb->m_next = mb2; \
@ -491,8 +491,8 @@ struct mbuf *nfsm_rpchead __P((struct ucred *cr, int nmflag, int procid,
if (bp >= be) { \
if (mp == mb) \
mp->m_len += bp-bpos; \
MGET(mp, M_WAIT, MT_DATA); \
MCLGET(mp, M_WAIT); \
MGET(mp, M_TRYWAIT, MT_DATA); \
MCLGET(mp, M_TRYWAIT); \
mp->m_len = NFSMSIZ(mp); \
mp2->m_next = mp; \
mp2 = mp; \

View File

@ -615,7 +615,7 @@ ngmn_connect(hook_p hook)
/* Setup a transmit chain with one descriptor */
/* XXX: we actually send a 1 byte packet */
dp = mn_alloc_desc();
MGETHDR(m, M_WAIT, MT_DATA);
MGETHDR(m, M_TRYWAIT, MT_DATA);
if (m == NULL)
return ENOBUFS;
m->m_pkthdr.len = 0;
@ -632,12 +632,12 @@ ngmn_connect(hook_p hook)
dp = mn_alloc_desc();
m = NULL;
MGETHDR(m, M_WAIT, MT_DATA);
MGETHDR(m, M_TRYWAIT, MT_DATA);
if (m == NULL) {
mn_free_desc(dp);
return (ENOBUFS);
}
MCLGET(m, M_WAIT);
MCLGET(m, M_TRYWAIT);
if ((m->m_flags & M_EXT) == 0) {
mn_free_desc(dp);
m_freem(m);
@ -655,13 +655,13 @@ ngmn_connect(hook_p hook)
dp2 = dp;
dp = mn_alloc_desc();
m = NULL;
MGETHDR(m, M_WAIT, MT_DATA);
MGETHDR(m, M_TRYWAIT, MT_DATA);
if (m == NULL) {
mn_free_desc(dp);
m_freem(m);
return (ENOBUFS);
}
MCLGET(m, M_WAIT);
MCLGET(m, M_TRYWAIT);
if ((m->m_flags & M_EXT) == 0) {
mn_free_desc(dp);
m_freem(m);

View File

@ -227,7 +227,8 @@ struct mbstat {
/* flags to m_get/MGET */
#define M_DONTWAIT 1
#define M_WAIT 0
#define M_TRYWAIT 0
#define M_WAIT M_TRYWAIT /* XXX: Deprecated. */
/*
* Normal mbuf clusters are normally treated as character arrays
@ -362,7 +363,7 @@ struct mcntfree_lst {
mmbfree.m_head = (m_mget)->m_next; \
mbtypes[MT_FREE]--; \
} else { \
if ((m_get_how) == M_WAIT) \
if ((m_get_how) == M_TRYWAIT) \
(m_mget) = m_mballoc_wait(); \
} \
} while (0)
@ -429,7 +430,7 @@ struct mcntfree_lst {
mbstat.m_clfree--; \
mclfree.m_head = ((union mcluster *)_mp)->mcl_next; \
} else { \
if (_mhow == M_WAIT) \
if (_mhow == M_TRYWAIT) \
_mp = m_clalloc_wait(); \
} \
(p) = _mp; \
@ -460,7 +461,7 @@ struct mcntfree_lst {
#define MEXTADD(m, buf, size, free, args, flags, type) do { \
struct mbuf *_mm = (m); \
\
MEXT_INIT_REF(_mm, M_WAIT); \
MEXT_INIT_REF(_mm, M_TRYWAIT); \
if (_mm->m_ext.ref_cnt != NULL) { \
_mm->m_flags |= (M_EXT | (flags)); \
_mm->m_ext.ext_buf = (caddr_t)(buf); \
@ -588,8 +589,8 @@ struct mcntfree_lst {
/*
* Arrange to prepend space of size plen to mbuf m.
* If a new mbuf must be allocated, how specifies whether to wait.
* If how is M_DONTWAIT and allocation fails, the original mbuf chain
* is freed and m is set to NULL.
* If the allocation fails, the original mbuf chain is freed and m is
* set to NULL.
*/
#define M_PREPEND(m, plen, how) do { \
struct mbuf **_mmp = &(m); \