Received: by 2002:a05:6a10:9e8c:0:0:0:0 with SMTP id y12csp56875pxx; Mon, 26 Oct 2020 03:17:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx7CovMY7wggXZ5agXkgbLBd21aBkQupC99msM/TaGIsQK+m0TCd79TdnjgI/jJ3ulI+t1L X-Received: by 2002:a50:eb8e:: with SMTP id y14mr15190646edr.285.1603707423107; Mon, 26 Oct 2020 03:17:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603707423; cv=none; d=google.com; s=arc-20160816; b=iHd62mZa4YAN27EEpJHYREVX5fnbUOjdAfh0gxVA8N9nFJ0XegxUQHikXxCylm9KCd j9M7m+JGBXZTkghiPMrFuv6ZK+zjiPG4E+ery720y1a8l6zCba/chEVgS45l1lPkGxZt eR0MA6JFeblkFeZrDKE4FZvOsyUBHb6mlPpjrejYHVky3atVP7ufx2bEftFa7qwn4ikn zKFma/wrAKiJHd3yw3Acl7QeMBpAaRl1PX4ZZdfnQCV2p8Vge1h2BEhuBnrLqbHv2ICN PCL+zKtdO7iXYU6SMcd9fvEtaE6ND9vzMShJiVqH1T/80bXCDHiHJ00vMFVzKa8qpCTL p9CQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=EwBk3v+48o6fnUl3pVyjwAHRohkxTAhu7Ru3s/S+zog=; b=FAKQaCXK+cvYmv/59wAY6+lUi2qXXmATmuKzU3GOP+iwEMmzB/xmup4QS4E5t4wjtV d+MAcVs42+U6iyT0KgSSDM08JeU8IUWmjBYx/eWbpJKBovlSO6+8043mzYH8P37SeKVN dxSyRZSLSiM/grSDlYOqr01dvv8GyLSjODNUtACNi6ZCXC/VmDe6yszPBec7c4+muCIn eGS5jsaEeC9Z7KGEERjnZipwNZEvOU6Jy4+mEpxwu51P+kW+o4aUMZkxQYHNQbArIkhU iMQujRJZx0q0qb7ce1Q/TqcLr5wcfSdY2VZWNhh4UD3LvZZBU5/AYbeqGVstYA+0zj4B r3Aw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=gbdPCoZA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d15si6981624ejb.664.2020.10.26.03.16.40; Mon, 26 Oct 2020 03:17:03 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=gbdPCoZA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1422536AbgJZJjZ (ORCPT + 99 others); Mon, 26 Oct 2020 05:39:25 -0400 Received: from mail-pj1-f68.google.com ([209.85.216.68]:35182 "EHLO mail-pj1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1422458AbgJZJjY (ORCPT ); Mon, 26 Oct 2020 05:39:24 -0400 Received: by mail-pj1-f68.google.com with SMTP id h4so2798451pjk.0; Mon, 26 Oct 2020 02:39:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=EwBk3v+48o6fnUl3pVyjwAHRohkxTAhu7Ru3s/S+zog=; b=gbdPCoZAqmjcz9g4LNBSDGr2QroQBOcCJCBm0jntBSHqscSxVrz3jgZdZX5NZQgd5L cTRutHgX4hMHSTHQ0W5pA8U7nDZXKW0b4cxYQhH1lhsXn6SjYJeeu5X+P2hQowfWgxw/ BwGQxo4hESCSdjFPdfHxajP08ZMnelhMSLRrgADvbtZOdDfbpirH89STd7g2/as6wu2c OgpznrWTHC4NfHp+g4m9tAxkc+jrYOWgAxvX2N110zHMoXRNMHi6APXXF2k8NCIzhf9V wDVwfStnv/Q+XtTTJukeMkKTYj0kzgOgQKFdjN3EUCxpDs9EZvohvHyyPYxBCMioDHsr B+rA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=EwBk3v+48o6fnUl3pVyjwAHRohkxTAhu7Ru3s/S+zog=; b=gYG/W5WyX9R8XQiIgoNbnaJz3RKDKzR/uSk+RcbdAF0Sf01ir7ssmWCFGGIaQPJ0fQ vIgyfsthXkWi2ZxhIYXXsPjkK12s9khSwGJSlOXIeENhzSXkMtWQFi2WtNrlFwG3698a VNo4evp57McNVOOsWB831jYGfBqtiM8D1Z7H9A1Rl/wyYZmJ5nIgBzpcZpzI1wRodhNB yDiIKl4MW3wDoI2U5EqmBhINqvXMOBvcNK9tsmN0zC/rUEPyosPiOqP44ACFF8/L1+1k x5N4V/IoaYQZ52EqfyDKFn5Yz11gZzTyg6IKgJxZ02t19xj4D/aLKSaxRxSq/YtrgBwR EVPw== X-Gm-Message-State: AOAM5333x4cM3XS2Mr1y/67G83fTUcwwFf3oa3Q2a66fkK5BZ+e+/Gzg a/NFSC6A1JjNwH98Hz0ozgU= X-Received: by 2002:a17:902:724b:b029:d5:a5e2:51c4 with SMTP id c11-20020a170902724bb02900d5a5e251c4mr9246635pll.80.1603705162249; Mon, 26 Oct 2020 02:39:22 -0700 (PDT) Received: from localhost.localdomain ([154.93.3.113]) by smtp.gmail.com with ESMTPSA id v24sm10145984pgi.91.2020.10.26.02.39.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Oct 2020 02:39:21 -0700 (PDT) From: Menglong Dong To: davem@davemloft.net Cc: kuznet@ms2.inr.ac.ru, yoshfuji@linux-ipv6.org, kuba@kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] net: udp: increase UDP_MIB_RCVBUFERRORS when ENOBUFS Date: Mon, 26 Oct 2020 17:39:07 +0800 Message-Id: <20201026093907.13799-1-menglong8.dong@gmail.com> X-Mailer: git-send-email 2.28.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The error returned from __udp_enqueue_schedule_skb is ENOMEM or ENOBUFS. For now, only ENOMEM is counted into UDP_MIB_RCVBUFERRORS in __udp_queue_rcv_skb. UDP_MIB_RCVBUFERRORS should count all of the failed skb because of memory errors during udp receiving, not just those because of the limit of sock receive queue. We can see this in __udp4_lib_mcast_deliver: nskb = skb_clone(skb, GFP_ATOMIC); if (unlikely(!nskb)) { atomic_inc(&sk->sk_drops); __UDP_INC_STATS(net, UDP_MIB_RCVBUFERRORS, IS_UDPLITE(sk)); __UDP_INC_STATS(net, UDP_MIB_INERRORS, IS_UDPLITE(sk)); continue; } See, UDP_MIB_RCVBUFERRORS is increased when skb clone failed. From this point, ENOBUFS from __udp_enqueue_schedule_skb should be counted, too. It means that the buffer used by all of the UDP sock is to the limit, and it ought to be counted. Signed-off-by: Menglong Dong --- net/ipv4/udp.c | 4 +--- net/ipv6/udp.c | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 09f0a23d1a01..49a69d8d55b3 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -2035,9 +2035,7 @@ static int __udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) int is_udplite = IS_UDPLITE(sk); /* Note that an ENOMEM error is charged twice */ - if (rc == -ENOMEM) - UDP_INC_STATS(sock_net(sk), UDP_MIB_RCVBUFERRORS, - is_udplite); + UDP_INC_STATS(sock_net(sk), UDP_MIB_RCVBUFERRORS, is_udplite); UDP_INC_STATS(sock_net(sk), UDP_MIB_INERRORS, is_udplite); kfree_skb(skb); trace_udp_fail_queue_rcv_skb(rc, sk); diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 29d9691359b9..d5e23b150fd9 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c @@ -634,9 +634,7 @@ static int __udpv6_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) int is_udplite = IS_UDPLITE(sk); /* Note that an ENOMEM error is charged twice */ - if (rc == -ENOMEM) - UDP6_INC_STATS(sock_net(sk), - UDP_MIB_RCVBUFERRORS, is_udplite); + UDP6_INC_STATS(sock_net(sk), UDP_MIB_RCVBUFERRORS, is_udplite); UDP6_INC_STATS(sock_net(sk), UDP_MIB_INERRORS, is_udplite); kfree_skb(skb); return -1; -- 2.28.0