diff options
author | tjr <tjr@FreeBSD.org> | 2003-01-11 07:51:52 +0000 |
---|---|---|
committer | tjr <tjr@FreeBSD.org> | 2003-01-11 07:51:52 +0000 |
commit | 1a26cd3da49a6f412ad7131f6a447fe3d7b75b5a (patch) | |
tree | e2ae70eaca08d89d99bfa8de7edb5739ce571452 /sys | |
parent | 187e654d9ab8b270eb7ce255f4014e7a97b9298b (diff) | |
download | FreeBSD-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.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/uipc_sockbuf.c | 7 | ||||
-rw-r--r-- | sys/kern/uipc_socket2.c | 7 | ||||
-rw-r--r-- | sys/sys/socketvar.h | 6 |
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) \ |