- Move sbcheck() declaration under SOCKBUF_DEBUG.

- Improve SOCKBUF_DEBUG macros.
- Improve sbcheck().

Sponsored by:	Netflix
Sponsored by:	Nginx, Inc.
This commit is contained in:
Gleb Smirnoff 2014-11-30 11:22:39 +00:00
parent 8967b220a3
commit 57f43a45a3
2 changed files with 22 additions and 13 deletions

View File

@ -607,28 +607,36 @@ sbappendstream(struct sockbuf *sb, struct mbuf *m)
#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

View File

@ -136,7 +136,6 @@ int sbappendcontrol_locked(struct sockbuf *sb, struct mbuf *m0,
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 */