Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

sysfs-namespaces: add a high-level Documentation file

The first three paragraphs are almost verbatim taken from Eric's
commit message on the patch introducing network ns tags. The next
two paragraphs I wrote to be a brief high level overview. The last
section is taken from the commit message on "Implement sysfs tagged
directory support", but updated. Hopefully correctly.

Signed-off-by: Serge E. Hallyn <serue@us.ibm.com>
Cc: Eric W. Biederman <ebiederm@xmission.com>
Cc: Tejun Heo <tj@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Serge E. Hallyn and committed by
Greg Kroah-Hartman
b9d8b45e be867b19

+42
+42
Documentation/filesystems/sysfs-tagging.txt
··· 1 + Sysfs tagging 2 + ------------- 3 + 4 + (Taken almost verbatim from Eric Biederman's netns tagging patch 5 + commit msg) 6 + 7 + The problem. Network devices show up in sysfs and with the network 8 + namespace active multiple devices with the same name can show up in 9 + the same directory, ouch! 10 + 11 + To avoid that problem and allow existing applications in network 12 + namespaces to see the same interface that is currently presented in 13 + sysfs, sysfs now has tagging directory support. 14 + 15 + By using the network namespace pointers as tags to separate out the 16 + the sysfs directory entries we ensure that we don't have conflicts 17 + in the directories and applications only see a limited set of 18 + the network devices. 19 + 20 + Each sysfs directory entry may be tagged with zero or one 21 + namespaces. A sysfs_dirent is augmented with a void *s_ns. If a 22 + directory entry is tagged, then sysfs_dirent->s_flags will have a 23 + flag between KOBJ_NS_TYPE_NONE and KOBJ_NS_TYPES, and s_ns will 24 + point to the namespace to which it belongs. 25 + 26 + Each sysfs superblock's sysfs_super_info contains an array void 27 + *ns[KOBJ_NS_TYPES]. When a a task in a tagging namespace 28 + kobj_nstype first mounts sysfs, a new superblock is created. It 29 + will be differentiated from other sysfs mounts by having its 30 + s_fs_info->ns[kobj_nstype] set to the new namespace. Note that 31 + through bind mounting and mounts propagation, a task can easily view 32 + the contents of other namespaces' sysfs mounts. Therefore, when a 33 + namespace exits, it will call kobj_ns_exit() to invalidate any 34 + sysfs_dirent->s_ns pointers pointing to it. 35 + 36 + Users of this interface: 37 + - define a type in the kobj_ns_type enumeration. 38 + - call kobj_ns_type_register() with its kobj_ns_type_operations which has 39 + - current_ns() which returns current's namespace 40 + - netlink_ns() which returns a socket's namespace 41 + - initial_ns() which returns the initial namesapce 42 + - call kobj_ns_exit() when an individual tag is no longer valid