netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Vladimir Oltean <olteanv@gmail.com>
To: "David S . Miller" <davem@davemloft.net>,
	Jakub Kicinski <kuba@kernel.org>
Cc: netdev@vger.kernel.org, Andrew Lunn <andrew@lunn.ch>,
	Florian Fainelli <f.fainelli@gmail.com>,
	Cong Wang <xiyou.wangcong@gmail.com>,
	Stephen Hemminger <stephen@networkplumber.org>,
	Eric Dumazet <edumazet@google.com>,
	George McCollister <george.mccollister@gmail.com>,
	Oleksij Rempel <o.rempel@pengutronix.de>,
	Jay Vosburgh <j.vosburgh@gmail.com>,
	Veaceslav Falico <vfalico@gmail.com>,
	Andy Gospodarek <andy@greyhouse.net>,
	Arnd Bergmann <arnd@arndb.de>, Taehee Yoo <ap420073@gmail.com>,
	Jiri Pirko <jiri@resnulli.us>, Florian Westphal <fw@strlen.de>,
	Nikolay Aleksandrov <nikolay@nvidia.com>,
	Pravin B Shelar <pshelar@ovn.org>,
	Sridhar Samudrala <sridhar.samudrala@intel.com>,
	Saeed Mahameed <saeedm@nvidia.com>
Subject: [PATCH v5 net-next 05/16] s390/appldata_net_sum: hold the netdev lists lock when retrieving device statistics
Date: Fri,  8 Jan 2021 18:31:48 +0200	[thread overview]
Message-ID: <20210108163159.358043-6-olteanv@gmail.com> (raw)
In-Reply-To: <20210108163159.358043-1-olteanv@gmail.com>

From: Vladimir Oltean <vladimir.oltean@nxp.com>

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.

In the case of the appldata driver, an RCU read-side critical section is
used to ensure the integrity of the list of network interfaces, because
the driver iterates through all net devices in the netns to aggregate
statistics. We still need some protection against an interface
registering or deregistering, and the writer-side lock, the netns's
mutex, is fine for that, because it offers sleepable context.

The ops->callback function is called from under appldata_ops_mutex
protection, so this is proof that the context is sleepable and holding
a mutex is therefore fine.

Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Cc: linux-s390@vger.kernel.org
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
---
Changes in v5:
None.

Changes in v4:
None.

Changes in v3:
None.

Changes in v2:
None.

 arch/s390/appldata/appldata_net_sum.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/arch/s390/appldata/appldata_net_sum.c b/arch/s390/appldata/appldata_net_sum.c
index 59c282ca002f..4db886980cba 100644
--- a/arch/s390/appldata/appldata_net_sum.c
+++ b/arch/s390/appldata/appldata_net_sum.c
@@ -78,8 +78,9 @@ static void appldata_get_net_sum_data(void *data)
 	tx_dropped = 0;
 	collisions = 0;
 
-	rcu_read_lock();
-	for_each_netdev_rcu(&init_net, dev) {
+	netif_lists_lock(&init_net);
+
+	for_each_netdev(&init_net, dev) {
 		const struct rtnl_link_stats64 *stats;
 		struct rtnl_link_stats64 temp;
 
@@ -95,7 +96,8 @@ static void appldata_get_net_sum_data(void *data)
 		collisions += stats->collisions;
 		i++;
 	}
-	rcu_read_unlock();
+
+	netif_lists_unlock(&init_net);
 
 	net_data->nr_interfaces = i;
 	net_data->rx_packets = rx_packets;
-- 
2.25.1


  parent reply	other threads:[~2021-01-08 16:33 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-08 16:31 [PATCH v5 net-next 00/16] Make .ndo_get_stats64 sleepable Vladimir Oltean
2021-01-08 16:31 ` [PATCH v5 net-next 01/16] net: mark dev_base_lock for deprecation Vladimir Oltean
2021-01-08 16:31 ` [PATCH v5 net-next 02/16] net: introduce a mutex for the netns interface lists Vladimir Oltean
2021-01-08 16:31 ` [PATCH v5 net-next 03/16] net: procfs: hold netif_lists_lock when retrieving device statistics Vladimir Oltean
2021-01-08 16:31 ` [PATCH v5 net-next 04/16] net: sysfs: don't hold dev_base_lock while " Vladimir Oltean
2021-01-08 16:31 ` Vladimir Oltean [this message]
2021-01-08 16:31 ` [PATCH v5 net-next 06/16] parisc/led: hold the netdev lists lock when " Vladimir Oltean
2021-01-08 16:31 ` [PATCH v5 net-next 07/16] net: remove return value from dev_get_stats Vladimir Oltean
2021-01-08 16:31 ` [PATCH v5 net-next 08/16] net: allow ndo_get_stats64 to return an int error code Vladimir Oltean
2021-01-08 16:31 ` [PATCH v5 net-next 09/16] scsi: fcoe: propagate errors from dev_get_stats Vladimir Oltean
2021-01-08 16:31 ` [PATCH v5 net-next 10/16] net: openvswitch: " Vladimir Oltean
2021-01-08 16:31 ` [PATCH v5 net-next 11/16] net: " Vladimir Oltean
2021-01-08 17:22   ` Vladimir Oltean
2021-01-11 10:55   ` Dan Carpenter
2021-01-11 11:03     ` Vladimir Oltean
2021-01-08 16:31 ` [PATCH v5 net-next 12/16] net: terminate " Vladimir Oltean
2021-01-08 16:31 ` [PATCH v5 net-next 13/16] net: openvswitch: ensure dev_get_stats can sleep Vladimir Oltean
2021-01-08 16:31 ` [PATCH v5 net-next 14/16] net: net_failover: ensure .ndo_get_stats64 " Vladimir Oltean
2021-01-08 16:31 ` [PATCH v5 net-next 15/16] net: bonding: " Vladimir Oltean
2021-01-09  1:43   ` Jakub Kicinski
2021-01-08 16:31 ` [PATCH v5 net-next 16/16] net: mark ndo_get_stats64 as being able to sleep Vladimir Oltean

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=20210108163159.358043-6-olteanv@gmail.com \
    --to=olteanv@gmail.com \
    --cc=andrew@lunn.ch \
    --cc=andy@greyhouse.net \
    --cc=ap420073@gmail.com \
    --cc=arnd@arndb.de \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=f.fainelli@gmail.com \
    --cc=fw@strlen.de \
    --cc=george.mccollister@gmail.com \
    --cc=j.vosburgh@gmail.com \
    --cc=jiri@resnulli.us \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=nikolay@nvidia.com \
    --cc=o.rempel@pengutronix.de \
    --cc=pshelar@ovn.org \
    --cc=saeedm@nvidia.com \
    --cc=sridhar.samudrala@intel.com \
    --cc=stephen@networkplumber.org \
    --cc=vfalico@gmail.com \
    --cc=xiyou.wangcong@gmail.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).