1 diff -Naur linux-4.9.17.org/drivers/net/ethernet/intel/e1000e/netdev.c linux-4.9.17/drivers/net/ethernet/intel/e1000e/netdev.c
2 --- linux-4.9.17.org/drivers/net/ethernet/intel/e1000e/netdev.c 2017-03-22 12:44:07.000000000 +0100
3 +++ linux-4.9.17/drivers/net/ethernet/intel/e1000e/netdev.c 2017-03-26 16:20:47.253511522 +0200
4 @@ -5924,10 +5924,14 @@
5 struct rtnl_link_stats64 *stats)
7 struct e1000_adapter *adapter = netdev_priv(netdev);
10 memset(stats, 0, sizeof(struct rtnl_link_stats64));
11 - spin_lock(&adapter->stats64_lock);
12 - e1000e_update_stats(adapter);
13 + if (spin_trylock(&adapter->stats64_lock)) {
14 + e1000e_update_stats(adapter);
18 /* Fill out the OS statistics structure */
19 stats->rx_bytes = adapter->stats.gorc;
20 stats->rx_packets = adapter->stats.gprc;
23 /* Tx Dropped needs to be maintained elsewhere */
25 - spin_unlock(&adapter->stats64_lock);
26 + if (has_lock) spin_unlock(&adapter->stats64_lock);
30 diff -Naur linux-4.9.17.org/drivers/net/ethernet/intel/igb/igb_main.c linux-4.9.17/drivers/net/ethernet/intel/igb/igb_main.c
31 --- linux-4.9.17.org/drivers/net/ethernet/intel/igb/igb_main.c 2017-03-22 12:44:07.000000000 +0100
32 +++ linux-4.9.17/drivers/net/ethernet/intel/igb/igb_main.c 2017-03-26 16:02:46.820093793 +0200
33 @@ -5391,10 +5391,11 @@
35 struct igb_adapter *adapter = netdev_priv(netdev);
37 - spin_lock(&adapter->stats64_lock);
38 - igb_update_stats(adapter, &adapter->stats64);
39 + if (spin_trylock(&adapter->stats64_lock)) {
40 + igb_update_stats(adapter, &adapter->stats64);
41 + spin_unlock(&adapter->stats64_lock);
43 memcpy(stats, &adapter->stats64, sizeof(*stats));
44 - spin_unlock(&adapter->stats64_lock);