From owner-svn-src-user@FreeBSD.ORG Fri Oct 18 14:43:04 2013 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 1E38F3BD; Fri, 18 Oct 2013 14:43:04 +0000 (UTC) (envelope-from andre@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 0C5C1271F; Fri, 18 Oct 2013 14:43:04 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9IEh3aH008620; Fri, 18 Oct 2013 14:43:03 GMT (envelope-from andre@svn.freebsd.org) Received: (from andre@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9IEh3ld008619; Fri, 18 Oct 2013 14:43:03 GMT (envelope-from andre@svn.freebsd.org) Message-Id: <201310181443.r9IEh3ld008619@svn.freebsd.org> From: Andre Oppermann Date: Fri, 18 Oct 2013 14:43:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r256742 - user/andre/mbuf_staging/kern X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 18 Oct 2013 14:43:04 -0000 Author: andre Date: Fri Oct 18 14:43:03 2013 New Revision: 256742 URL: http://svnweb.freebsd.org/changeset/base/256742 Log: Add/update/improve comments. Wrap long lines. Remove unused variables and simplify logic. Convert/extend M_EXT KASSERT in m_cljget() and m_clget(). Modified: user/andre/mbuf_staging/kern/kern_mbuf.c Modified: user/andre/mbuf_staging/kern/kern_mbuf.c ============================================================================== --- user/andre/mbuf_staging/kern/kern_mbuf.c Fri Oct 18 13:54:58 2013 (r256741) +++ user/andre/mbuf_staging/kern/kern_mbuf.c Fri Oct 18 14:43:03 2013 (r256742) @@ -460,13 +460,12 @@ static void mb_dtor_mbuf(void *mem, int size, void *arg) { struct mbuf *m; - unsigned long flags; m = (struct mbuf *)mem; - flags = (unsigned long)arg; if ((m->m_flags & M_PKTHDR) && !SLIST_EMPTY(&m->m_pkthdr.tags)) m_tag_delete_chain(m, NULL); + KASSERT((m->m_flags & M_EXT) == 0, ("%s: M_EXT set", __func__)); KASSERT((m->m_flags & M_NOFREE) == 0, ("%s: M_NOFREE set", __func__)); #ifdef INVARIANTS @@ -492,8 +491,10 @@ mb_dtor_pack(void *mem, int size, void * KASSERT(m->m_ext.ext_free == NULL, ("%s: ext_free != NULL", __func__)); KASSERT(m->m_ext.ext_arg1 == NULL, ("%s: ext_arg1 != NULL", __func__)); KASSERT(m->m_ext.ext_arg2 == NULL, ("%s: ext_arg2 != NULL", __func__)); - KASSERT(m->m_ext.ext_size == MCLBYTES, ("%s: ext_size != MCLBYTES", __func__)); - KASSERT(m->m_ext.ext_type == EXT_PACKET, ("%s: ext_type != EXT_PACKET", __func__)); + KASSERT(m->m_ext.ext_size == MCLBYTES, + ("%s: ext_size != MCLBYTES", __func__)); + KASSERT(m->m_ext.ext_type == EXT_PACKET, + ("%s: ext_type != EXT_PACKET", __func__)); KASSERT(*m->m_ext.ref_cnt == 1, ("%s: ref_cnt != 1", __func__)); #ifdef INVARIANTS trash_dtor(m->m_ext.ext_buf, MCLBYTES, arg); @@ -580,11 +581,11 @@ mb_dtor_clust(void *mem, int size, void { #ifdef INVARIANTS uma_zone_t zone; + u_int refcnt; zone = m_getzone(size); - KASSERT(*(uma_find_refcnt(zone, mem)) <= 1, - ("%s: refcnt incorrect %u", __func__, - *(uma_find_refcnt(zone, mem))) ); + refcnt = *(uma_find_refcnt(zone, mem)); + KASSERT(refcnt <= 1, ("%s: refcnt incorrect %u", __func__, refcnt)); trash_dtor(mem, size, arg); #endif @@ -832,24 +833,28 @@ m_getjcl(int how, short type, int flags, } /* - * Allocate a 2K cluster and attach it to an mbuf. + * Allocate a 2K cluster and attach it to the supplied mbuf. + * The caller has to check for the M_EXT flag or m->m_ext.ext_buf + * to see if we were successful. */ void m_clget(struct mbuf *m, int how) { - KASSERT((m->m_flags & M_EXT) == 0, + KASSERT((m->m_flags & M_EXT) == 0 && m->m_ext.ext_buf == NULL, ("%s: %p mbuf already has cluster", __func__, m)); - m->m_ext.ext_buf = (char *)NULL; - uma_zalloc_arg(zone_clust, m, how); - /* - * On a cluster allocation failure, drain the packet zone and retry, - * we might be able to loosen a few clusters up on the drain. - */ - if ((how & M_NOWAIT) && (m->m_ext.ext_buf == NULL)) { - zone_drain(zone_pack); - uma_zalloc_arg(zone_clust, m, how); + if (uma_zalloc_arg(zone_clust, m, how) == NULL) { + /* + * On a cluster allocation failure, drain the packet zone + * and retry, we might be able to loosen a few clusters up + * on the drain. + */ + m->m_ext.ext_buf = NULL; + if (how & M_NOWAIT) { + zone_drain(zone_pack); + uma_zalloc_arg(zone_clust, m, how); + } } } @@ -865,8 +870,9 @@ m_cljget(struct mbuf *m, int how, int si { uma_zone_t zone; - if (m && m->m_flags & M_EXT) - printf("%s: %p mbuf already has cluster\n", __func__, m); + KASSERT(m == NULL || + ((m->m_flags & M_EXT) == 0 && m->m_ext.ext_buf == NULL), + ("%s: %p mbuf already has cluster", __func__, m)); if (m != NULL) m->m_ext.ext_buf = NULL; @@ -926,7 +932,7 @@ struct mbuf * m_get2(int size, int how, short type, int flags) { struct mb_args args; - struct mbuf *m, *n; + struct mbuf *m; args.flags = flags; args.type = type; @@ -939,12 +945,9 @@ m_get2(int size, int how, short type, in if (size > MJUMPAGESIZE) return (NULL); - m = uma_zalloc_arg(zone_mbuf, &args, how); - if (m == NULL) + if ((m = uma_zalloc_arg(zone_mbuf, &args, how)) == NULL) return (NULL); - - n = uma_zalloc_arg(zone_jumbop, m, how); - if (n == NULL) { + if (uma_zalloc_arg(zone_jumbop, m, how) == NULL) { uma_zfree(zone_mbuf, m); return (NULL); } @@ -1120,6 +1123,7 @@ m_extaddref(struct mbuf *m, caddr_t buf, m->m_ext.ext_free = freef; m->m_ext.ext_arg1 = arg1; m->m_ext.ext_arg2 = arg2; + m->m_ext.ext_flags = 0; m->m_ext.ext_type = EXT_EXTREF; }