summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorPatrick Mochel <mochel@osdl.org>2002-10-29 02:26:01 -0800
committerPatrick Mochel <mochel@osdl.org>2002-10-29 02:26:01 -0800
commiteda520259938bd3299486f12ab5058c29dcd5326 (patch)
tree781df420f8c878a106b3dcb4e305f1a938454d7e /include
parentc637d6b116ae3cc7e143b99ea47f29d106c97d09 (diff)
sysfs: marry api with struct kobject.
This works on obviating the need for a separate data type to describe a sysfs directory (which was renamed from struct driver_dir_entry to struct sysfs_dir). All sysfs creation and removal functions now take a struct kobject, instead of a struct sysfs_dir. This kobject is embedded in ->d_fsdata of the directory. sysfs_create_dir() takes only 1 parameter now: the object that we're creating the directory for. The parent dentry is derived by looking at the object's parent. sysfs_create_file() takes the object as the first parameter, and the attribute as the second, which makes more sense from an API perspective. sysfs_remove_file() now takes an attribute as a second parameter, to be consistent with the creation function. sysfs_remove_link() is created, which is basically the old sysfs_remove_file(). (symlinks don't have an attribute associated with them; only a name, which was prohibiting the previous change). open() and close() look for a kobject now, and do refcounting directly on the object. Because of that, we don't need the ->open() and ->close() callbacks in struct sysfs_ops, so they've been removed. read() and write() also now look for a kobject now. The comments have been updated, too.
Diffstat (limited to 'include')
-rw-r--r--include/linux/kobject.h1
-rw-r--r--include/linux/sysfs.h26
2 files changed, 13 insertions, 14 deletions
diff --git a/include/linux/kobject.h b/include/linux/kobject.h
index c78325e8a199..12431a980712 100644
--- a/include/linux/kobject.h
+++ b/include/linux/kobject.h
@@ -16,6 +16,7 @@ struct kobject {
atomic_t refcount;
struct list_head entry;
struct kobject * parent;
+ struct sysfs_dir dir;
};
extern void kobject_init(struct kobject *);
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h
index 6479902e1d20..fe82dff179ce 100644
--- a/include/linux/sysfs.h
+++ b/include/linux/sysfs.h
@@ -11,18 +11,15 @@
struct driver_dir_entry;
struct attribute;
+struct kobject;
struct sysfs_ops {
- int (*open)(struct driver_dir_entry *);
- int (*close)(struct driver_dir_entry *);
- ssize_t (*show)(struct driver_dir_entry *, struct attribute *,char *, size_t, loff_t);
- ssize_t (*store)(struct driver_dir_entry *,struct attribute *,const char *, size_t, loff_t);
+ ssize_t (*show)(struct kobject *, struct attribute *,char *, size_t, loff_t);
+ ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t, loff_t);
};
-struct driver_dir_entry {
- char * name;
+struct sysfs_dir {
struct dentry * dentry;
- mode_t mode;
struct sysfs_ops * ops;
};
@@ -32,20 +29,21 @@ struct attribute {
};
extern int
-sysfs_create_dir(struct driver_dir_entry *, struct driver_dir_entry *);
+sysfs_create_dir(struct kobject *);
extern void
-sysfs_remove_dir(struct driver_dir_entry * entry);
+sysfs_remove_dir(struct kobject *);
extern int
-sysfs_create_file(struct attribute * attr,
- struct driver_dir_entry * parent);
+sysfs_create_file(struct kobject *, struct attribute *);
+
+extern void
+sysfs_remove_file(struct kobject *, struct attribute *);
extern int
-sysfs_create_symlink(struct driver_dir_entry * parent,
- char * name, char * target);
+sysfs_create_link(struct kobject * kobj, char * name, char * target);
extern void
-sysfs_remove_file(struct driver_dir_entry *, const char * name);
+sysfs_remove_link(struct kobject *, char * name);
#endif /* _SYSFS_H_ */