diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-06-24 08:41:41 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-06-24 13:07:53 -0400 |
commit | 816724e65c72a90a44fbad0ef0b59b186c85fa90 (patch) | |
tree | 421fa29aedff988e392f92780637553e275d37a0 /drivers/base/sys.c | |
parent | 70ac4385a13f78bc478f26d317511893741b05bd (diff) | |
parent | d384ea691fe4ea8c2dd5b9b8d9042eb181776f18 (diff) |
Merge branch 'master' of /home/trondmy/kernel/linux-2.6/
Conflicts:
fs/nfs/inode.c
fs/super.c
Fix conflicts between patch 'NFS: Split fs/nfs/inode.c' and patch
'VFS: Permit filesystem to override root dentry on mount'
Diffstat (limited to 'drivers/base/sys.c')
-rw-r--r-- | drivers/base/sys.c | 51 |
1 files changed, 50 insertions, 1 deletions
diff --git a/drivers/base/sys.c b/drivers/base/sys.c index 6fc23ab127bd..6858178b3aff 100644 --- a/drivers/base/sys.c +++ b/drivers/base/sys.c | |||
@@ -80,10 +80,59 @@ void sysdev_remove_file(struct sys_device * s, struct sysdev_attribute * a) | |||
80 | EXPORT_SYMBOL_GPL(sysdev_create_file); | 80 | EXPORT_SYMBOL_GPL(sysdev_create_file); |
81 | EXPORT_SYMBOL_GPL(sysdev_remove_file); | 81 | EXPORT_SYMBOL_GPL(sysdev_remove_file); |
82 | 82 | ||
83 | #define to_sysdev_class(k) container_of(k, struct sysdev_class, kset.kobj) | ||
84 | #define to_sysdev_class_attr(a) container_of(a, \ | ||
85 | struct sysdev_class_attribute, attr) | ||
86 | |||
87 | static ssize_t sysdev_class_show(struct kobject *kobj, struct attribute *attr, | ||
88 | char *buffer) | ||
89 | { | ||
90 | struct sysdev_class * class = to_sysdev_class(kobj); | ||
91 | struct sysdev_class_attribute *class_attr = to_sysdev_class_attr(attr); | ||
92 | |||
93 | if (class_attr->show) | ||
94 | return class_attr->show(class, buffer); | ||
95 | return -EIO; | ||
96 | } | ||
97 | |||
98 | static ssize_t sysdev_class_store(struct kobject *kobj, struct attribute *attr, | ||
99 | const char *buffer, size_t count) | ||
100 | { | ||
101 | struct sysdev_class * class = to_sysdev_class(kobj); | ||
102 | struct sysdev_class_attribute * class_attr = to_sysdev_class_attr(attr); | ||
103 | |||
104 | if (class_attr->store) | ||
105 | return class_attr->store(class, buffer, count); | ||
106 | return -EIO; | ||
107 | } | ||
108 | |||
109 | static struct sysfs_ops sysfs_class_ops = { | ||
110 | .show = sysdev_class_show, | ||
111 | .store = sysdev_class_store, | ||
112 | }; | ||
113 | |||
114 | static struct kobj_type ktype_sysdev_class = { | ||
115 | .sysfs_ops = &sysfs_class_ops, | ||
116 | }; | ||
117 | |||
118 | int sysdev_class_create_file(struct sysdev_class *c, | ||
119 | struct sysdev_class_attribute *a) | ||
120 | { | ||
121 | return sysfs_create_file(&c->kset.kobj, &a->attr); | ||
122 | } | ||
123 | EXPORT_SYMBOL_GPL(sysdev_class_create_file); | ||
124 | |||
125 | void sysdev_class_remove_file(struct sysdev_class *c, | ||
126 | struct sysdev_class_attribute *a) | ||
127 | { | ||
128 | sysfs_remove_file(&c->kset.kobj, &a->attr); | ||
129 | } | ||
130 | EXPORT_SYMBOL_GPL(sysdev_class_remove_file); | ||
131 | |||
83 | /* | 132 | /* |
84 | * declare system_subsys | 133 | * declare system_subsys |
85 | */ | 134 | */ |
86 | static decl_subsys(system, &ktype_sysdev, NULL); | 135 | static decl_subsys(system, &ktype_sysdev_class, NULL); |
87 | 136 | ||
88 | int sysdev_class_register(struct sysdev_class * cls) | 137 | int sysdev_class_register(struct sysdev_class * cls) |
89 | { | 138 | { |