The patch titled sysfs_remove_bin_file: no return value, dump_stack on error has been added to the -mm tree. Its filename is sysfs_remove_bin_file-no-return-value-dump_stack-on.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this ------------------------------------------------------ Subject: sysfs_remove_bin_file: no return value, dump_stack on error From: "Randy.Dunlap" <rdunlap@xxxxxxxxxxxx> Make sysfs_remove_bin_file() void. If it detects an error, printk the file name and call dump_stack(). sysfs_hash_and_remove() now returns an error code indicating its success or failure so that sysfs_remove_bin_file() can know success/failure. Convert the only driver that checked the return value of sysfs_remove_bin_file(). Signed-off-by: Randy Dunlap <rdunlap@xxxxxxxxxxxx> Cc: Greg KH <greg@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- drivers/pci/hotplug/acpiphp_ibm.c | 4 +--- fs/sysfs/bin.c | 13 ++++++++----- fs/sysfs/inode.c | 11 ++++++++--- fs/sysfs/sysfs.h | 2 +- include/linux/sysfs.h | 2 +- 5 files changed, 19 insertions(+), 13 deletions(-) diff -puN drivers/pci/hotplug/acpiphp_ibm.c~sysfs_remove_bin_file-no-return-value-dump_stack-on drivers/pci/hotplug/acpiphp_ibm.c --- a/drivers/pci/hotplug/acpiphp_ibm.c~sysfs_remove_bin_file-no-return-value-dump_stack-on +++ a/drivers/pci/hotplug/acpiphp_ibm.c @@ -487,9 +487,7 @@ static void __exit ibm_acpiphp_exit(void if (ACPI_FAILURE(status)) err("%s: Notification handler removal failed\n", __FUNCTION__); /* remove the /sys entries */ - if (sysfs_remove_bin_file(sysdir, &ibm_apci_table_attr)) - err("%s: removal of sysfs file apci_table failed\n", - __FUNCTION__); + sysfs_remove_bin_file(sysdir, &ibm_apci_table_attr); } module_init(ibm_acpiphp_init); diff -puN fs/sysfs/bin.c~sysfs_remove_bin_file-no-return-value-dump_stack-on fs/sysfs/bin.c --- a/fs/sysfs/bin.c~sysfs_remove_bin_file-no-return-value-dump_stack-on +++ a/fs/sysfs/bin.c @@ -10,6 +10,7 @@ #include <linux/errno.h> #include <linux/fs.h> +#include <linux/kernel.h> #include <linux/kobject.h> #include <linux/module.h> #include <linux/slab.h> @@ -176,7 +177,6 @@ const struct file_operations bin_fops = * sysfs_create_bin_file - create binary file for object. * @kobj: object. * @attr: attribute descriptor. - * */ int sysfs_create_bin_file(struct kobject * kobj, struct bin_attribute * attr) @@ -191,13 +191,16 @@ int sysfs_create_bin_file(struct kobject * sysfs_remove_bin_file - remove binary file for object. * @kobj: object. * @attr: attribute descriptor. - * */ -int sysfs_remove_bin_file(struct kobject * kobj, struct bin_attribute * attr) +void sysfs_remove_bin_file(struct kobject * kobj, struct bin_attribute * attr) { - sysfs_hash_and_remove(kobj->dentry,attr->attr.name); - return 0; + if (sysfs_hash_and_remove(kobj->dentry, attr->attr.name) < 0) { + printk(KERN_ERR "%s: " + "bad dentry or inode or no such file: \"%s\"\n", + __FUNCTION__, attr->attr.name); + dump_stack(); + } } EXPORT_SYMBOL_GPL(sysfs_create_bin_file); diff -puN fs/sysfs/inode.c~sysfs_remove_bin_file-no-return-value-dump_stack-on fs/sysfs/inode.c --- a/fs/sysfs/inode.c~sysfs_remove_bin_file-no-return-value-dump_stack-on +++ a/fs/sysfs/inode.c @@ -12,6 +12,7 @@ #include <linux/namei.h> #include <linux/backing-dev.h> #include <linux/capability.h> +#include <linux/errno.h> #include "sysfs.h" extern struct super_block * sysfs_sb; @@ -222,17 +223,18 @@ void sysfs_drop_dentry(struct sysfs_dire } } -void sysfs_hash_and_remove(struct dentry * dir, const char * name) +int sysfs_hash_and_remove(struct dentry * dir, const char * name) { struct sysfs_dirent * sd; struct sysfs_dirent * parent_sd; + int found = 0; if (!dir) - return; + return -ENOENT; if (dir->d_inode == NULL) /* no inode means this hasn't been made visible yet */ - return; + return -ENOENT; parent_sd = dir->d_fsdata; mutex_lock(&dir->d_inode->i_mutex); @@ -243,8 +245,11 @@ void sysfs_hash_and_remove(struct dentry list_del_init(&sd->s_sibling); sysfs_drop_dentry(sd, dir); sysfs_put(sd); + found = 1; break; } } mutex_unlock(&dir->d_inode->i_mutex); + + return found ? 0 : -ENOENT; } diff -puN fs/sysfs/sysfs.h~sysfs_remove_bin_file-no-return-value-dump_stack-on fs/sysfs/sysfs.h --- a/fs/sysfs/sysfs.h~sysfs_remove_bin_file-no-return-value-dump_stack-on +++ a/fs/sysfs/sysfs.h @@ -10,7 +10,7 @@ extern int sysfs_make_dirent(struct sysf umode_t, int); extern int sysfs_add_file(struct dentry *, const struct attribute *, int); -extern void sysfs_hash_and_remove(struct dentry * dir, const char * name); +extern int sysfs_hash_and_remove(struct dentry * dir, const char * name); extern struct sysfs_dirent *sysfs_find(struct sysfs_dirent *dir, const char * name); extern int sysfs_create_subdir(struct kobject *, const char *, struct dentry **); diff -puN include/linux/sysfs.h~sysfs_remove_bin_file-no-return-value-dump_stack-on include/linux/sysfs.h --- a/include/linux/sysfs.h~sysfs_remove_bin_file-no-return-value-dump_stack-on +++ a/include/linux/sysfs.h @@ -116,7 +116,7 @@ sysfs_remove_link(struct kobject *, cons int __must_check sysfs_create_bin_file(struct kobject * kobj, struct bin_attribute * attr); -int __must_check sysfs_remove_bin_file(struct kobject * kobj, +void sysfs_remove_bin_file(struct kobject * kobj, struct bin_attribute * attr); int __must_check sysfs_create_group(struct kobject *, _ Patches currently in -mm which might be from rdunlap@xxxxxxxxxxxx are acpi-bus-add-missing-newline.patch fix-undefined-missing-references-in-isa-miro-sound-driver.patch sysfs_remove_bin_file-no-return-value-dump_stack-on.patch pcie-check-and-return-bus_register-errors.patch pcie-check-and-return-bus_register-errors-fix.patch pcie-cleanup-on-probe-error.patch aic7-cleanup-module_parm_desc-strings.patch dc395x-fix-printk-format-warning.patch areca-raid-linux-scsi-driver.patch consistently-use-max_errno-in-__syscall_return.patch consistently-use-max_errno-in-__syscall_return-fix.patch eisa-bus-modalias-attributes-support-1.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html