diff options
author | Tejun Heo <tj@kernel.org> | 2013-09-11 22:29:04 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-09-26 17:50:01 -0400 |
commit | 58292cbe6669d74498a5f08db13e57cb3bcfb81d (patch) | |
tree | be6ed2b906a9796c58be9ff21251e124bf01ddcb /include/linux/netdevice.h | |
parent | bcac3769ca6d6278f93afb6cc2b234d260ee5951 (diff) |
sysfs: make attr namespace interface less convoluted
sysfs ns (namespace) implementation became more convoluted than
necessary while trying to hide ns information from visible interface.
The relatively recent attr ns support is a good example.
* attr ns tag is determined by sysfs_ops->namespace() callback while
dir tag is determined by kobj_type->namespace(). The placement is
arbitrary.
* Instead of performing operations with explicit ns tag, the namespace
callback is routed through sysfs_attr_ns(), sysfs_ops->namespace(),
class_attr_namespace(), class_attr->namespace(). It's not simpler
in any sense. The only thing this convolution does is traversing
the whole stack backwards.
The namespace callbacks are unncessary because the operations involved
are inherently synchronous. The information can be provided in in
straight-forward top-down direction and reversing that direction is
unnecessary and against basic design principles.
This backward interface is unnecessarily convoluted and hinders
properly separating out sysfs from driver model / kobject for proper
layering. This patch updates attr ns support such that
* sysfs_ops->namespace() and class_attr->namespace() are dropped.
* sysfs_{create|remove}_file_ns(), which take explicit @ns param, are
added and sysfs_{create|remove}_file() are now simple wrappers
around the ns aware functions.
* ns handling is dropped from sysfs_chmod_file(). Nobody uses it at
this point. sysfs_chmod_file_ns() can be added later if necessary.
* Explicit @ns is propagated through class_{create|remove}_file_ns()
and netdev_class_{create|remove}_file_ns().
* driver/net/bonding which is currently the only user of attr
namespace is updated to use netdev_class_{create|remove}_file_ns()
with @bh->net as the ns tag instead of using the namespace callback.
This patch should be an equivalent conversion without any functional
difference. It makes the code easier to follow, reduces lines of code
a bit and helps proper separation and layering.
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Eric W. Biederman <ebiederm@xmission.com>
Cc: Kay Sievers <kay@vrfy.org>
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'include/linux/netdevice.h')
-rw-r--r-- | include/linux/netdevice.h | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 3de49aca4519..42421ed49a47 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -2873,8 +2873,20 @@ extern int __init dev_proc_init(void); | |||
2873 | #define dev_proc_init() 0 | 2873 | #define dev_proc_init() 0 |
2874 | #endif | 2874 | #endif |
2875 | 2875 | ||
2876 | extern int netdev_class_create_file(struct class_attribute *class_attr); | 2876 | extern int netdev_class_create_file_ns(struct class_attribute *class_attr, |
2877 | extern void netdev_class_remove_file(struct class_attribute *class_attr); | 2877 | const void *ns); |
2878 | extern void netdev_class_remove_file_ns(struct class_attribute *class_attr, | ||
2879 | const void *ns); | ||
2880 | |||
2881 | static inline int netdev_class_create_file(struct class_attribute *class_attr) | ||
2882 | { | ||
2883 | return netdev_class_create_file_ns(class_attr, NULL); | ||
2884 | } | ||
2885 | |||
2886 | static inline void netdev_class_remove_file(struct class_attribute *class_attr) | ||
2887 | { | ||
2888 | netdev_class_remove_file_ns(class_attr, NULL); | ||
2889 | } | ||
2878 | 2890 | ||
2879 | extern struct kobj_ns_type_operations net_ns_type_operations; | 2891 | extern struct kobj_ns_type_operations net_ns_type_operations; |
2880 | 2892 | ||