From ba7863f4d3bfe1698e0a92934cbc9c3021f4448d Mon Sep 17 00:00:00 2001 From: Eric Dumazet Date: Thu, 28 Apr 2016 06:33:24 -0700 Subject: [PATCH] net: snmp: fix 64bit stats on 32bit arches I accidentally replaced BH disabling by preemption disabling in SNMP_ADD_STATS64() and SNMP_UPD_PO_STATS64() on 32bit builds. For 64bit stats on 32bit arch, we really need to disable BH, since the "struct u64_stats_sync syncp" might be manipulated both from process and BH contexts. Fixes: 6aef70a851ac ("net: snmp: kill various STATS_USER() helpers") Reported-by: Nicolas Dichtel Tested-by: Nicolas Dichtel Signed-off-by: Eric Dumazet Signed-off-by: David S. Miller --- include/net/snmp.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/net/snmp.h b/include/net/snmp.h index 6bdd255..c9228ad 100644 --- a/include/net/snmp.h +++ b/include/net/snmp.h @@ -166,9 +166,9 @@ struct linux_xfrm_mib { #define SNMP_ADD_STATS64(mib, field, addend) \ do { \ - preempt_disable(); \ + local_bh_disable(); \ __SNMP_ADD_STATS64(mib, field, addend); \ - preempt_enable(); \ + local_bh_enable(); \ } while (0) #define __SNMP_INC_STATS64(mib, field) SNMP_ADD_STATS64(mib, field, 1) @@ -184,9 +184,9 @@ struct linux_xfrm_mib { } while (0) #define SNMP_UPD_PO_STATS64(mib, basefield, addend) \ do { \ - preempt_disable(); \ + local_bh_disable(); \ __SNMP_UPD_PO_STATS64(mib, basefield, addend); \ - preempt_enable(); \ + local_bh_enable(); \ } while (0) #else #define __SNMP_INC_STATS64(mib, field) __SNMP_INC_STATS(mib, field) -- 2.7.4