Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Oct 2013 14:43:03 +0000 (UTC)
From:      Andre Oppermann <andre@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r256742 - user/andre/mbuf_staging/kern
Message-ID:  <201310181443.r9IEh3ld008619@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201310181443.r9IEh3ld008619>