• Al Viro's avatar
    Delay struct net freeing while there's a sysfs instance refering to it · a685e089
    Al Viro authored
    	* new refcount in struct net, controlling actual freeing of the memory
    	* new method in kobj_ns_type_operations (->drop_ns())
    	* ->current_ns() semantics change - it's supposed to be followed by
    corresponding ->drop_ns().  For struct net in case of CONFIG_NET_NS it bumps
    the new refcount; net_drop_ns() decrements it and calls net_free() if the
    last reference has been dropped.  Method renamed to ->grab_current_ns().
    	* old net_free() callers call net_drop_ns() instead.
    	* sysfs_exit_ns() is gone, along with a large part of callchain
    leading to it; now that the references stored in ->ns[...] stay valid we
    do not need to hunt them down and replace them with NULL.  That fixes
    problems in sysfs_lookup() and sysfs_readdir(), along with getting rid
    of sb->s_instances abuse.
    
    	Note that struct net *shutdown* logics has not changed - net_cleanup()
    is called exactly when it used to be called.  The only thing postponed by
    having a sysfs instance refering to that struct net is actual freeing of
    memory occupied by struct net.
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    a685e089
net_namespace.c 14.4 KB