Date: Fri, 12 Jan 2007 12:06:46 -0500 From: John Baldwin <jhb@freebsd.org> To: Andre Oppermann <andre@freebsd.org> Cc: cvs-src@freebsd.org, src-committers@freebsd.org, cvs-all@freebsd.org Subject: Re: cvs commit: src/sys/kern uipc_socket.c Message-ID: <200701121206.47308.jhb@freebsd.org> In-Reply-To: <200611021745.kA2HjSZC018731@repoman.freebsd.org> References: <200611021745.kA2HjSZC018731@repoman.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thursday 02 November 2006 12:45, Andre Oppermann wrote: > andre 2006-11-02 17:45:28 UTC > > FreeBSD src repository > > Modified files: > sys/kern uipc_socket.c > Log: > Use the improved m_uiotombuf() function instead of home grown sosend_copyin() > to do the userland to kernel copying in sosend_generic() and sosend_dgram(). > > sosend_copyin() is retained for ZERO_COPY_SOCKETS which are not yet supported > by m_uiotombuf(). > > Benchmaring shows significant improvements (95% confidence): > 66% less cpu (or 2.9 times better) with new sosend vs. old sosend (non-TSO) > 65% less cpu (or 2.8 times better) with new sosend vs. old sosend (TSO) > > (Sender AMD Opteron 852 (2.6GHz) with em(4) PCI-X-133 interface and receiver > DELL Poweredge SC1425 P-IV Xeon 3.2GHz with em(4) LOM connected back to back > at 1000Base-TX full duplex.) > > Sponsored by: TCP/IP Optimization Fundraise 2005 > MFC after: 3 month This breaks writes of 0 bytes (e.g. write(s, NULL, 0)) to sockets because m_getm2(NULL, 0, ...) returns NULL and thus m_uiotombuf() returns NULL and sosend_*() now return EFAULT. sosend_copyin() correctly handles this case since it always allocates at least one mbuf. I'm not sure if m_uiotombuf() is at fault or if something else is, so I'll let you fix it. This explains the recent breakage of kcheckpass (KDE screen saver password checker) on current, and possibly other things as well. Also, you've introduced another regression in that if the m_get2m() fails it should be returning ENOBUFS and not EFAULT to userland. The comments in sosend_*() about 'EFAULT being the only possible error' are obviously wrong. :) -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200701121206.47308.jhb>