mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
net-sysfs: convert netstat_show() to RCU
dev_get_stats() can be called from RCU, there is no need to acquire dev_base_lock. Change dev_isalive() comment to reflect we no longer use dev_base_lock from net/core/net-sysfs.c Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
004d138364
commit
e154bb7a6e
@ -34,7 +34,7 @@ static const char fmt_dec[] = "%d\n";
|
||||
static const char fmt_ulong[] = "%lu\n";
|
||||
static const char fmt_u64[] = "%llu\n";
|
||||
|
||||
/* Caller holds RTNL, RCU or dev_base_lock */
|
||||
/* Caller holds RTNL or RCU */
|
||||
static inline int dev_isalive(const struct net_device *dev)
|
||||
{
|
||||
return READ_ONCE(dev->reg_state) <= NETREG_REGISTERED;
|
||||
@ -685,14 +685,14 @@ static ssize_t netstat_show(const struct device *d,
|
||||
WARN_ON(offset > sizeof(struct rtnl_link_stats64) ||
|
||||
offset % sizeof(u64) != 0);
|
||||
|
||||
read_lock(&dev_base_lock);
|
||||
rcu_read_lock();
|
||||
if (dev_isalive(dev)) {
|
||||
struct rtnl_link_stats64 temp;
|
||||
const struct rtnl_link_stats64 *stats = dev_get_stats(dev, &temp);
|
||||
|
||||
ret = sysfs_emit(buf, fmt_u64, *(u64 *)(((u8 *)stats) + offset));
|
||||
}
|
||||
read_unlock(&dev_base_lock);
|
||||
rcu_read_unlock();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user