From: Eric Dumazet <eric.duma...@gmail.com> Date: Thu, 17 Mar 2016 17:23:36 -0700
> From: Eric Dumazet <eduma...@google.com> > > bond_get_stats() can be called from rtnetlink (with RTNL held) > or from /proc/net/dev seq handler (with RCU held) > > The logic added in commit 5f0c5f73e5ef ("bonding: make global bonding > stats more reliable") kind of assumed only one cpu could run there. > > If multiple threads are reading /proc/net/dev, stats can be really > messed up after a while. > > A second problem is that some fields are 32bit, so we need to properly > handle the wrap around problem. > > Given that RTNL is not always held, we need to use > bond_for_each_slave_rcu(). > > Fixes: 5f0c5f73e5ef ("bonding: make global bonding stats more reliable") > Signed-off-by: Eric Dumazet <eduma...@google.com> Applied and queued up for -stable, thanks Eric.