From patchwork Thu Jan 7 09:49:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 12003417 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E4E3DC433E6 for ; Thu, 7 Jan 2021 09:52:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B1B072333D for ; Thu, 7 Jan 2021 09:52:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727932AbhAGJvv (ORCPT ); Thu, 7 Jan 2021 04:51:51 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41030 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727283AbhAGJvq (ORCPT ); Thu, 7 Jan 2021 04:51:46 -0500 Received: from mail-ed1-x534.google.com (mail-ed1-x534.google.com [IPv6:2a00:1450:4864:20::534]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 518A0C0612A1 for ; Thu, 7 Jan 2021 01:51:08 -0800 (PST) Received: by mail-ed1-x534.google.com with SMTP id y24so7125403edt.10 for ; Thu, 07 Jan 2021 01:51:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=pnRhj7MGrAFks0sNbh9iopBOpkA/i+Ed1RPw6h3LoTY=; b=c2I3RWLFfRCzkfKscd+p2mP6zbJsfQnzi/+2b4DQGjOyQv9Ea9kX7une3hm4bMePEB afkV0umzXsqgecJjImPh75jdCuVF+2o7hXw2shCKQMtBQC1fy4hLm1+oXo5E16s2zW6q VzraX3tx0OYcTb2KVQkWkv3jW3GGqmJmytD+LsfJwSKnU1EEzeQiwx2NCXij4iyDLhoc oK2rxFEfxnOD210F2iOpu1AwtkmBZAFOrF1JK85I3ntvGC/gaJFTsgL7JDZRWpf8Vpn9 DoAp0q+bqMSi9hBH4GlUgstTu73ImCNSLKIB9rP4otIhyzPRgIpmZHigBpIsto4Xyi8A eirQ== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=pnRhj7MGrAFks0sNbh9iopBOpkA/i+Ed1RPw6h3LoTY=; b=D+Bc2Y2L1OixgkW/qekkWMu3XOvZm4mdnqPOrITzeTP25+IfGE3mRJUXjfe7NKnJBg KeHT5Dyh5ruFv0fCQVc/AFpEGgFF88WP0CJSe3ry2OBxcW8cXiX0HagvKTILOStnD1jy GQ6+07qPEcKouFhb5gyKIQqrWYMhUkyj2XvnmFJD0l9hWtj7QyX+iXHXC7smPKkCgPWT pH2y8AeCJLzbinI4cBSbknh61QdbsvHj3mhxHuQ0Vl/LysNkX1I1xnSwlDiVyH1VtnYk ZtNJSRGbjPB+/9WkWWcAhqKT0dNpLHkMkklztjivKeMAoCzBQ3c+iUWRrAH6YDTPY3Kr /24Q== X-Gm-Message-State: AOAM531Gsvmk0mkINU4eUrsloPWA12cbfHha7Vpn8hNKMlj/NKxdwIoX ZZ8kXhu6YjLoG9TZuDa3wlE= X-Google-Smtp-Source: ABdhPJy8ZjDcb77QCvpbasYGt76R8EePoY3CYN7OgM/cRCdlakkn+Du+AxHyLjVvkUTLuu1I+RWdiQ== X-Received: by 2002:a05:6402:c83:: with SMTP id cm3mr1058183edb.189.1610013067105; Thu, 07 Jan 2021 01:51:07 -0800 (PST) Received: from localhost.localdomain (5-12-227-87.residential.rdsnet.ro. [5.12.227.87]) by smtp.gmail.com with ESMTPSA id k15sm2251571ejc.79.2021.01.07.01.51.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Jan 2021 01:51:06 -0800 (PST) From: Vladimir Oltean To: "David S . Miller" , Jakub Kicinski Cc: netdev@vger.kernel.org, Andrew Lunn , Florian Fainelli , Cong Wang , Stephen Hemminger , Eric Dumazet , George McCollister , Oleksij Rempel , Jay Vosburgh , Veaceslav Falico , Andy Gospodarek , Arnd Bergmann , Taehee Yoo , Jiri Pirko , Florian Westphal Subject: [PATCH v3 net-next 03/12] net: procfs: hold netif_lists_lock when retrieving device statistics Date: Thu, 7 Jan 2021 11:49:42 +0200 Message-Id: <20210107094951.1772183-4-olteanv@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210107094951.1772183-1-olteanv@gmail.com> References: <20210107094951.1772183-1-olteanv@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Vladimir Oltean In the effort of making .ndo_get_stats64 be able to sleep, we need to ensure the callers of dev_get_stats do not use atomic context. The /proc/net/dev file uses an RCU read-side critical section to ensure the integrity of the list of network interfaces, because it iterates through all net devices in the netns to show their statistics. To offer the equivalent protection against an interface registering or deregistering, while also remaining in sleepable context, we can use the netns mutex for the interface lists. Cc: Cong Wang Cc: Eric Dumazet Signed-off-by: Vladimir Oltean --- Changes in v3: None. Changes in v2: None. net/core/net-procfs.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/net/core/net-procfs.c b/net/core/net-procfs.c index c714e6a9dad4..4784703c1e39 100644 --- a/net/core/net-procfs.c +++ b/net/core/net-procfs.c @@ -21,7 +21,7 @@ static inline struct net_device *dev_from_same_bucket(struct seq_file *seq, loff unsigned int count = 0, offset = get_offset(*pos); h = &net->dev_index_head[get_bucket(*pos)]; - hlist_for_each_entry_rcu(dev, h, index_hlist) { + hlist_for_each_entry(dev, h, index_hlist) { if (++count == offset) return dev; } @@ -51,9 +51,11 @@ static inline struct net_device *dev_from_bucket(struct seq_file *seq, loff_t *p * in detail. */ static void *dev_seq_start(struct seq_file *seq, loff_t *pos) - __acquires(RCU) { - rcu_read_lock(); + struct net *net = seq_file_net(seq); + + netif_lists_lock(net); + if (!*pos) return SEQ_START_TOKEN; @@ -70,9 +72,10 @@ static void *dev_seq_next(struct seq_file *seq, void *v, loff_t *pos) } static void dev_seq_stop(struct seq_file *seq, void *v) - __releases(RCU) { - rcu_read_unlock(); + struct net *net = seq_file_net(seq); + + netif_lists_unlock(net); } static void dev_seq_printf_stats(struct seq_file *seq, struct net_device *dev)