Author: glebius
Date: Sun Nov 30 11:02:07 2014
New Revision: 275312
URL: https://svnweb.freebsd.org/changeset/base/275312

Log:
  Make sballoc() and sbfree() functions. Ideally, they could be marked
  as static, but unfortunately Infiniband (ab)uses them.
  
  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 10:55:01 2014        
(r275311)
+++ head/sys/kern/uipc_sockbuf.c        Sun Nov 30 11:02:07 2014        
(r275312)
@@ -69,6 +69,60 @@ static struct mbuf   *sbcut_internal(struc
 static void    sbflush_internal(struct sockbuf *sb);
 
 /*
+ * Adjust sockbuf state reflecting allocation of m.
+ */
+void
+sballoc(struct sockbuf *sb, struct mbuf *m)
+{
+
+       SOCKBUF_LOCK_ASSERT(sb);
+
+       sb->sb_cc += m->m_len;
+
+       if (m->m_type != MT_DATA && m->m_type != MT_OOBDATA)
+               sb->sb_ctl += m->m_len;
+
+       sb->sb_mbcnt += MSIZE;
+       sb->sb_mcnt += 1;
+
+       if (m->m_flags & M_EXT) {
+               sb->sb_mbcnt += m->m_ext.ext_size;
+               sb->sb_ccnt += 1;
+       }
+}
+
+/*
+ * Adjust sockbuf state reflecting freeing of m.
+ */
+void
+sbfree(struct sockbuf *sb, struct mbuf *m)
+{
+
+#if 0  /* XXX: not yet: soclose() call path comes here w/o lock. */
+       SOCKBUF_LOCK_ASSERT(sb);
+#endif
+
+       sb->sb_cc -= m->m_len;
+
+       if (m->m_type != MT_DATA && m->m_type != MT_OOBDATA)
+               sb->sb_ctl -= m->m_len;
+
+       sb->sb_mbcnt -= MSIZE;
+       sb->sb_mcnt -= 1;
+       if (m->m_flags & M_EXT) {
+               sb->sb_mbcnt -= m->m_ext.ext_size;
+               sb->sb_ccnt -= 1;
+       }
+
+       if (sb->sb_sndptr == m) {
+               sb->sb_sndptr = NULL;
+               sb->sb_sndptroff = 0;
+       }
+       if (sb->sb_sndptroff != 0)
+               sb->sb_sndptroff -= m->m_len;
+}
+
+/*
  * Socantsendmore indicates that no more data will be sent on the socket; it
  * would normally be applied to a socket when the user informs the system
  * that no more data is to be sent, by the protocol code (in case

Modified: head/sys/sys/sockbuf.h
==============================================================================
--- head/sys/sys/sockbuf.h      Sun Nov 30 10:55:01 2014        (r275311)
+++ head/sys/sys/sockbuf.h      Sun Nov 30 11:02:07 2014        (r275312)
@@ -164,6 +164,8 @@ void        sbtoxsockbuf(struct sockbuf *sb, st
 int    sbwait(struct sockbuf *sb);
 int    sblock(struct sockbuf *sb, int flags);
 void   sbunlock(struct sockbuf *sb);
+void   sballoc(struct sockbuf *, struct mbuf *);
+void   sbfree(struct sockbuf *, struct mbuf *);
 
 /*
  * Return how much data is available to be taken out of socket
@@ -213,38 +215,6 @@ sbspace(struct sockbuf *sb)
        return((bleft < mleft) ? bleft : mleft);
 }
 
-/* adjust counters in sb reflecting allocation of m */
-#define        sballoc(sb, m) { \
-       (sb)->sb_cc += (m)->m_len; \
-       if ((m)->m_type != MT_DATA && (m)->m_type != MT_OOBDATA) \
-               (sb)->sb_ctl += (m)->m_len; \
-       (sb)->sb_mbcnt += MSIZE; \
-       (sb)->sb_mcnt += 1; \
-       if ((m)->m_flags & M_EXT) { \
-               (sb)->sb_mbcnt += (m)->m_ext.ext_size; \
-               (sb)->sb_ccnt += 1; \
-       } \
-}
-
-/* adjust counters in sb reflecting freeing of m */
-#define        sbfree(sb, m) { \
-       (sb)->sb_cc -= (m)->m_len; \
-       if ((m)->m_type != MT_DATA && (m)->m_type != MT_OOBDATA) \
-               (sb)->sb_ctl -= (m)->m_len; \
-       (sb)->sb_mbcnt -= MSIZE; \
-       (sb)->sb_mcnt -= 1; \
-       if ((m)->m_flags & M_EXT) { \
-               (sb)->sb_mbcnt -= (m)->m_ext.ext_size; \
-               (sb)->sb_ccnt -= 1; \
-       } \
-       if ((sb)->sb_sndptr == (m)) { \
-               (sb)->sb_sndptr = NULL; \
-               (sb)->sb_sndptroff = 0; \
-       } \
-       if ((sb)->sb_sndptroff != 0) \
-               (sb)->sb_sndptroff -= (m)->m_len; \
-}
-
 #define SB_EMPTY_FIXUP(sb) do {                                                
\
        if ((sb)->sb_mb == NULL) {                                      \
                (sb)->sb_mbtail = NULL;                                 \
_______________________________________________
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