[PATCH] sysfs: (driver/pci) if show/store is missing return -EIO
sysfs: fix drivers/pci so if an attribute does not implement show or store method read/write will return -EIO instead of 0. Signed-off-by: Dmitry Torokhov <dtor@mail.ru> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
4a0c20bf8c
commit
fc7e482899
3 changed files with 17 additions and 15 deletions
|
@ -73,7 +73,7 @@ static ssize_t hotplug_slot_attr_show(struct kobject *kobj,
|
|||
{
|
||||
struct hotplug_slot *slot = to_hotplug_slot(kobj);
|
||||
struct hotplug_slot_attribute *attribute = to_hotplug_attr(attr);
|
||||
return attribute->show ? attribute->show(slot, buf) : 0;
|
||||
return attribute->show ? attribute->show(slot, buf) : -EIO;
|
||||
}
|
||||
|
||||
static ssize_t hotplug_slot_attr_store(struct kobject *kobj,
|
||||
|
@ -81,7 +81,7 @@ static ssize_t hotplug_slot_attr_store(struct kobject *kobj,
|
|||
{
|
||||
struct hotplug_slot *slot = to_hotplug_slot(kobj);
|
||||
struct hotplug_slot_attribute *attribute = to_hotplug_attr(attr);
|
||||
return attribute->store ? attribute->store(slot, buf, len) : 0;
|
||||
return attribute->store ? attribute->store(slot, buf, len) : -EIO;
|
||||
}
|
||||
|
||||
static struct sysfs_ops hotplug_slot_sysfs_ops = {
|
||||
|
|
|
@ -48,7 +48,7 @@ dlpar_attr_store(struct kobject * kobj, struct attribute * attr,
|
|||
struct dlpar_io_attr *dlpar_attr = container_of(attr,
|
||||
struct dlpar_io_attr, attr);
|
||||
return dlpar_attr->store ?
|
||||
dlpar_attr->store(dlpar_attr, buf, nbytes) : 0;
|
||||
dlpar_attr->store(dlpar_attr, buf, nbytes) : -EIO;
|
||||
}
|
||||
|
||||
static struct sysfs_ops dlpar_attr_sysfs_ops = {
|
||||
|
|
|
@ -335,13 +335,14 @@ pci_driver_attr_show(struct kobject * kobj, struct attribute *attr, char *buf)
|
|||
{
|
||||
struct device_driver *driver = kobj_to_pci_driver(kobj);
|
||||
struct driver_attribute *dattr = attr_to_driver_attribute(attr);
|
||||
ssize_t ret = 0;
|
||||
ssize_t ret;
|
||||
|
||||
if (get_driver(driver)) {
|
||||
if (dattr->show)
|
||||
ret = dattr->show(driver, buf);
|
||||
put_driver(driver);
|
||||
}
|
||||
if (!get_driver(driver))
|
||||
return -ENODEV;
|
||||
|
||||
ret = dattr->show ? dattr->show(driver, buf) : -EIO;
|
||||
|
||||
put_driver(driver);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -351,13 +352,14 @@ pci_driver_attr_store(struct kobject * kobj, struct attribute *attr,
|
|||
{
|
||||
struct device_driver *driver = kobj_to_pci_driver(kobj);
|
||||
struct driver_attribute *dattr = attr_to_driver_attribute(attr);
|
||||
ssize_t ret = 0;
|
||||
ssize_t ret;
|
||||
|
||||
if (get_driver(driver)) {
|
||||
if (dattr->store)
|
||||
ret = dattr->store(driver, buf, count);
|
||||
put_driver(driver);
|
||||
}
|
||||
if (!get_driver(driver))
|
||||
return -ENODEV;
|
||||
|
||||
ret = dattr->store ? dattr->store(driver, buf, count) : -EIO;
|
||||
|
||||
put_driver(driver);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue