Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964822AbbLGXQK (ORCPT ); Mon, 7 Dec 2015 18:16:10 -0500 Received: from tiger.mobileactivedefense.com ([217.174.251.109]:50995 "EHLO tiger.mobileactivedefense.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932661AbbLGXQI (ORCPT ); Mon, 7 Dec 2015 18:16:08 -0500 From: Rainer Weikusat To: David Miller 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) In-Reply-To: <20151206.233038.1580536748391971635.davem@davemloft.net> (David Miller's message of "Sun, 06 Dec 2015 23:30:38 -0500 (EST)") References: <874mfv7055.fsf@doppelsaurus.mobileactivedefense.com> <20151206.233038.1580536748391971635.davem@davemloft.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.4 (gnu/linux) Date: Mon, 07 Dec 2015 23:15:56 +0000 Message-ID: <874mft7sur.fsf_-_@doppelsaurus.mobileactivedefense.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.4.3 (tiger.mobileactivedefense.com [217.174.251.109]); Mon, 07 Dec 2015 23:16:04 +0000 (GMT) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2258 Lines: 51 David Miller writes: > From: Rainer Weikusat > 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 > > 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. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/