summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortjr <tjr@FreeBSD.org>2003-01-11 07:51:52 +0000
committertjr <tjr@FreeBSD.org>2003-01-11 07:51:52 +0000
commit1a26cd3da49a6f412ad7131f6a447fe3d7b75b5a (patch)
treee2ae70eaca08d89d99bfa8de7edb5739ce571452
parent187e654d9ab8b270eb7ce255f4014e7a97b9298b (diff)
downloadFreeBSD-src-1a26cd3da49a6f412ad7131f6a447fe3d7b75b5a.zip
FreeBSD-src-1a26cd3da49a6f412ad7131f6a447fe3d7b75b5a.tar.gz
Don't count mbufs with m_type == MT_HEADER or MT_OOBDATA as control data
in sballoc(), sbcompress(), sbdrop() and sbfree(). Fixes fstat() st_size reporting and kevent() EVFILT_READ on TCP sockets.
-rw-r--r--sys/kern/uipc_sockbuf.c7
-rw-r--r--sys/kern/uipc_socket2.c7
-rw-r--r--sys/sys/socketvar.h6
3 files changed, 14 insertions, 6 deletions
diff --git a/sys/kern/uipc_sockbuf.c b/sys/kern/uipc_sockbuf.c
index f652b5a..3283b58 100644
--- a/sys/kern/uipc_sockbuf.c
+++ b/sys/kern/uipc_sockbuf.c
@@ -705,7 +705,9 @@ sbcompress(sb, m, n)
(unsigned)m->m_len);
n->m_len += m->m_len;
sb->sb_cc += m->m_len;
- if (m->m_type != MT_DATA) /* XXX: Probably don't need.*/
+ if (m->m_type != MT_DATA && m->m_type != MT_HEADER &&
+ m->m_type != MT_OOBDATA)
+ /* XXX: Probably don't need.*/
sb->sb_ctl += m->m_len;
m = m_free(m);
continue;
@@ -776,7 +778,8 @@ sbdrop(sb, len)
m->m_len -= len;
m->m_data += len;
sb->sb_cc -= len;
- if (m->m_type != MT_DATA)
+ if (m->m_type != MT_DATA && m->m_type != MT_HEADER &&
+ m->m_type != MT_OOBDATA)
sb->sb_ctl -= len;
break;
}
diff --git a/sys/kern/uipc_socket2.c b/sys/kern/uipc_socket2.c
index f652b5a..3283b58 100644
--- a/sys/kern/uipc_socket2.c
+++ b/sys/kern/uipc_socket2.c
@@ -705,7 +705,9 @@ sbcompress(sb, m, n)
(unsigned)m->m_len);
n->m_len += m->m_len;
sb->sb_cc += m->m_len;
- if (m->m_type != MT_DATA) /* XXX: Probably don't need.*/
+ if (m->m_type != MT_DATA && m->m_type != MT_HEADER &&
+ m->m_type != MT_OOBDATA)
+ /* XXX: Probably don't need.*/
sb->sb_ctl += m->m_len;
m = m_free(m);
continue;
@@ -776,7 +778,8 @@ sbdrop(sb, len)
m->m_len -= len;
m->m_data += len;
sb->sb_cc -= len;
- if (m->m_type != MT_DATA)
+ if (m->m_type != MT_DATA && m->m_type != MT_HEADER &&
+ m->m_type != MT_OOBDATA)
sb->sb_ctl -= len;
break;
}
diff --git a/sys/sys/socketvar.h b/sys/sys/socketvar.h
index 7046c45..6b22cfd 100644
--- a/sys/sys/socketvar.h
+++ b/sys/sys/socketvar.h
@@ -228,7 +228,8 @@ struct xsocket {
/* adjust counters in sb reflecting allocation of m */
#define sballoc(sb, m) { \
(sb)->sb_cc += (m)->m_len; \
- if ((m)->m_type != MT_DATA) \
+ if ((m)->m_type != MT_DATA && (m)->m_type != MT_HEADER && \
+ (m)->m_type != MT_OOBDATA) \
(sb)->sb_ctl += (m)->m_len; \
(sb)->sb_mbcnt += MSIZE; \
if ((m)->m_flags & M_EXT) \
@@ -238,7 +239,8 @@ struct xsocket {
/* adjust counters in sb reflecting freeing of m */
#define sbfree(sb, m) { \
(sb)->sb_cc -= (m)->m_len; \
- if ((m)->m_type != MT_DATA) \
+ if ((m)->m_type != MT_DATA && (m)->m_type != MT_HEADER && \
+ (m)->m_type != MT_OOBDATA) \
(sb)->sb_ctl -= (m)->m_len; \
(sb)->sb_mbcnt -= MSIZE; \
if ((m)->m_flags & M_EXT) \
OpenPOWER on IntegriCloud