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 */
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to