Fix l2tp stat counter

The 32 bit counter was incorrectly interpreted as signed
when being converted to the 64 bit value used for the
sysfs output.

Signed-off-by: Dominik Heidler <dominik@heidler.eu>
Reviewed-by: Tim Niemeyer <tim@tn-x.org>
[rebased to master, rename patch and remove buildscript part]
Signed-off-by: Tim Niemeyer <tim@tn-x.org>
This commit is contained in:
Dominik Heidler 2016-03-16 16:35:10 +01:00 committed by Tim Niemeyer
parent 753b755783
commit 3e78b9e1fa
1 changed files with 42 additions and 0 deletions

View File

@ -0,0 +1,42 @@
diff -ruN a/target/linux/ar71xx/patches-3.18/fix-l2tp-stats-couter-on-32-Bit-Systems.patch b/target/linux/ar71xx/patches-3.18/fix-l2tp-stats-couter-on-32-Bit-Systems.patch
--- a/target/linux/ar71xx/patches-3.18/fix-l2tp-stats-couter-on-32-Bit-Systems.patch 1970-01-01 01:00:00.000000000 +0100
+++ b/target/linux/ar71xx/patches-3.18/fix-l2tp-stats-couter-on-32-Bit-Systems.patch 2016-03-12 18:41:32.818602442 +0100
@@ -0,0 +1,38 @@
+From 19b1c8733b99f13005f2d8918bce588f0b2556f8 Mon Sep 17 00:00:00 2001
+From: Dominik Heidler <dominik@heidler.eu>
+Date: Sat, 12 Mar 2016 18:37:42 +0100
+Subject: [PATCH] Fix l2tp stats couter on 32 Bit Systems
+
+---
+ net/l2tp/l2tp_eth.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/net/l2tp/l2tp_eth.c b/net/l2tp/l2tp_eth.c
+index e253c26..a18c2ff 100644
+--- a/net/l2tp/l2tp_eth.c
++++ b/net/l2tp/l2tp_eth.c
+@@ -111,12 +111,21 @@ static struct rtnl_link_stats64 *l2tp_eth_get_stats64(struct net_device *dev,
+ {
+ struct l2tp_eth *priv = netdev_priv(dev);
+
++ #if BITS_PER_LONG == 64
+ stats->tx_bytes = atomic_long_read(&priv->tx_bytes);
+ stats->tx_packets = atomic_long_read(&priv->tx_packets);
+ stats->tx_dropped = atomic_long_read(&priv->tx_dropped);
+ stats->rx_bytes = atomic_long_read(&priv->rx_bytes);
+ stats->rx_packets = atomic_long_read(&priv->rx_packets);
+ stats->rx_errors = atomic_long_read(&priv->rx_errors);
++ #else
++ stats->tx_bytes = (unsigned long) atomic_long_read(&priv->tx_bytes);
++ stats->tx_packets = (unsigned long) atomic_long_read(&priv->tx_packets);
++ stats->tx_dropped = (unsigned long) atomic_long_read(&priv->tx_dropped);
++ stats->rx_bytes = (unsigned long) atomic_long_read(&priv->rx_bytes);
++ stats->rx_packets = (unsigned long) atomic_long_read(&priv->rx_packets);
++ stats->rx_errors = (unsigned long) atomic_long_read(&priv->rx_errors);
++ #endif
+ return stats;
+ }
+
+--
+2.7.2
+