From: Rainer Weikusat <rweikusat@mobileactivedefense.com>
To: David Miller <davem@davemloft.net>
Cc: rweikusat@mobileactivedefense.com, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: breaks blocking receive for other users (was: [PATCH 01/02] core: enable more fine-grained datagram reception control)
Date: Mon, 07 Dec 2015 23:15:56 +0000 [thread overview]
Message-ID: <874mft7sur.fsf_-_@doppelsaurus.mobileactivedefense.com> (raw)
In-Reply-To: <20151206.233038.1580536748391971635.davem@davemloft.net> (David Miller's message of "Sun, 06 Dec 2015 23:30:38 -0500 (EST)")
David Miller <davem@davemloft.net> writes:
> From: Rainer Weikusat <rweikusat@mobileactivedefense.com>
> Date: Sun, 06 Dec 2015 21:11:34 +0000
>
>> The __skb_recv_datagram routine in core/ datagram.c provides a general
>> skb reception factility supposed to be utilized by protocol modules
>> providing datagram sockets. It encompasses both the actual recvmsg code
>> and a surrounding 'sleep until data is available' loop. This is
>> inconvenient if a protocol module has to use additional locking in order
>> to maintain some per-socket state the generic datagram socket code is
>> unaware of (as the af_unix code does). The patch below moves the recvmsg
>> proper code into a new __skb_try_recv_datagram routine which doesn't
>> sleep and renames wait_for_more_packets to
>> __skb_wait_for_more_packets, both routines being exported interfaces. The
>> original __skb_recv_datagram routine is reimplemented on top of these
>> two functions such that its user-visible behaviour remains unchanged.
>>
>> Signed-Off-By: Rainer Weikusat <rweikusat@mobileactivedefense.com>
>
> Applied to net-next.
Because of an oversight, this change breaks blocking datagram reception
for anyone but the AF_UNIX SOCK_DGRAM code. I've noticed this by chance
while running a test program for SOCK_STREAM sockets. The problem seems
to be (fix not yet tested) that a - is missing in the *err check in
__skb_recv_datagram.
Proposed fix:
------------
diff --git a/net/core/datagram.c b/net/core/datagram.c
index 7daff66..fa9dc64 100644
--- a/net/core/datagram.c
+++ b/net/core/datagram.c
@@ -275,7 +275,7 @@ struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned int flags,
if (skb)
return skb;
- if (*err != EAGAIN)
+ if (*err != -EAGAIN)
break;
} while (timeo &&
!__skb_wait_for_more_packets(sk, err, &timeo, last));
-------------
Provided this works (very likely), I'll send a real patch for that ASAP.
next prev parent reply other threads:[~2015-12-07 23:16 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-06 21:11 [PATCH 01/02] core: enable more fine-grained datagram reception control Rainer Weikusat
2015-12-07 4:30 ` David Miller
2015-12-07 23:15 ` Rainer Weikusat [this message]
2015-12-07 23:30 ` [PATCH] fix inverted test in __skb_recv_datagram Rainer Weikusat
2015-12-08 3:28 ` David Miller
2015-12-08 14:46 ` Rainer Weikusat
2015-12-08 16:30 ` David Miller
2015-12-08 14:47 ` Rainer Weikusat
2015-12-08 16:31 ` David Miller
2015-12-08 20:11 ` Rainer Weikusat
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=874mft7sur.fsf_-_@doppelsaurus.mobileactivedefense.com \
--to=rweikusat@mobileactivedefense.com \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.