Skip to content
  • Tejun Heo's avatar
    sysfs: drop kobj_ns_type handling, take #2 · c84a3b27
    Tejun Heo authored
    The way namespace tags are implemented in sysfs is more complicated
    than necessary.  As each tag is a pointer value and required to be
    non-NULL under a namespace enabled parent, there's no need to record
    separately what type each tag is.  If multiple namespace types are
    needed, which currently aren't, we can simply compare the tag to a set
    of allowed tags in the superblock assuming that the tags, being
    pointers, won't have the same value across multiple types.
    
    This patch rips out kobj_ns_type handling from sysfs.  sysfs now has
    an enable switch to turn on namespace under a node.  If enabled, all
    children are required to have non-NULL namespace tags and filtered
    against the super_block's tag.
    
    kobject namespace determination is now performed in
    lib/kobject.c::create_dir() making sysfs_read_ns_type() unnecessary.
    The sanity checks are also moved.  create_dir() is restructured to
    ease such addition.  This removes most kobject namespace knowledge
    from sysfs proper which will enable proper separation and layering of
    sysfs.
    
    This is the second try.  The first one was cb26a311 ("sysfs: drop
    kobj_ns_type handling") which tried to automatically enable namespace
    if there are children with non-NULL namespace tags; however, it was
    broken for symlinks as they should inherit the target's tag iff
    namespace is enabled in the parent.  This led to namespace filtering
    enabled incorrectly for wireless net class devices through phy80211
    symlinks and thus network configuration failure.  a1212d27
    
    
    ("Revert "sysfs: drop kobj_ns_type handling"") reverted the commit.
    
    This shouldn't introduce any behavior changes, for real.
    
    v2: Dummy implementation of sysfs_enable_ns() for !CONFIG_SYSFS was
        missing and caused build failure.  Reported by kbuild test robot.
    
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Reported-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Cc: Eric W. Biederman <ebiederm@xmission.com>
    Cc: Kay Sievers <kay@vrfy.org>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: kbuild test robot <fengguang.wu@intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    c84a3b27