svn commit: r275315 - in head/sys: kern sys
Gleb Smirnoff
glebius at FreeBSD.org
Sun Nov 30 11:22:40 UTC 2014
Author: glebius
Date: Sun Nov 30 11:22:39 2014
New Revision: 275315
URL: https://svnweb.freebsd.org/changeset/base/275315
Log:
- Move sbcheck() declaration under SOCKBUF_DEBUG.
- Improve SOCKBUF_DEBUG macros.
- Improve sbcheck().
Sponsored by: Netflix
Sponsored by: Nginx, Inc.
Modified:
head/sys/kern/uipc_sockbuf.c
head/sys/sys/sockbuf.h
Modified: head/sys/kern/uipc_sockbuf.c
==============================================================================
--- head/sys/kern/uipc_sockbuf.c Sun Nov 30 11:14:49 2014 (r275314)
+++ head/sys/kern/uipc_sockbuf.c Sun Nov 30 11:22:39 2014 (r275315)
@@ -607,28 +607,36 @@ sbappendstream(struct sockbuf *sb, struc
#ifdef SOCKBUF_DEBUG
void
-sbcheck(struct sockbuf *sb)
+sbcheck(struct sockbuf *sb, const char *file, int line)
{
- struct mbuf *m;
- struct mbuf *n = 0;
- u_long len = 0, mbcnt = 0;
+ struct mbuf *m, *n;
+ u_long cc, mbcnt;
SOCKBUF_LOCK_ASSERT(sb);
+ cc = mbcnt = 0;
+
for (m = sb->sb_mb; m; m = n) {
n = m->m_nextpkt;
for (; m; m = m->m_next) {
- len += m->m_len;
+ if (m->m_len == 0) {
+ printf("sb %p empty mbuf %p\n", sb, m);
+ goto fail;
+ }
+ cc += m->m_len;
mbcnt += MSIZE;
if (m->m_flags & M_EXT) /*XXX*/ /* pretty sure this is bogus */
mbcnt += m->m_ext.ext_size;
}
}
- if (len != sb->sb_cc || mbcnt != sb->sb_mbcnt) {
- printf("cc %ld != %u || mbcnt %ld != %u\n", len, sb->sb_cc,
+ if (cc != sb->sb_cc || mbcnt != sb->sb_mbcnt) {
+ printf("cc %ld != %u || mbcnt %ld != %u\n", cc, sb->sb_cc,
mbcnt, sb->sb_mbcnt);
- panic("sbcheck");
+ goto fail;
}
+ return;
+fail:
+ panic("%s from %s:%u", __func__, file, line);
}
#endif
Modified: head/sys/sys/sockbuf.h
==============================================================================
--- head/sys/sys/sockbuf.h Sun Nov 30 11:14:49 2014 (r275314)
+++ head/sys/sys/sockbuf.h Sun Nov 30 11:22:39 2014 (r275315)
@@ -136,7 +136,6 @@ int sbappendcontrol_locked(struct sockbu
struct mbuf *control);
void sbappendrecord(struct sockbuf *sb, struct mbuf *m0);
void sbappendrecord_locked(struct sockbuf *sb, struct mbuf *m0);
-void sbcheck(struct sockbuf *sb);
void sbcompress(struct sockbuf *sb, struct mbuf *m, struct mbuf *n);
struct mbuf *
sbcreatecontrol(caddr_t p, int size, int type, int level);
@@ -224,13 +223,15 @@ sbspace(struct sockbuf *sb)
#ifdef SOCKBUF_DEBUG
void sblastrecordchk(struct sockbuf *, const char *, int);
-#define SBLASTRECORDCHK(sb) sblastrecordchk((sb), __FILE__, __LINE__)
-
void sblastmbufchk(struct sockbuf *, const char *, int);
+void sbcheck(struct sockbuf *, const char *, int);
+#define SBLASTRECORDCHK(sb) sblastrecordchk((sb), __FILE__, __LINE__)
#define SBLASTMBUFCHK(sb) sblastmbufchk((sb), __FILE__, __LINE__)
+#define SBCHECK(sb) sbcheck((sb), __FILE__, __LINE__)
#else
-#define SBLASTRECORDCHK(sb) /* nothing */
-#define SBLASTMBUFCHK(sb) /* nothing */
+#define SBLASTRECORDCHK(sb) do {} while (0)
+#define SBLASTMBUFCHK(sb) do {} while (0)
+#define SBCHECK(sb) do {} while (0)
#endif /* SOCKBUF_DEBUG */
#endif /* _KERNEL */
More information about the svn-src-all
mailing list