path: root/sys/sys/mbuf.h
diff options
authorGleb Smirnoff <glebius@FreeBSD.org>2014-11-30 12:52:33 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2014-11-30 12:52:33 +0000
commit0f9d0a73a495b204ea02cf1da28db1bdd0c7e40b (patch)
tree6aca46c356e9150741198b08512009a1b5138ca0 /sys/sys/mbuf.h
parentabcd4129406a0a80e0c53cfba05d9c5b6ff4c576 (diff)
Merge from projects/sendfile:
o Introduce a notion of "not ready" mbufs in socket buffers. These mbufs are now being populated by some I/O in background and are referenced outside. This forces following implications: - An mbuf which is "not ready" can't be taken out of the buffer. - An mbuf that is behind a "not ready" in the queue neither. - If sockbet buffer is flushed, then "not ready" mbufs shouln't be freed. o In struct sockbuf the sb_cc field is split into sb_ccc and sb_acc. The sb_ccc stands for ""claimed character count", or "committed character count". And the sb_acc is "available character count". Consumers of socket buffer API shouldn't already access them directly, but use sbused() and sbavail() respectively. o Not ready mbufs are marked with M_NOTREADY, and ready but blocked ones with M_BLOCKED. o New field sb_fnrdy points to the first not ready mbuf, to avoid linear search. o New function sbready() is provided to activate certain amount of mbufs in a socket buffer. A special note on SCTP: SCTP has its own sockbufs. Unfortunately, FreeBSD stack doesn't yet allow protocol specific sockbufs. Thus, SCTP does some hacks to make itself compatible with FreeBSD: it manages sockbufs on its own, but keeps sb_cc updated to inform the stack of amount of data in them. The new notion of "not ready" data isn't supported by SCTP. Instead, only a mechanical substitute is done: s/sb_cc/sb_ccc/. A proper solution would be to take away struct sockbuf from struct socket and allow protocols to implement their own socket buffers, like SCTP already does. This was discussed with rrs@. Sponsored by: Netflix Sponsored by: Nginx, Inc.
Notes: svn path=/head/; revision=275326
Diffstat (limited to 'sys/sys/mbuf.h')
0 files changed, 0 insertions, 0 deletions