diff -Naur linux-4.14.1.org/drivers/net/ethernet/intel/e1000e/netdev.c linux-4.14.1/drivers/net/ethernet/intel/e1000e/netdev.c
--- linux-4.14.1.org/drivers/net/ethernet/intel/e1000e/netdev.c	2017-11-21 09:49:25.000000000 +0100
+++ linux-4.14.1/drivers/net/ethernet/intel/e1000e/netdev.c	2017-11-21 18:28:05.730711267 +0100
@@ -5952,9 +5952,13 @@
 			struct rtnl_link_stats64 *stats)
 {
 	struct e1000_adapter *adapter = netdev_priv(netdev);
+	int has_lock = 0;
+ 
+	if (spin_trylock(&adapter->stats64_lock)) {
+		e1000e_update_stats(adapter);
+		has_lock = 1;
+	}
 
-	spin_lock(&adapter->stats64_lock);
-	e1000e_update_stats(adapter);
 	/* Fill out the OS statistics structure */
 	stats->rx_bytes = adapter->stats.gorc;
 	stats->rx_packets = adapter->stats.gprc;
@@ -5984,7 +5988,7 @@
 
 	/* Tx Dropped needs to be maintained elsewhere */
 
-	spin_unlock(&adapter->stats64_lock);
+	if (has_lock) spin_unlock(&adapter->stats64_lock);
 }
 
 /**
diff -Naur linux-4.14.1.org/drivers/net/ethernet/intel/igb/igb_main.c linux-4.14.1/drivers/net/ethernet/intel/igb/igb_main.c
--- linux-4.14.1.org/drivers/net/ethernet/intel/igb/igb_main.c	2017-11-21 09:49:25.000000000 +0100
+++ linux-4.14.1/drivers/net/ethernet/intel/igb/igb_main.c	2017-11-21 18:28:02.358749514 +0100
@@ -5499,10 +5499,11 @@
 {
 	struct igb_adapter *adapter = netdev_priv(netdev);
 
-	spin_lock(&adapter->stats64_lock);
-	igb_update_stats(adapter);
+	if (spin_trylock(&adapter->stats64_lock)) {
+		igb_update_stats(adapter);
+		spin_unlock(&adapter->stats64_lock);
+	}
 	memcpy(stats, &adapter->stats64, sizeof(*stats));
-	spin_unlock(&adapter->stats64_lock);
 }
 
 /**
