Skip to content
  • Ben Hutchings's avatar
    net: Get rid of rtnl_link_stats64 / net_device_stats union · 3cfde79c
    Ben Hutchings authored
    In commit be1f3c2c "net: Enable 64-bit
    net device statistics on 32-bit architectures" I redefined struct
    net_device_stats so that it could be used in a union with struct
    rtnl_link_stats64, avoiding the need for explicit copying or
    conversion between the two.  However, this is unsafe because there is
    no locking required and no lock consistently held around calls to
    dev_get_stats() and use of the statistics structure it returns.
    
    In commit 28172739
    
     "net: fix 64 bit
    counters on 32 bit arches" Eric Dumazet dealt with that problem by
    requiring callers of dev_get_stats() to provide storage for the
    result.  This means that the net_device::stats64 field and the padding
    in struct net_device_stats are now redundant, so remove them.
    
    Update the comment on net_device_ops::ndo_get_stats64 to reflect its
    new usage.
    
    Change dev_txq_stats_fold() to use struct rtnl_link_stats64, since
    that is what all its callers are really using and it is no longer
    going to be compatible with struct net_device_stats.
    
    Eric Dumazet suggested the separate function for the structure
    conversion.
    
    Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
    Acked-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    3cfde79c