• E
    net: add net device refcount tracker infrastructure · 4d92b95f
    Eric Dumazet 提交于
    net device are refcounted. Over the years we had numerous bugs
    caused by imbalanced dev_hold() and dev_put() calls.
    
    The general idea is to be able to precisely pair each decrement with
    a corresponding prior increment. Both share a cookie, basically
    a pointer to private data storing stack traces.
    
    This patch adds dev_hold_track() and dev_put_track().
    
    To use these helpers, each data structure owning a refcount
    should also use a "netdevice_tracker" to pair the hold and put.
    
    netdevice_tracker dev_tracker;
    ...
    dev_hold_track(dev, &dev_tracker, GFP_ATOMIC);
    ...
    dev_put_track(dev, &dev_tracker);
    
    Whenever a leak happens, we will get precise stack traces
    of the point dev_hold_track() happened, at device dismantle phase.
    
    We will also get a stack trace if too many dev_put_track() for the same
    netdevice_tracker are attempted.
    
    This is guarded by CONFIG_NET_DEV_REFCNT_TRACKER option.
    Signed-off-by: NEric Dumazet <edumazet@google.com>
    Signed-off-by: NJakub Kicinski <kuba@kernel.org>
    4d92b95f
netdevice.h 158.6 KB