diff options
author | Robert Watson <rwatson@FreeBSD.org> | 2015-01-06 12:59:37 +0000 |
---|---|---|
committer | Robert Watson <rwatson@FreeBSD.org> | 2015-01-06 12:59:37 +0000 |
commit | 2a8c860fe3f3bcfc6ba9206f34d067d998d89c7e (patch) | |
tree | 8da641e0473d723ab1cc2e5a5772cb1eed6e4d6f | |
parent | fe657d68f54b7ef837aa6373bb9644911a074c8d (diff) | |
download | src-2a8c860fe3f3bcfc6ba9206f34d067d998d89c7e.tar.gz src-2a8c860fe3f3bcfc6ba9206f34d067d998d89c7e.zip |
In order to reduce use of M_EXT outside of the mbuf allocator and
socket-buffer implementations, introduce a return value for MCLGET()
(and m_cljget() that underlies it) to allow the caller to avoid testing
M_EXT itself. Update all callers to use the return value.
With this change, very few network device drivers remain aware of
M_EXT; the primary exceptions lie in mbuf-chain pretty printers for
debugging, and in a few cases, custom mbuf and cluster allocation
implementations.
NB: This is a difficult-to-test change as it touches many drivers for
which I don't have physical devices. Instead we've gone for intensive
review, but further post-commit review would definitely be appreciated
to spot errors where changes could not easily be made mechanically,
but were largely mechanical in nature.
Differential Revision: https://reviews.freebsd.org/D1440
Reviewed by: adrian, bz, gnn
Sponsored by: EMC / Isilon Storage Division
Notes
Notes:
svn path=/head/; revision=276750
43 files changed, 64 insertions, 122 deletions
diff --git a/share/man/man9/mbuf.9 b/share/man/man9/mbuf.9 index 2bde56d37f80..f447b96d0168 100644 --- a/share/man/man9/mbuf.9 +++ b/share/man/man9/mbuf.9 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd October 21, 2014 +.Dd January 5, 2015 .Dt MBUF 9 .Os .\" @@ -40,6 +40,7 @@ .Ss Mbuf allocation macros .Fn MGET "struct mbuf *mbuf" "int how" "short type" .Fn MGETHDR "struct mbuf *mbuf" "int how" "short type" +.Ft int .Fn MCLGET "struct mbuf *mbuf" "int how" .Fo MEXTADD .Fa "struct mbuf *mbuf" @@ -436,10 +437,12 @@ Allocate and attach an .Vt mbuf cluster to .Fa mbuf . -If the macro fails, the +On success, a non-zero value returned; otherwise, 0. +Historically, consumers would check for success by testing the .Dv M_EXT -flag will not be set in -.Fa mbuf . +flag on the mbuf, but this is now discouraged to avoid unnecessary awareness +of the implementation of external storage in protocol stacks and device +drivers. .It Fn M_ALIGN mbuf len Set the pointer .Fa mbuf->m_data diff --git a/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c b/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c index 8f8cb0840844..551556186127 100644 --- a/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c +++ b/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c @@ -386,8 +386,7 @@ ipf_send_reset(fin) if (m == NULL) return -1; if (sizeof(*tcp2) + hlen > MLEN) { - MCLGET(m, M_NOWAIT); - if ((m->m_flags & M_EXT) == 0) { + if (!(MCLGET(m, M_NOWAIT))) { FREE_MB_T(m); return -1; } @@ -610,8 +609,7 @@ ipf_send_icmp_err(type, fin, dst) code = icmptoicmp6unreach[code]; if (iclen + max_linkhdr + fin->fin_plen > avail) { - MCLGET(m, M_NOWAIT); - if ((m->m_flags & M_EXT) == 0) { + if (!(MCLGET(m, M_NOWAIT))) { FREE_MB_T(m); return -1; } diff --git a/sys/dev/an/if_an.c b/sys/dev/an/if_an.c index bee2a0cf5790..3433cd5d29a7 100644 --- a/sys/dev/an/if_an.c +++ b/sys/dev/an/if_an.c @@ -943,8 +943,7 @@ an_rxeof(struct an_softc *sc) if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); return; } - MCLGET(m, M_NOWAIT); - if (!(m->m_flags & M_EXT)) { + if (!(MCLGET(m, M_NOWAIT))) { m_freem(m); if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); return; @@ -1034,8 +1033,7 @@ an_rxeof(struct an_softc *sc) if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); return; } - MCLGET(m, M_NOWAIT); - if (!(m->m_flags & M_EXT)) { + if (!(MCLGET(m, M_NOWAIT))) { m_freem(m); if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); return; diff --git a/sys/dev/bge/if_bge.c b/sys/dev/bge/if_bge.c index 58f529d9da00..af4fddb9fa06 100644 --- a/sys/dev/bge/if_bge.c +++ b/sys/dev/bge/if_bge.c @@ -1383,8 +1383,7 @@ bge_newbuf_jumbo(struct bge_softc *sc, int i) if (m == NULL) return (ENOBUFS); - m_cljget(m, M_NOWAIT, MJUM9BYTES); - if (!(m->m_flags & M_EXT)) { + if (m_cljget(m, M_NOWAIT, MJUM9BYTES) == NULL) { m_freem(m); return (ENOBUFS); } diff --git a/sys/dev/ce/if_ce.c b/sys/dev/ce/if_ce.c index d0dd0c7cc414..7d81720a69a1 100644 --- a/sys/dev/ce/if_ce.c +++ b/sys/dev/ce/if_ce.c @@ -307,8 +307,7 @@ static struct mbuf *makembuf (void *buf, unsigned len) MGETHDR (m, M_NOWAIT, MT_DATA); if (! m) return 0; - MCLGET (m, M_NOWAIT); - if (! (m->m_flags & M_EXT)) { + if (!(MCLGET(m, M_NOWAIT))) { m_freem (m); return 0; } diff --git a/sys/dev/cm/smc90cx6.c b/sys/dev/cm/smc90cx6.c index a1932ad54ddb..5607298e5983 100644 --- a/sys/dev/cm/smc90cx6.c +++ b/sys/dev/cm/smc90cx6.c @@ -540,10 +540,7 @@ cm_srint_locked(vsc) */ if ((len + 2 + 2) > MHLEN) { /* attach an mbuf cluster */ - MCLGET(m, M_NOWAIT); - - /* Insist on getting a cluster */ - if ((m->m_flags & M_EXT) == 0) { + if (!(MCLGET(m, M_NOWAIT))) { if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); goto cleanup; } diff --git a/sys/dev/cp/if_cp.c b/sys/dev/cp/if_cp.c index 4e70838fcd9d..3d07ef2ba4cf 100644 --- a/sys/dev/cp/if_cp.c +++ b/sys/dev/cp/if_cp.c @@ -191,8 +191,7 @@ static struct mbuf *makembuf (void *buf, unsigned len) MGETHDR (m, M_NOWAIT, MT_DATA); if (! m) return 0; - MCLGET (m, M_NOWAIT); - if (! (m->m_flags & M_EXT)) { + if (!(MCLGET (m, M_NOWAIT))) { m_freem (m); return 0; } diff --git a/sys/dev/cs/if_cs.c b/sys/dev/cs/if_cs.c index 8ad50eb23de4..a9b0d088ab6d 100644 --- a/sys/dev/cs/if_cs.c +++ b/sys/dev/cs/if_cs.c @@ -716,8 +716,7 @@ cs_get_packet(struct cs_softc *sc) return (-1); if (length > MHLEN) { - MCLGET(m, M_NOWAIT); - if (!(m->m_flags & M_EXT)) { + if (!(MCLGET(m, M_NOWAIT))) { m_freem(m); return (-1); } diff --git a/sys/dev/ctau/if_ct.c b/sys/dev/ctau/if_ct.c index d0b68bcf477b..2e9d2e2ed4b8 100644 --- a/sys/dev/ctau/if_ct.c +++ b/sys/dev/ctau/if_ct.c @@ -194,8 +194,7 @@ static struct mbuf *makembuf (void *buf, u_int len) MGETHDR (m, M_NOWAIT, MT_DATA); if (! m) return 0; - MCLGET (m, M_NOWAIT); - if (! (m->m_flags & M_EXT)) { + if (!(MCLGET(m, M_NOWAIT))) { m_freem (m); return 0; } diff --git a/sys/dev/ed/if_ed.c b/sys/dev/ed/if_ed.c index 46524dd9d6b8..be9d274aadd6 100644 --- a/sys/dev/ed/if_ed.c +++ b/sys/dev/ed/if_ed.c @@ -1323,10 +1323,7 @@ ed_get_packet(struct ed_softc *sc, bus_size_t buf, u_short len) */ if ((len + 2) > MHLEN) { /* Attach an mbuf cluster */ - MCLGET(m, M_NOWAIT); - - /* Insist on getting a cluster */ - if ((m->m_flags & M_EXT) == 0) { + if (!(MCLGET(m, M_NOWAIT))) { m_freem(m); return; } diff --git a/sys/dev/ex/if_ex.c b/sys/dev/ex/if_ex.c index 40723512cc0c..58321689ed04 100644 --- a/sys/dev/ex/if_ex.c +++ b/sys/dev/ex/if_ex.c @@ -745,8 +745,7 @@ ex_rx_intr(struct ex_softc *sc) while (pkt_len > 0) { if (pkt_len >= MINCLSIZE) { - MCLGET(m, M_NOWAIT); - if (m->m_flags & M_EXT) { + if (MCLGET(m, M_NOWAIT)) { m->m_len = MCLBYTES; } else { m_freem(ipkt); diff --git a/sys/dev/fe/if_fe.c b/sys/dev/fe/if_fe.c index 2123dfc08263..4598b59fcb97 100644 --- a/sys/dev/fe/if_fe.c +++ b/sys/dev/fe/if_fe.c @@ -1880,8 +1880,7 @@ fe_get_packet (struct fe_softc * sc, u_short len) /* Attach a cluster if this packet doesn't fit in a normal mbuf. */ if (len > MHLEN - NFS_MAGIC_OFFSET) { - MCLGET(m, M_NOWAIT); - if (!(m->m_flags & M_EXT)) { + if (!(MCLGET(m, M_NOWAIT))) { m_freem(m); return -1; } diff --git a/sys/dev/hifn/hifn7751.c b/sys/dev/hifn/hifn7751.c index e9d47a1b68ae..8330d3059fdc 100644 --- a/sys/dev/hifn/hifn7751.c +++ b/sys/dev/hifn/hifn7751.c @@ -1890,8 +1890,7 @@ hifn_crypto( goto err_srcmap; } if (totlen >= MINCLSIZE) { - MCLGET(m0, M_NOWAIT); - if ((m0->m_flags & M_EXT) == 0) { + if (!(MCLGET(m0, M_NOWAIT))) { hifnstats.hst_nomem_mcl++; err = sc->sc_cmdu ? ERESTART : ENOMEM; m_freem(m0); @@ -1913,8 +1912,7 @@ hifn_crypto( } len = MLEN; if (totlen >= MINCLSIZE) { - MCLGET(m, M_NOWAIT); - if ((m->m_flags & M_EXT) == 0) { + if (!(MCLGET(m, M_NOWAIT))) { hifnstats.hst_nomem_mcl++; err = sc->sc_cmdu ? ERESTART : ENOMEM; mlast->m_next = m; diff --git a/sys/dev/ie/if_ie.c b/sys/dev/ie/if_ie.c index 72e2559cdb0c..dc7a868cc15b 100644 --- a/sys/dev/ie/if_ie.c +++ b/sys/dev/ie/if_ie.c @@ -728,8 +728,7 @@ ieget(struct ie_softc *sc, struct mbuf **mp) m->m_len = MLEN; } if (resid >= MINCLSIZE) { - MCLGET(m, M_NOWAIT); - if (m->m_flags & M_EXT) + if (MCLGET(m, M_NOWAIT)) m->m_len = min(resid, MCLBYTES); } else { if (resid < m->m_len) { diff --git a/sys/dev/le/lance.c b/sys/dev/le/lance.c index 38be317aa577..2b4202be2cdd 100644 --- a/sys/dev/le/lance.c +++ b/sys/dev/le/lance.c @@ -398,8 +398,7 @@ lance_get(struct lance_softc *sc, int boff, int totlen) while (totlen > 0) { if (totlen >= MINCLSIZE) { - MCLGET(m, M_NOWAIT); - if ((m->m_flags & M_EXT) == 0) + if (!(MCLGET(m, M_NOWAIT))) goto bad; len = MCLBYTES; } diff --git a/sys/dev/lmc/if_lmc.c b/sys/dev/lmc/if_lmc.c index 9e1463b0c56a..3ca3d3e280fb 100644 --- a/sys/dev/lmc/if_lmc.c +++ b/sys/dev/lmc/if_lmc.c @@ -2689,8 +2689,7 @@ rxintr_setup(softc_t *sc) printf("%s: rxintr_setup: MGETHDR() failed\n", NAME_UNIT); return 0; } - MCLGET(m, M_NOWAIT); - if ((m->m_flags & M_EXT) == 0) + if (!(MCLGET(m, M_NOWAIT))) { m_freem(m); sc->status.cntrs.rxdma++; diff --git a/sys/dev/mn/if_mn.c b/sys/dev/mn/if_mn.c index 63ae5f602eb7..2f1ea5f40425 100644 --- a/sys/dev/mn/if_mn.c +++ b/sys/dev/mn/if_mn.c @@ -1165,8 +1165,7 @@ mn_rx_intr(struct mn_softc *sc, u_int32_t vector) mn_free_desc(dp); return; /* ENOBUFS */ } - MCLGET(m, M_NOWAIT); - if((m->m_flags & M_EXT) == 0) { + if (!(MCLGET(m, M_NOWAIT))) { mn_free_desc(dp); m_freem(m); return; /* ENOBUFS */ diff --git a/sys/dev/my/if_my.c b/sys/dev/my/if_my.c index e94e9aba300c..e2430c1a919d 100644 --- a/sys/dev/my/if_my.c +++ b/sys/dev/my/if_my.c @@ -1085,8 +1085,7 @@ my_newbuf(struct my_softc * sc, struct my_chain_onefrag * c) "no memory for rx list -- packet dropped!\n"); return (ENOBUFS); } - MCLGET(m_new, M_NOWAIT); - if (!(m_new->m_flags & M_EXT)) { + if (!(MCLGET(m_new, M_NOWAIT))) { device_printf(sc->my_dev, "no memory for rx list -- packet dropped!\n"); m_freem(m_new); @@ -1352,8 +1351,7 @@ my_encap(struct my_softc * sc, struct my_chain * c, struct mbuf * m_head) return (1); } if (m_head->m_pkthdr.len > MHLEN) { - MCLGET(m_new, M_NOWAIT); - if (!(m_new->m_flags & M_EXT)) { + if (!(MCLGET(m_new, M_NOWAIT))) { m_freem(m_new); device_printf(sc->my_dev, "no memory for tx list"); return (1); diff --git a/sys/dev/pcn/if_pcn.c b/sys/dev/pcn/if_pcn.c index d3121a13ea3d..d63d4aaeb34f 100644 --- a/sys/dev/pcn/if_pcn.c +++ b/sys/dev/pcn/if_pcn.c @@ -803,8 +803,7 @@ pcn_newbuf(sc, idx, m) if (m_new == NULL) return(ENOBUFS); - MCLGET(m_new, M_NOWAIT); - if (!(m_new->m_flags & M_EXT)) { + if (!(MCLGET(m_new, M_NOWAIT))) { m_freem(m_new); return(ENOBUFS); } diff --git a/sys/dev/pdq/pdq_freebsd.h b/sys/dev/pdq/pdq_freebsd.h index 78eeef912cd5..a556b36afffb 100644 --- a/sys/dev/pdq/pdq_freebsd.h +++ b/sys/dev/pdq/pdq_freebsd.h @@ -190,8 +190,7 @@ typedef struct _pdq_os_ctx_t { PDQ_OS_DATABUF_T *x_m0; \ MGETHDR(x_m0, M_NOWAIT, MT_DATA); \ if (x_m0 != NULL) { \ - MCLGET(x_m0, M_NOWAIT); \ - if ((x_m0->m_flags & M_EXT) == 0) { \ + if (!(MCLGET(x_m0, M_NOWAIT))) { \ m_free(x_m0); \ (b) = NULL; \ } else { \ diff --git a/sys/dev/pdq/pdq_ifsubr.c b/sys/dev/pdq/pdq_ifsubr.c index 50619cbe0242..f8df3a7b2b76 100644 --- a/sys/dev/pdq/pdq_ifsubr.c +++ b/sys/dev/pdq/pdq_ifsubr.c @@ -748,8 +748,7 @@ pdq_os_databuf_alloc( printf("%s: can't alloc small buf\n", sc->sc_dev.dv_xname); return NULL; } - MCLGET(m, M_NOWAIT); - if ((m->m_flags & M_EXT) == 0) { + if (!(MCLGET(m, M_NOWAIT))) { printf("%s: can't alloc cluster\n", sc->sc_dev.dv_xname); m_free(m); return NULL; diff --git a/sys/dev/pdq/pdqvar.h b/sys/dev/pdq/pdqvar.h index 7eb6324543e3..db532732f27a 100644 --- a/sys/dev/pdq/pdqvar.h +++ b/sys/dev/pdq/pdqvar.h @@ -216,8 +216,7 @@ typedef struct mbuf PDQ_OS_DATABUF_T; PDQ_OS_DATABUF_T *x_m0; \ MGETHDR(x_m0, M_NOWAIT, MT_DATA); \ if (x_m0 != NULL) { \ - MCLGET(x_m0, M_NOWAIT); \ - if ((x_m0->m_flags & M_EXT) == 0) { \ + if (!(MCLGET(x_m0, M_NOWAIT))) { \ m_free(x_m0); \ (b) = NULL; \ } else { \ diff --git a/sys/dev/safe/safe.c b/sys/dev/safe/safe.c index cfd00b670534..9b91ed01c143 100644 --- a/sys/dev/safe/safe.c +++ b/sys/dev/safe/safe.c @@ -1328,8 +1328,7 @@ safe_process(device_t dev, struct cryptop *crp, int hint) goto errout; } if (totlen >= MINCLSIZE) { - MCLGET(m, M_NOWAIT); - if ((m->m_flags & M_EXT) == 0) { + if (!(MCLGET(m, M_NOWAIT))) { m_free(m); safestats.st_nomcl++; err = sc->sc_nqchip ? @@ -1355,8 +1354,7 @@ safe_process(device_t dev, struct cryptop *crp, int hint) len = MLEN; } if (top && totlen >= MINCLSIZE) { - MCLGET(m, M_NOWAIT); - if ((m->m_flags & M_EXT) == 0) { + if (!(MCLGET(m, M_NOWAIT))) { *mp = m; m_freem(top); safestats.st_nomcl++; diff --git a/sys/dev/sbni/if_sbni.c b/sys/dev/sbni/if_sbni.c index c459dedcc7ce..03200ef8d798 100644 --- a/sys/dev/sbni/if_sbni.c +++ b/sys/dev/sbni/if_sbni.c @@ -878,8 +878,7 @@ get_rx_buf(struct sbni_softc *sc) */ if (ETHER_MAX_LEN + 2 > MHLEN) { /* Attach an mbuf cluster */ - MCLGET(m, M_NOWAIT); - if ((m->m_flags & M_EXT) == 0) { + if (!(MCLGET(m, M_NOWAIT))) { m_freem(m); return (0); } diff --git a/sys/dev/smc/if_smc.c b/sys/dev/smc/if_smc.c index 8ba7210d5796..af8a5bddb8d1 100644 --- a/sys/dev/smc/if_smc.c +++ b/sys/dev/smc/if_smc.c @@ -693,8 +693,7 @@ smc_task_rx(void *context, int pending) if (m == NULL) { break; } - MCLGET(m, M_NOWAIT); - if ((m->m_flags & M_EXT) == 0) { + if (!(MCLGET(m, M_NOWAIT))) { m_freem(m); break; } diff --git a/sys/dev/sn/if_sn.c b/sys/dev/sn/if_sn.c index 7350537935e0..26e60bc0445a 100644 --- a/sys/dev/sn/if_sn.c +++ b/sys/dev/sn/if_sn.c @@ -1065,14 +1065,9 @@ read_another: m->m_pkthdr.len = m->m_len = packet_length; /* - * Attach an mbuf cluster + * Attach an mbuf cluster. */ - MCLGET(m, M_NOWAIT); - - /* - * Insist on getting a cluster - */ - if ((m->m_flags & M_EXT) == 0) { + if (!(MCLGET(m, M_NOWAIT))) { m_freem(m); if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); printf("sn: snread() kernel memory allocation problem\n"); diff --git a/sys/dev/snc/dp83932.c b/sys/dev/snc/dp83932.c index d4e062ac1f2f..a496b672dc09 100644 --- a/sys/dev/snc/dp83932.c +++ b/sys/dev/snc/dp83932.c @@ -1129,8 +1129,7 @@ sonic_get(struct snc_softc *sc, u_int32_t pkt, int datalen) len = MLEN; } if (datalen >= MINCLSIZE) { - MCLGET(m, M_NOWAIT); - if ((m->m_flags & M_EXT) == 0) { + if (!(MCLGET(m, M_NOWAIT))) { if (top) m_freem(top); return (0); } diff --git a/sys/dev/ti/if_ti.c b/sys/dev/ti/if_ti.c index 7d0fc9d318f5..040502018fc1 100644 --- a/sys/dev/ti/if_ti.c +++ b/sys/dev/ti/if_ti.c @@ -1596,8 +1596,7 @@ ti_newbuf_jumbo(struct ti_softc *sc, int idx, struct mbuf *m_old) "failed -- packet dropped!\n"); goto nobufs; } - MCLGET(m[NPAYLOAD], M_NOWAIT); - if ((m[NPAYLOAD]->m_flags & M_EXT) == 0) { + if (!(MCLGET(m[NPAYLOAD], M_NOWAIT))) { device_printf(sc->ti_dev, "mbuf allocation failed " "-- packet dropped!\n"); goto nobufs; diff --git a/sys/dev/tl/if_tl.c b/sys/dev/tl/if_tl.c index 8535b046565f..455dd38d1cfa 100644 --- a/sys/dev/tl/if_tl.c +++ b/sys/dev/tl/if_tl.c @@ -1813,8 +1813,7 @@ tl_encap(sc, c, m_head) return(1); } if (m_head->m_pkthdr.len > MHLEN) { - MCLGET(m_new, M_NOWAIT); - if (!(m_new->m_flags & M_EXT)) { + if (!(MCLGET(m_new, M_NOWAIT))) { m_freem(m_new); if_printf(ifp, "no memory for tx list\n"); return(1); diff --git a/sys/dev/usb/misc/udbp.c b/sys/dev/usb/misc/udbp.c index fc0d8509eab5..8140170e0514 100644 --- a/sys/dev/usb/misc/udbp.c +++ b/sys/dev/usb/misc/udbp.c @@ -417,9 +417,8 @@ udbp_bulk_read_callback(struct usb_xfer *xfer, usb_error_t error) if (m == NULL) { goto tr_setup; } - MCLGET(m, M_NOWAIT); - if (!(m->m_flags & M_EXT)) { + if (!(MCLGET(m, M_NOWAIT))) { m_freem(m); goto tr_setup; } diff --git a/sys/dev/vx/if_vx.c b/sys/dev/vx/if_vx.c index 7d852e9a839f..47a6cd98455f 100644 --- a/sys/dev/vx/if_vx.c +++ b/sys/dev/vx/if_vx.c @@ -865,8 +865,7 @@ vx_get(struct vx_softc *sc, u_int totlen) len = MLEN; } if (totlen >= MINCLSIZE) { - MCLGET(m, M_NOWAIT); - if (m->m_flags & M_EXT) + if (MCLGET(m, M_NOWAIT)) len = MCLBYTES; } len = min(totlen, len); diff --git a/sys/dev/wb/if_wb.c b/sys/dev/wb/if_wb.c index 01090aacde66..4215d9e6aa71 100644 --- a/sys/dev/wb/if_wb.c +++ b/sys/dev/wb/if_wb.c @@ -1194,8 +1194,7 @@ wb_encap(sc, c, m_head) if (m_new == NULL) return(1); if (m_head->m_pkthdr.len > MHLEN) { - MCLGET(m_new, M_NOWAIT); - if (!(m_new->m_flags & M_EXT)) { + if (!(MCLGET(m_new, M_NOWAIT))) { m_freem(m_new); return(1); } diff --git a/sys/dev/xe/if_xe.c b/sys/dev/xe/if_xe.c index bcde27f31ee6..4a7aa6e8eb69 100644 --- a/sys/dev/xe/if_xe.c +++ b/sys/dev/xe/if_xe.c @@ -765,8 +765,7 @@ xe_rxintr(struct xe_softc *scp, uint8_t rst0) } if (len + 3 > MHLEN) { - MCLGET(mbp, M_NOWAIT); - if ((mbp->m_flags & M_EXT) == 0) { + if (!(MCLGET(mbp, M_NOWAIT))) { m_freem(mbp); if_inc_counter(ifp, IFCOUNTER_IQDROPS, 1); continue; diff --git a/sys/dev/xen/netfront/netfront.c b/sys/dev/xen/netfront/netfront.c index c3c8d920911c..440c1893a6ad 100644 --- a/sys/dev/xen/netfront/netfront.c +++ b/sys/dev/xen/netfront/netfront.c @@ -822,8 +822,7 @@ network_alloc_rx_buffers(struct netfront_info *sc) goto no_mbuf; } - m_cljget(m_new, M_NOWAIT, MJUMPAGESIZE); - if ((m_new->m_flags & M_EXT) == 0) { + if (m_cljget(m_new, M_NOWAIT, MJUMPAGESIZE) == NULL) { printf("%s: m_cljget failed\n", __func__); m_freem(m_new); diff --git a/sys/mips/adm5120/if_admsw.c b/sys/mips/adm5120/if_admsw.c index 11f96b5f4ed3..65f522fff8de 100644 --- a/sys/mips/adm5120/if_admsw.c +++ b/sys/mips/adm5120/if_admsw.c @@ -655,8 +655,7 @@ admsw_start(struct ifnet *ifp) break; } if (m0->m_pkthdr.len > MHLEN) { - MCLGET(m, M_NOWAIT); - if ((m->m_flags & M_EXT) == 0) { + if (!(MCLGET(m, M_NOWAIT))) { device_printf(sc->sc_dev, "unable to allocate Tx cluster\n"); m_freem(m); @@ -1227,8 +1226,7 @@ admsw_add_rxbuf(struct admsw_softc *sc, int idx, int high) if (m == NULL) return (ENOBUFS); - MCLGET(m, M_NOWAIT); - if ((m->m_flags & M_EXT) == 0) { + if (!(MCLGET(m, M_NOWAIT))) { m_freem(m); return (ENOBUFS); } diff --git a/sys/netgraph/atm/ngatmbase.c b/sys/netgraph/atm/ngatmbase.c index c5b0ced97840..a5f10278f2c4 100644 --- a/sys/netgraph/atm/ngatmbase.c +++ b/sys/netgraph/atm/ngatmbase.c @@ -151,8 +151,7 @@ uni_msg_pack_mbuf(struct uni_msg *msg, void *hdr, size_t hdrlen) } else { if ((n = uni_msg_len(msg)) > MHLEN) { - MCLGET(m0, M_NOWAIT); - if (!(m0->m_flags & M_EXT)) + if (!(MCLGET(m0, M_NOWAIT))) goto drop; if (n > MCLBYTES) n = MCLBYTES; @@ -173,8 +172,7 @@ uni_msg_pack_mbuf(struct uni_msg *msg, void *hdr, size_t hdrlen) last = m; if (n > MLEN) { - MCLGET(m, M_NOWAIT); - if (!(m->m_flags & M_EXT)) + if (!(MCLGET(m, M_NOWAIT))) goto drop; if (n > MCLBYTES) n = MCLBYTES; diff --git a/sys/netgraph/atm/sscop/ng_sscop_cust.h b/sys/netgraph/atm/sscop/ng_sscop_cust.h index a1d839aa4156..2c4e0de9035f 100644 --- a/sys/netgraph/atm/sscop/ng_sscop_cust.h +++ b/sys/netgraph/atm/sscop/ng_sscop_cust.h @@ -327,8 +327,7 @@ ng_sscop_mbuf_alloc(size_t n) \ m->m_len = 0; \ m->m_pkthdr.len = 0; \ if (n > MHLEN) { \ - MCLGET(m, M_NOWAIT); \ - if (!(m->m_flags & M_EXT)){ \ + if (!(MCLGET(m, M_NOWAIT))){ \ m_free(m); \ m = NULL; \ } \ diff --git a/sys/netgraph/bluetooth/drivers/bt3c/ng_bt3c_pccard.c b/sys/netgraph/bluetooth/drivers/bt3c/ng_bt3c_pccard.c index 9b174bb4c34e..d7cff7430e0c 100644 --- a/sys/netgraph/bluetooth/drivers/bt3c/ng_bt3c_pccard.c +++ b/sys/netgraph/bluetooth/drivers/bt3c/ng_bt3c_pccard.c @@ -814,8 +814,7 @@ bt3c_receive(bt3c_softc_p sc) break; /* XXX lost of sync */ } - MCLGET(sc->m, M_NOWAIT); - if (!(sc->m->m_flags & M_EXT)) { + if (!(MCLGET(sc->m, M_NOWAIT))) { NG_FREE_M(sc->m); NG_BT3C_ERR(sc->dev, "Could not get cluster\n"); diff --git a/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c b/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c index 2488d06ae6a1..f34c70817188 100644 --- a/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c +++ b/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c @@ -816,8 +816,7 @@ ubt_intr_read_callback(struct usb_xfer *xfer, usb_error_t error) goto submit_next; } - MCLGET(m, M_NOWAIT); - if (!(m->m_flags & M_EXT)) { + if (!(MCLGET(m, M_NOWAIT))) { UBT_STAT_IERROR(sc); goto submit_next; } @@ -916,8 +915,7 @@ ubt_bulk_read_callback(struct usb_xfer *xfer, usb_error_t error) goto submit_next; } - MCLGET(m, M_NOWAIT); - if (!(m->m_flags & M_EXT)) { + if (!(MCLGET(m, M_NOWAIT))) { UBT_STAT_IERROR(sc); goto submit_next; } @@ -1126,8 +1124,7 @@ ubt_isoc_read_one_frame(struct usb_xfer *xfer, int frame_no) return (-1); /* XXX out of sync! */ } - MCLGET(m, M_NOWAIT); - if (!(m->m_flags & M_EXT)) { + if (!(MCLGET(m, M_NOWAIT))) { UBT_STAT_IERROR(sc); NG_FREE_M(m); return (-1); /* XXX out of sync! */ diff --git a/sys/netgraph/ng_vjc.c b/sys/netgraph/ng_vjc.c index e1b76b5b9e62..e689a1060890 100644 --- a/sys/netgraph/ng_vjc.c +++ b/sys/netgraph/ng_vjc.c @@ -484,8 +484,7 @@ ng_vjc_rcvdata(hook_p hook, item_p item) hm->m_len = 0; hm->m_pkthdr.rcvif = NULL; if (hlen > MHLEN) { /* unlikely, but can happen */ - MCLGET(hm, M_NOWAIT); - if ((hm->m_flags & M_EXT) == 0) { + if (!(MCLGET(hm, M_NOWAIT))) { m_freem(hm); priv->slc.sls_errorin++; NG_FREE_M(m); diff --git a/sys/netipsec/key.c b/sys/netipsec/key.c index b9bcd5930ca3..a4e8a25a5a8a 100644 --- a/sys/netipsec/key.c +++ b/sys/netipsec/key.c @@ -2153,8 +2153,7 @@ key_spddelete2(struct socket *so, struct mbuf *m, MGETHDR(n, M_NOWAIT, MT_DATA); if (n && len > MHLEN) { - MCLGET(n, M_NOWAIT); - if ((n->m_flags & M_EXT) == 0) { + if (!(MCLGET(n, M_NOWAIT))) { m_freem(n); n = NULL; } @@ -3496,8 +3495,7 @@ key_setsadbmsg(u_int8_t type, u_int16_t tlen, u_int8_t satype, u_int32_t seq, return NULL; MGETHDR(m, M_NOWAIT, MT_DATA); if (m && len > MHLEN) { - MCLGET(m, M_NOWAIT); - if ((m->m_flags & M_EXT) == 0) { + if (!(MCLGET(m, M_NOWAIT))) { m_freem(m); m = NULL; } @@ -4694,8 +4692,7 @@ key_getspi(struct socket *so, struct mbuf *m, const struct sadb_msghdr *mhp) MGETHDR(n, M_NOWAIT, MT_DATA); if (len > MHLEN) { - MCLGET(n, M_NOWAIT); - if ((n->m_flags & M_EXT) == 0) { + if (!(MCLGET(n, M_NOWAIT))) { m_freem(n); n = NULL; } @@ -6628,8 +6625,7 @@ key_register(struct socket *so, struct mbuf *m, const struct sadb_msghdr *mhp) MGETHDR(n, M_NOWAIT, MT_DATA); if (len > MHLEN) { - MCLGET(n, M_NOWAIT); - if ((n->m_flags & M_EXT) == 0) { + if (!(MCLGET(n, M_NOWAIT))) { m_freem(n); n = NULL; } @@ -7187,8 +7183,7 @@ key_parse(struct mbuf *m, struct socket *so) MGETHDR(n, M_NOWAIT, MT_DATA); if (n && m->m_pkthdr.len > MHLEN) { - MCLGET(n, M_NOWAIT); - if ((n->m_flags & M_EXT) == 0) { + if (!(MCLGET(n, M_NOWAIT))) { m_free(n); n = NULL; } diff --git a/sys/netipsec/keysock.c b/sys/netipsec/keysock.c index 6deea351bf85..605d79c49a99 100644 --- a/sys/netipsec/keysock.c +++ b/sys/netipsec/keysock.c @@ -223,8 +223,7 @@ key_sendup(struct socket *so, struct sadb_msg *msg, u_int len, int target) n->m_len = MLEN; } if (tlen >= MCLBYTES) { /*XXX better threshold? */ - MCLGET(n, M_NOWAIT); - if ((n->m_flags & M_EXT) == 0) { + if (!(MCLGET(n, M_NOWAIT))) { m_free(n); m_freem(m); PFKEYSTAT_INC(in_nomem); diff --git a/sys/sys/mbuf.h b/sys/sys/mbuf.h index b74e957f28ce..600bdee0a1af 100644 --- a/sys/sys/mbuf.h +++ b/sys/sys/mbuf.h @@ -667,7 +667,7 @@ m_getcl(int how, short type, int flags) return (uma_zalloc_arg(zone_pack, &args, how)); } -static __inline void +static __inline int m_clget(struct mbuf *m, int how) { @@ -683,6 +683,7 @@ m_clget(struct mbuf *m, int how) zone_drain(zone_pack); uma_zalloc_arg(zone_clust, m, how); } + return (m->m_flags & M_EXT); } /* |