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 | { |
