diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2007-03-15 15:50:34 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-03-15 18:29:26 -0400 |
commit | d9a9cdfb078d755e648d53ec25b7370f84ee5729 (patch) | |
tree | 308380483fd6241b1d0ef5916b9329c1c5df00f6 /include/linux | |
parent | 6ab27c6bf38d5ff71dafeca77b79e7c284804b75 (diff) |
[PATCH] sysfs and driver core: add callback helper, used by SCSI and S390
This patch (as868) adds a helper routine for device drivers that need
to set up a callback to perform some action in a different process's
context. This is intended for use by attribute methods that want to
unregister themselves or their parent device. Attribute method calls
are mutually exclusive with unregistration, so such actions cannot be
taken directly.
Two attribute methods are converted to use the new helper routine: one
for SCSI device deletion and one for System/390 ccwgroup devices.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Cc: Hugh Dickins <hugh@veritas.com>
Cc: Cornelia Huck <cornelia.huck@de.ibm.com>
Cc: Oliver Neukum <oneukum@suse.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/device.h | 2 | ||||
-rw-r--r-- | include/linux/sysfs.h | 9 |
2 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/device.h b/include/linux/device.h index 39a3199a826d..caad9bba9652 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -353,6 +353,8 @@ extern int __must_check device_create_bin_file(struct device *dev, | |||
353 | struct bin_attribute *attr); | 353 | struct bin_attribute *attr); |
354 | extern void device_remove_bin_file(struct device *dev, | 354 | extern void device_remove_bin_file(struct device *dev, |
355 | struct bin_attribute *attr); | 355 | struct bin_attribute *attr); |
356 | extern int device_schedule_callback(struct device *dev, | ||
357 | void (*func)(struct device *)); | ||
356 | 358 | ||
357 | /* device resource management */ | 359 | /* device resource management */ |
358 | typedef void (*dr_release_t)(struct device *dev, void *res); | 360 | typedef void (*dr_release_t)(struct device *dev, void *res); |
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index 523405e1e1f6..0544edda7168 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h | |||
@@ -78,6 +78,9 @@ struct sysfs_ops { | |||
78 | 78 | ||
79 | #ifdef CONFIG_SYSFS | 79 | #ifdef CONFIG_SYSFS |
80 | 80 | ||
81 | extern int sysfs_schedule_callback(struct kobject *kobj, | ||
82 | void (*func)(void *), void *data); | ||
83 | |||
81 | extern int __must_check | 84 | extern int __must_check |
82 | sysfs_create_dir(struct kobject *, struct dentry *); | 85 | sysfs_create_dir(struct kobject *, struct dentry *); |
83 | 86 | ||
@@ -132,6 +135,12 @@ extern int __must_check sysfs_init(void); | |||
132 | 135 | ||
133 | #else /* CONFIG_SYSFS */ | 136 | #else /* CONFIG_SYSFS */ |
134 | 137 | ||
138 | static inline int sysfs_schedule_callback(struct kobject *kobj, | ||
139 | void (*func)(void *), void *data) | ||
140 | { | ||
141 | return -ENOSYS; | ||
142 | } | ||
143 | |||
135 | static inline int sysfs_create_dir(struct kobject * k, struct dentry *shadow) | 144 | static inline int sysfs_create_dir(struct kobject * k, struct dentry *shadow) |
136 | { | 145 | { |
137 | return 0; | 146 | return 0; |