cvs commit: src/sys/kern uipc_socket.c

Andre Oppermann andre at freebsd.org
Mon Jan 22 14:59:26 UTC 2007


Andrey Chernov wrote:
> On Fri, Jan 12, 2007 at 12:06:46PM -0500, John Baldwin wrote:
>> 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. :)
> 
> Is there any progress in fixing this bug?

Just fixed.  The regression test passes and I hope KDE too.

-- 
Andre



More information about the cvs-all mailing list