• Tonghao Zhang's avatar
    sock: Move the socket inuse to namespace. · 648845ab
    Tonghao Zhang authored
    In some case, we want to know how many sockets are in use in
    different _net_ namespaces. It's a key resource metric.
    This patch add a member in struct netns_core. This is a counter
    for socket-inuse in the _net_ namespace. The patch will add/sub
    counter in the sk_alloc, sk_clone_lock and __sk_free.
    This patch will not counter the socket created in kernel.
    It's not very useful for userspace to know how many kernel
    sockets we created.
    The main reasons for doing this are that:
    1. When linux calls the 'do_exit' for process to exit, the functions
    'exit_task_namespaces' and 'exit_task_work' will be called sequentially.
    'exit_task_namespaces' may have destroyed the _net_ namespace, but
    'sock_release' called in 'exit_task_work' may use the _net_ namespace
    if we counter the socket-inuse in sock_release.
    2. socket and sock are in pair. More important, sock holds the _net_
    namespace. We counter the socket-inuse in sock, for avoiding holding
    _net_ namespace again in socket. It's a easy way to maintain the code.
    Signed-off-by: default avatarMartin Zhang <zhangjunweimartin@didichuxing.com>
    Signed-off-by: default avatarTonghao Zhang <zhangtonghao@didichuxing.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>