|
|
@@ -1248,12 +1248,15 @@ static void netvsc_get_stats64(struct net_device *net,
|
|
|
struct rtnl_link_stats64 *t)
|
|
|
{
|
|
|
struct net_device_context *ndev_ctx = netdev_priv(net);
|
|
|
- struct netvsc_device *nvdev = rcu_dereference_rtnl(ndev_ctx->nvdev);
|
|
|
+ struct netvsc_device *nvdev;
|
|
|
struct netvsc_vf_pcpu_stats vf_tot;
|
|
|
int i;
|
|
|
|
|
|
+ rcu_read_lock();
|
|
|
+
|
|
|
+ nvdev = rcu_dereference(ndev_ctx->nvdev);
|
|
|
if (!nvdev)
|
|
|
- return;
|
|
|
+ goto out;
|
|
|
|
|
|
netdev_stats_to_stats64(t, &net->stats);
|
|
|
|
|
|
@@ -1292,6 +1295,8 @@ static void netvsc_get_stats64(struct net_device *net,
|
|
|
t->rx_packets += packets;
|
|
|
t->multicast += multicast;
|
|
|
}
|
|
|
+out:
|
|
|
+ rcu_read_unlock();
|
|
|
}
|
|
|
|
|
|
static int netvsc_set_mac_addr(struct net_device *ndev, void *p)
|