Module Name: src
Committed By: maxv
Date: Mon Jan 1 12:09:56 UTC 2018
Modified Files:
src/sys/kern: uipc_mbuf.c
src/sys/sys: mbuf.h
Log Message:
Don't use macros, rather inline, much clearer.
For the record, I was partly mistaken in my previous commit: even though
the macros were local, the function names were still the ones of the real
callers.
However, setting the name in m_data was not a good thing; this was a
valid pointer, and the kernel could execute a long time before figuring
out the mbuf was already freed - therefore making debugging more difficult.
And information on the caller can be obtained via ddb anyway.
To generate a diff of this commit:
cvs rdiff -u -r1.174 -r1.175 src/sys/kern/uipc_mbuf.c
cvs rdiff -u -r1.172 -r1.173 src/sys/sys/mbuf.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/kern/uipc_mbuf.c
diff -u src/sys/kern/uipc_mbuf.c:1.174 src/sys/kern/uipc_mbuf.c:1.175
--- src/sys/kern/uipc_mbuf.c:1.174 Sun Dec 31 06:57:12 2017
+++ src/sys/kern/uipc_mbuf.c Mon Jan 1 12:09:56 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: uipc_mbuf.c,v 1.174 2017/12/31 06:57:12 maxv Exp $ */
+/* $NetBSD: uipc_mbuf.c,v 1.175 2018/01/01 12:09:56 maxv Exp $ */
/*-
* Copyright (c) 1999, 2001 The NetBSD Foundation, Inc.
@@ -62,7 +62,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_mbuf.c,v 1.174 2017/12/31 06:57:12 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_mbuf.c,v 1.175 2018/01/01 12:09:56 maxv Exp $");
#ifdef _KERNEL_OPT
#include "opt_mbuftrace.h"
@@ -1916,66 +1916,42 @@ m_claim(struct mbuf *m, struct mowner *m
#endif /* defined(MBUFTRACE) */
/*
- * MFREE(struct mbuf *m, struct mbuf *n)
- * Free a single mbuf and associated external storage.
- * Place the successor, if any, in n.
- */
-#define MFREE(f, l, m, n) \
- mowner_revoke((m), 1, (m)->m_flags); \
- mbstat_type_add((m)->m_type, -1); \
- if ((m)->m_flags & M_PKTHDR) \
- m_tag_delete_chain((m), NULL); \
- (n) = (m)->m_next; \
- if ((m)->m_flags & M_EXT) { \
- m_ext_free((m)); \
- } else { \
- MBUFFREE(f, l, m); \
- } \
-
-#define MBUFFREE(f, l, m) \
- do { \
- if (__predict_false((m)->m_type == MT_FREE)) { \
- panic("mbuf %p already freed", m); \
- } \
- (m)->m_type = MT_FREE; \
- (m)->m_data = NULL; \
- pool_cache_put(mb_cache, (m)); \
- } while (/*CONSTCOND*/0)
-
+ * Free a single mbuf and associated external storage. Return the
+ * successor, if any.
+ */
struct mbuf *
-m__free(const char *f, int l, struct mbuf *m)
+m_free(struct mbuf *m)
{
struct mbuf *n;
- MFREE(f, l, m, n);
- return (n);
-}
+ mowner_revoke(m, 1, m->m_flags);
+ mbstat_type_add(m->m_type, -1);
-void
-m__freem(const char *f, int l, struct mbuf *m)
-{
- struct mbuf *n;
+ if (m->m_flags & M_PKTHDR)
+ m_tag_delete_chain(m, NULL);
- if (m == NULL)
- return;
- do {
- MFREE(f, l, m, n);
- m = n;
- } while (m);
-}
+ n = m->m_next;
-#undef m_free
-struct mbuf *m_free(struct mbuf *);
-struct mbuf *
-m_free(struct mbuf *m)
-{
- return m__free(__func__, __LINE__, m);
+ if (m->m_flags & M_EXT) {
+ m_ext_free(m);
+ } else {
+ if (__predict_false(m->m_type == MT_FREE)) {
+ panic("mbuf %p already freed", m);
+ }
+ m->m_type = MT_FREE;
+ m->m_data = NULL;
+ pool_cache_put(mb_cache, m);
+ }
+
+ return n;
}
-#undef m_freem
-void m_freem(struct mbuf *);
void
m_freem(struct mbuf *m)
{
- m__freem(__func__, __LINE__, m);
+ if (m == NULL)
+ return;
+ do {
+ m = m_free(m);
+ } while (m);
}
Index: src/sys/sys/mbuf.h
diff -u src/sys/sys/mbuf.h:1.172 src/sys/sys/mbuf.h:1.173
--- src/sys/sys/mbuf.h:1.172 Thu Nov 9 22:34:07 2017
+++ src/sys/sys/mbuf.h Mon Jan 1 12:09:56 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: mbuf.h,v 1.172 2017/11/09 22:34:07 riastradh Exp $ */
+/* $NetBSD: mbuf.h,v 1.173 2018/01/01 12:09:56 maxv Exp $ */
/*-
* Copyright (c) 1996, 1997, 1999, 2001, 2007 The NetBSD Foundation, Inc.
@@ -858,15 +858,8 @@ struct mbuf *m_copyback_cow(struct mbuf
int m_makewritable(struct mbuf **, int, int, int);
struct mbuf *m_getcl(int, int, int);
void m_copydata(struct mbuf *, int, int, void *);
-struct mbuf *m__free(const char *, int, struct mbuf *);
-void m__freem(const char *, int, struct mbuf *);
-#ifdef DEBUG
-#define m_free(m) m__free(__func__, __LINE__, m)
-#define m_freem(m) m__freem(__func__, __LINE__, m)
-#else
struct mbuf *m_free(struct mbuf *);
void m_freem(struct mbuf *);
-#endif
void m_reclaim(void *, int);
void mbinit(void);
void m_ext_free(struct mbuf *);