Make sballoc() and sbfree() functions. Ideally, they could be marked
as static, but unfortunately Infiniband (ab)uses them. Sponsored by: Nginx, Inc.
This commit is contained in:
parent
6e52f863ee
commit
8967b220a3
@ -68,6 +68,60 @@ static u_long sb_efficiency = 8; /* parameter for sbreserve() */
|
||||
static struct mbuf *sbcut_internal(struct sockbuf *sb, int len);
|
||||
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
|
||||
|
@ -164,6 +164,8 @@ void sbtoxsockbuf(struct sockbuf *sb, struct xsockbuf *xsb);
|
||||
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; \
|
||||
|
Loading…
Reference in New Issue
Block a user