On Wed, May 14, 2014 at 10:02 PM, Philip Guenther <[email protected]>wrote:

> On Wed, May 14, 2014 at 4:58 AM, Jérémie Courrèges-Anglas 
> <[email protected]>wrote:
> ...
>
>> So here's the diff I came up with:
>> - set MSG_TRUNC for atomic protocols only if there is actually a data
>>   loss
>> - drop the remaining mbuf(s) if the protocol is atomic *or* it is an
>>   empty message
>>
>> I'm running this, and I can't see the downsides, but I could use eyes
>> and comments.
>>
>> Index: kern/uipc_socket.c
>> ===================================================================
>> RCS file: /cvs/src/sys/kern/uipc_socket.c,v
>> retrieving revision 1.127
>> diff -u -p -r1.127 uipc_socket.c
>> --- kern/uipc_socket.c  7 Apr 2014 10:04:17 -0000       1.127
>> +++ kern/uipc_socket.c  14 May 2014 02:56:09 -0000
>> @@ -935,13 +935,15 @@ dontblock:
>>                 }
>>         }
>>
>> -       if (m && pr->pr_flags & PR_ATOMIC) {
>> +       if (m != NULL && m->m_len != 0 && pr->pr_flags & PR_ATOMIC)
>> +               /* Drop the remaining data later. */
>>                 flags |= MSG_TRUNC;
>> -               if ((flags & MSG_PEEK) == 0)
>> -                       (void) sbdroprecord(&so->so_rcv);
>> -       }
>> +
>
>
> <bikeshed>With the comment 'inside' the 'if', I would probably keep the
> braces.</bikeshed>
>
>
>         if ((flags & MSG_PEEK) == 0) {
>> -               if (m == NULL) {
>> +               if (m != NULL) {
>> +                       if (m->m_len == 0 || pr->pr_flags & PR_ATOMIC)
>> +                               sbdroprecord(&so->so_rcv);
>> +               } else {
>>                         /*
>>                          * First part is an inline SB_EMPTY_FIXUP().
>>  Second
>>                          * part makes sure sb_lastrecord is up-to-date if
>>
>
...and that's an ok guenther@. I would suggest prodding claudio@ for good
measure though.


Philip

Reply via email to