Some improvements from Netflix. There is one performance optimization,
and a couple of prerequisites for future improvements (e.g. multi-page
mbufs).
o Shorten list of arguments to mbuf external storage freeing function.
All of these arguments are stored in m_ext, so there is no reason to pass them in the argument list. Not all functions need the second argument, some don't even need the first one. The second argument lives in next cache line, so not dereferencing it is a performance gain. This was discovered in sendfile(2), which will be covered by next commits. The second goal of this commit is to bring even more flexibility to m_ext mbufs, allowing to create more fields in m_ext, opaque to the generic mbuf code, and potentially set and dereferenced by subsystems.
o In mb_dupcl() don't copy full m_ext, to avoid cache misses.
If we always use the original mbuf when freeing external data, then we don't need to copy second part of m_ext to shadow copies.
o Adopt sendfile(2) to shorted argument list of ext free function,
use regular ext_free mech for the sendfile(2) buffers. Remove sendfile knowledge from mbuf code. Create function sendfile_free_page() that later will be used for multi-page mbufs. For now compiler will inline it into sendfile_free_mext().