diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2007-11-02 15:32:47 -0700 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-11-02 15:32:47 -0700 |
| commit | 01bd5ebddeb41500adcab5d8701bdf9d64d7ef92 (patch) | |
| tree | a636e07a7096d6299f4d308b529310cf49835cb7 /pending | |
| parent | fe94b2cd20d48a790977b4de0d076cee823e7996 (diff) | |
| download | patches-01bd5ebddeb41500adcab5d8701bdf9d64d7ef92.tar.gz | |
finally kill the sysfs_attributes!!!
Diffstat (limited to 'pending')
| -rw-r--r-- | pending/kset-kill-subsys-attr.patch | 168 | ||||
| -rw-r--r-- | pending/sysfs-crash-debugging.patch | 123 |
2 files changed, 0 insertions, 291 deletions
diff --git a/pending/kset-kill-subsys-attr.patch b/pending/kset-kill-subsys-attr.patch deleted file mode 100644 index 22f564a7083600..00000000000000 --- a/pending/kset-kill-subsys-attr.patch +++ /dev/null @@ -1,168 +0,0 @@ -From kay.sievers@vrfy.org Fri Nov 2 08:38:35 2007 -From: Kay Sievers <kay.sievers@vrfy.org> -Subject: Driver Core: kill subsys_attribute and default sysfs ops -Date: Fri, 02 Nov 2007 13:47:53 +0100 -Message-Id: <1194007673.2194.12.camel@lov.site> -Mime-Version: 1.0 -Content-Transfer-Encoding: 7bit -Status: RO -Content-Length: 4503 - -Remove the no longer needed subsys_attributes, they are all converted to -the more sensical kobj_attributes. - -There is no longer a magic fallback in sysfs attribute operations, all -kobjects which create simple attributes need explicitely a ktype assigned, -which thells the core what was intended here. - -!!! DO NOT APPLY !!!! - Until this is converted: - drivers/parisc/pdc_stable.c -!!! DO NOT APPLY !!!! - -Signed-off-by: Kay Sievers <kay.sievers@vrfy.org> ---- - fs/sysfs/file.c | 63 +++++++----------------------------------------- - include/linux/kobject.h | 9 ------ - lib/kobject.c | 21 ---------------- - 3 files changed, 10 insertions(+), 83 deletions(-) - ---- a/fs/sysfs/file.c -+++ b/fs/sysfs/file.c -@@ -20,43 +20,6 @@ - - #include "sysfs.h" - --#define to_sattr(a) container_of(a,struct subsys_attribute, attr) -- --/* -- * Subsystem file operations. -- * These operations allow subsystems to have files that can be -- * read/written. -- */ --static ssize_t --subsys_attr_show(struct kobject * kobj, struct attribute * attr, char * page) --{ -- struct kset *kset = to_kset(kobj); -- struct subsys_attribute * sattr = to_sattr(attr); -- ssize_t ret = -EIO; -- -- if (sattr->show) -- ret = sattr->show(kset, page); -- return ret; --} -- --static ssize_t --subsys_attr_store(struct kobject * kobj, struct attribute * attr, -- const char * page, size_t count) --{ -- struct kset *kset = to_kset(kobj); -- struct subsys_attribute * sattr = to_sattr(attr); -- ssize_t ret = -EIO; -- -- if (sattr->store) -- ret = sattr->store(kset, page, count); -- return ret; --} -- --static struct sysfs_ops subsys_sysfs_ops = { -- .show = subsys_attr_show, -- .store = subsys_attr_store, --}; -- - /* - * There's one sysfs_buffer for each open file and one - * sysfs_open_dirent for each sysfs_dirent with one or more open -@@ -350,29 +313,23 @@ static int sysfs_open_file(struct inode - { - struct sysfs_dirent *attr_sd = file->f_path.dentry->d_fsdata; - struct kobject *kobj = attr_sd->s_parent->s_dir.kobj; -- struct sysfs_buffer * buffer; -- struct sysfs_ops * ops = NULL; -- int error; -+ struct sysfs_buffer *buffer; -+ struct sysfs_ops *ops; -+ int error = -EACCES; - - /* need attr_sd for attr and ops, its parent for kobj */ - if (!sysfs_get_active_two(attr_sd)) - return -ENODEV; - -- /* if the kobject has no ktype, then we assume that it is a subsystem -- * itself, and use ops for it. -- */ -- if (kobj->ktype) -+ /* every kobject with an attribute needs a ktype assigned */ -+ if (kobj->ktype && kobj->ktype->sysfs_ops) - ops = kobj->ktype->sysfs_ops; -- else -- ops = &subsys_sysfs_ops; -- -- error = -EACCES; -- -- /* No sysfs operations, either from having no subsystem, -- * or the subsystem have no operations. -- */ -- if (!ops) -+ else { -+ printk(KERN_ERR "missing sysfs attribute operations for " -+ "kobject: %s\n", kobject_name(kobj)); -+ WARN_ON(1); - goto err_out; -+ } - - /* File needs write support. - * The inode's perms must say it's ok, ---- a/include/linux/kobject.h -+++ b/include/linux/kobject.h -@@ -208,15 +208,6 @@ extern struct kset *power_kset; - extern int __must_check subsystem_register(struct kset *); - extern void subsystem_unregister(struct kset *); - --struct subsys_attribute { -- struct attribute attr; -- ssize_t (*show)(struct kset *, char *); -- ssize_t (*store)(struct kset *, const char *, size_t); --}; -- --extern int __must_check subsys_create_file(struct kset *, -- struct subsys_attribute *); -- - #if defined(CONFIG_HOTPLUG) - int kobject_uevent(struct kobject *kobj, enum kobject_action action); - int kobject_uevent_env(struct kobject *kobj, enum kobject_action action, ---- a/lib/kobject.c -+++ b/lib/kobject.c -@@ -669,26 +669,6 @@ void subsystem_unregister(struct kset *s - kset_unregister(s); - } - --/** -- * subsystem_create_file - export sysfs attribute file. -- * @s: subsystem. -- * @a: subsystem attribute descriptor. -- */ -- --int subsys_create_file(struct kset *s, struct subsys_attribute *a) --{ -- int error = 0; -- -- if (!s || !a) -- return -EINVAL; -- -- if (kset_get(s)) { -- error = sysfs_create_file(&s->kobj, &a->attr); -- kset_put(s); -- } -- return error; --} -- - static void kset_release(struct kobject *kobj) - { - struct kset *kset = container_of(kobj, struct kset, kobj); -@@ -793,4 +773,3 @@ EXPORT_SYMBOL(kset_unregister); - - EXPORT_SYMBOL(subsystem_register); - EXPORT_SYMBOL(subsystem_unregister); --EXPORT_SYMBOL(subsys_create_file); - diff --git a/pending/sysfs-crash-debugging.patch b/pending/sysfs-crash-debugging.patch deleted file mode 100644 index 1562a82ffea600..00000000000000 --- a/pending/sysfs-crash-debugging.patch +++ /dev/null @@ -1,123 +0,0 @@ -From akpm@linux-foundation.org Fri Aug 24 16:12:31 2007 -From: Andrew Morton <akpm@linux-foundation.org> -Date: Fri, 24 Aug 2007 16:11:54 -0700 -Subject: sysfs: crash debugging -To: mm-commits@vger.kernel.org -Cc: akpm@linux-foundation.org, greg@kroah.com, kay.sievers@vrfy.org, mathieu.desnoyers@polymtl.ca -Message-ID: <200708242311.l7ONBsvq019579@imap1.linux-foundation.org> - - -Print the name of the last-accessed sysfs file when we oops, to help track -down oopses which occur in sysfs store/read handlers. Because these oopses -tend to not leave any trace of the offending code in the stack traces. - -Cc: Kay Sievers <kay.sievers@vrfy.org> -Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> -Signed-off-by: Andrew Morton <akpm@linux-foundation.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - arch/x86/kernel/traps_32.c | 1 + - arch/x86/kernel/traps_64.c | 1 + - fs/sysfs/file.c | 14 ++++++++++++++ - fs/sysfs/mount.c | 2 +- - fs/sysfs/sysfs.h | 1 + - include/linux/sysfs.h | 5 +++++ - 6 files changed, 23 insertions(+), 1 deletion(-) - ---- a/arch/x86/kernel/traps_32.c -+++ b/arch/x86/kernel/traps_32.c -@@ -396,6 +396,7 @@ void die(const char * str, struct pt_reg - #endif - printk("\n"); - -+ sysfs_printk_last_file(); - if (notify_die(DIE_OOPS, str, regs, err, - current->thread.trap_no, SIGSEGV) != - NOTIFY_STOP) { ---- a/arch/x86/kernel/traps_64.c -+++ b/arch/x86/kernel/traps_64.c -@@ -517,6 +517,7 @@ void __kprobes __die(const char * str, s - printk("DEBUG_PAGEALLOC"); - #endif - printk("\n"); -+ sysfs_printk_last_file(); - notify_die(DIE_OOPS, str, regs, err, current->thread.trap_no, SIGSEGV); - show_registers(regs); - add_taint(TAINT_DIE); ---- a/fs/sysfs/file.c -+++ b/fs/sysfs/file.c -@@ -16,10 +16,18 @@ - #include <linux/poll.h> - #include <linux/list.h> - #include <linux/mutex.h> -+#include <linux/limits.h> - #include <asm/uaccess.h> - - #include "sysfs.h" - -+/* used in crash dumps to help with debugging */ -+static char last_sysfs_file[PATH_MAX]; -+void sysfs_printk_last_file(void) -+{ -+ printk(KERN_EMERG "last sysfs file: %s\n", last_sysfs_file); -+} -+ - /* - * There's one sysfs_buffer for each open file and one - * sysfs_open_dirent for each sysfs_dirent with one or more open -@@ -316,6 +324,12 @@ static int sysfs_open_file(struct inode - struct sysfs_buffer *buffer; - struct sysfs_ops *ops; - int error = -EACCES; -+ char *p; -+ -+ p = d_path(file->f_dentry, sysfs_mount, last_sysfs_file, -+ sizeof(last_sysfs_file)); -+ if (p) -+ memmove(last_sysfs_file, p, strlen(p) + 1); - - /* need attr_sd for attr and ops, its parent for kobj */ - if (!sysfs_get_active_two(attr_sd)) ---- a/fs/sysfs/mount.c -+++ b/fs/sysfs/mount.c -@@ -22,7 +22,7 @@ - /* Random magic number */ - #define SYSFS_MAGIC 0x62656572 - --static struct vfsmount *sysfs_mount; -+struct vfsmount *sysfs_mount; - struct super_block * sysfs_sb = NULL; - struct kmem_cache *sysfs_dir_cachep; - ---- a/fs/sysfs/sysfs.h -+++ b/fs/sysfs/sysfs.h -@@ -91,6 +91,7 @@ struct sysfs_addrm_cxt { - extern struct sysfs_dirent sysfs_root; - extern struct super_block *sysfs_sb; - extern struct kmem_cache *sysfs_dir_cachep; -+extern struct vfsmount *sysfs_mount; - - /* - * dir.c ---- a/include/linux/sysfs.h -+++ b/include/linux/sysfs.h -@@ -111,6 +111,7 @@ void sysfs_remove_file_from_group(struct - const struct attribute *attr, const char *group); - - void sysfs_notify(struct kobject *kobj, char *dir, char *attr); -+void sysfs_printk_last_file(void); - - extern int __must_check sysfs_init(void); - -@@ -216,6 +217,10 @@ static inline int __must_check sysfs_ini - return 0; - } - -+static inline void sysfs_printk_last_file(void) -+{ -+} -+ - #endif /* CONFIG_SYSFS */ - - #endif /* _SYSFS_H_ */ |
