Fix l2tp stat counter

Submitted by Dominik Heidler on March 16, 2016, 3:35 p.m.

Details

Message ID 1458142510-3295-1-git-send-email-dominik@heidler.eu
State Accepted, archived
Headers show

Commit Message

Dominik Heidler March 16, 2016, 3:35 p.m.
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>
---
 build_patches/ar71xx-3.18-l2tp-stats.patch | 42 ++++++++++++++++++++++++++++++
 buildscript                                |  3 +++
 2 files changed, 45 insertions(+)
 create mode 100644 build_patches/ar71xx-3.18-l2tp-stats.patch

Patch hide | download patch | download mbox

diff --git a/build_patches/ar71xx-3.18-l2tp-stats.patch b/build_patches/ar71xx-3.18-l2tp-stats.patch
new file mode 100644
index 0000000..039d2c8
--- /dev/null
+++ b/build_patches/ar71xx-3.18-l2tp-stats.patch
@@ -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
++
diff --git a/buildscript b/buildscript
index 362781a..6f4bb09 100755
--- a/buildscript
+++ b/buildscript
@@ -171,6 +171,9 @@  prepare() {
     #add Support for GL-AR150 see also http://git.openwrt.org/?p=openwrt.git;a=commit;h=8211e81bce57392635fa3ad6572514387118e4a5
     patch -p0 -d "$target" -i "$PWD"/build_patches/ar71xx-add-support-for-GL-AR150.patch
 
+    # fix l2tp stat counter on 32 Bit systems
+    patch -p1 -d "$target" -i "$PWD"/build_patches/ar71xx-3.18-l2tp-stats.patch
+
     #saves ~200MB for each build
     test -d ./src/dl || mkdir ./src/dl
     ln -s ../../src/dl "$target"/dl

Comments

Tim Niemeyer March 16, 2016, 3:51 p.m.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Hi

Am 16. März 2016 16:35:10 MEZ, schrieb Dominik Heidler <dominik@heidler.eu>:
>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>

Schöne Sache. Danke.

Tim

>---
>build_patches/ar71xx-3.18-l2tp-stats.patch | 42
>++++++++++++++++++++++++++++++
> buildscript                                |  3 +++
> 2 files changed, 45 insertions(+)
> create mode 100644 build_patches/ar71xx-3.18-l2tp-stats.patch
>
>diff --git a/build_patches/ar71xx-3.18-l2tp-stats.patch
>b/build_patches/ar71xx-3.18-l2tp-stats.patch
>new file mode 100644
>index 0000000..039d2c8
>--- /dev/null
>+++ b/build_patches/ar71xx-3.18-l2tp-stats.patch
>@@ -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
>++
>diff --git a/buildscript b/buildscript
>index 362781a..6f4bb09 100755
>--- a/buildscript
>+++ b/buildscript
>@@ -171,6 +171,9 @@ prepare() {
>#add Support for GL-AR150 see also
>http://git.openwrt.org/?p=openwrt.git;a=commit;h=8211e81bce57392635fa3ad6572514387118e4a5
>patch -p0 -d "$target" -i
>"$PWD"/build_patches/ar71xx-add-support-for-GL-AR150.patch
>
>+    # fix l2tp stat counter on 32 Bit systems
>+    patch -p1 -d "$target" -i
>"$PWD"/build_patches/ar71xx-3.18-l2tp-stats.patch
>+
>     #saves ~200MB for each build
>     test -d ./src/dl || mkdir ./src/dl
>     ln -s ../../src/dl "$target"/dl
-----BEGIN PGP SIGNATURE-----

iQE5BAEBCgAjHBxUaW0gTmllbWV5ZXIgPHRpbUB0bi14Lm9yZz4FAlbpgQQACgkQ
ELiw0DPkKM/Pgwf/Z06RcqQP6T6NiuWk8sLJqO9ZDe3/uxBilUX7HCb2MOFhGAUM
T08yKCkz2yIDJh6UYoeZQv+tT+39YGCyUu9EbMle0+rtDiFNrsUE2ek/9OG0wyEA
tHvNRH1GHbDfRAGS5nr7g9yWENsovWtg9O0rNhNcwUuHT5EVhq42sirznS9s6YYx
CuBcwaJywFuRMHwME4NXCnRjDFsjEIbooklcTf808wWakvRI9vwaq3FFilzg+WR3
4E1diOcsjHqiYR6GArllqZ3ytqliG/LSpIVA15CZC2aHDbgw+t55d+YWjdZ9RhxY
eD7mk/HNv7cyA7kJwRSA8gO4fgDy8oyustUT0g==
=4kUD
-----END PGP SIGNATURE-----
Tim Niemeyer March 24, 2016, 10:46 p.m.
Hi

Rebased und applied.

Tim

Am Mittwoch, den 16.03.2016, 16:35 +0100 schrieb Dominik Heidler:
> 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>
> ---
>  build_patches/ar71xx-3.18-l2tp-stats.patch | 42 ++++++++++++++++++++++++++++++
>  buildscript                                |  3 +++
>  2 files changed, 45 insertions(+)
>  create mode 100644 build_patches/ar71xx-3.18-l2tp-stats.patch
> 
> diff --git a/build_patches/ar71xx-3.18-l2tp-stats.patch b/build_patches/ar71xx-3.18-l2tp-stats.patch
> new file mode 100644
> index 0000000..039d2c8
> --- /dev/null
> +++ b/build_patches/ar71xx-3.18-l2tp-stats.patch
> @@ -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
> ++
> diff --git a/buildscript b/buildscript
> index 362781a..6f4bb09 100755
> --- a/buildscript
> +++ b/buildscript
> @@ -171,6 +171,9 @@ prepare() {
>      #add Support for GL-AR150 see also http://git.openwrt.org/?p=openwrt.git;a=commit;h=8211e81bce57392635fa3ad6572514387118e4a5
>      patch -p0 -d "$target" -i "$PWD"/build_patches/ar71xx-add-support-for-GL-AR150.patch
>  
> +    # fix l2tp stat counter on 32 Bit systems
> +    patch -p1 -d "$target" -i "$PWD"/build_patches/ar71xx-3.18-l2tp-stats.patch
> +
>      #saves ~200MB for each build
>      test -d ./src/dl || mkdir ./src/dl
>      ln -s ../../src/dl "$target"/dl
> -- 
> 2.7.2
>