Commit 349ae23f authored by Randy Dunlap's avatar Randy Dunlap Committed by Linus Torvalds

[PATCH] IDE core: driver layer error checking

Check driver layer return values in IDE core.
Signed-off-by: default avatarRandy Dunlap <rdunlap@xenotime.net>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 5ac24697
...@@ -623,6 +623,8 @@ static void hwif_release_dev (struct device *dev) ...@@ -623,6 +623,8 @@ static void hwif_release_dev (struct device *dev)
static void hwif_register (ide_hwif_t *hwif) static void hwif_register (ide_hwif_t *hwif)
{ {
int ret;
/* register with global device tree */ /* register with global device tree */
strlcpy(hwif->gendev.bus_id,hwif->name,BUS_ID_SIZE); strlcpy(hwif->gendev.bus_id,hwif->name,BUS_ID_SIZE);
hwif->gendev.driver_data = hwif; hwif->gendev.driver_data = hwif;
...@@ -634,7 +636,10 @@ static void hwif_register (ide_hwif_t *hwif) ...@@ -634,7 +636,10 @@ static void hwif_register (ide_hwif_t *hwif)
hwif->gendev.parent = NULL; hwif->gendev.parent = NULL;
} }
hwif->gendev.release = hwif_release_dev; hwif->gendev.release = hwif_release_dev;
device_register(&hwif->gendev); ret = device_register(&hwif->gendev);
if (ret < 0)
printk(KERN_WARNING "IDE: %s: device_register error: %d\n",
__FUNCTION__, ret);
} }
static int wait_hwif_ready(ide_hwif_t *hwif) static int wait_hwif_ready(ide_hwif_t *hwif)
...@@ -884,13 +889,19 @@ int probe_hwif_init_with_fixup(ide_hwif_t *hwif, void (*fixup)(ide_hwif_t *hwif) ...@@ -884,13 +889,19 @@ int probe_hwif_init_with_fixup(ide_hwif_t *hwif, void (*fixup)(ide_hwif_t *hwif)
if (hwif->present) { if (hwif->present) {
u16 unit = 0; u16 unit = 0;
int ret;
for (unit = 0; unit < MAX_DRIVES; ++unit) { for (unit = 0; unit < MAX_DRIVES; ++unit) {
ide_drive_t *drive = &hwif->drives[unit]; ide_drive_t *drive = &hwif->drives[unit];
/* For now don't attach absent drives, we may /* For now don't attach absent drives, we may
want them on default or a new "empty" class want them on default or a new "empty" class
for hotplug reprobing ? */ for hotplug reprobing ? */
if (drive->present) { if (drive->present) {
device_register(&drive->gendev); ret = device_register(&drive->gendev);
if (ret < 0)
printk(KERN_WARNING "IDE: %s: "
"device_register error: %d\n",
__FUNCTION__, ret);
} }
} }
} }
...@@ -1409,8 +1420,14 @@ int ideprobe_init (void) ...@@ -1409,8 +1420,14 @@ int ideprobe_init (void)
if (hwif->chipset == ide_unknown || hwif->chipset == ide_forced) if (hwif->chipset == ide_unknown || hwif->chipset == ide_forced)
hwif->chipset = ide_generic; hwif->chipset = ide_generic;
for (unit = 0; unit < MAX_DRIVES; ++unit) for (unit = 0; unit < MAX_DRIVES; ++unit)
if (hwif->drives[unit].present) if (hwif->drives[unit].present) {
device_register(&hwif->drives[unit].gendev); int ret = device_register(
&hwif->drives[unit].gendev);
if (ret < 0)
printk(KERN_WARNING "IDE: %s: "
"device_register error: %d\n",
__FUNCTION__, ret);
}
} }
} }
return 0; return 0;
......
...@@ -326,15 +326,24 @@ static int ide_replace_subdriver(ide_drive_t *drive, const char *driver) ...@@ -326,15 +326,24 @@ static int ide_replace_subdriver(ide_drive_t *drive, const char *driver)
{ {
struct device *dev = &drive->gendev; struct device *dev = &drive->gendev;
int ret = 1; int ret = 1;
int err;
down_write(&dev->bus->subsys.rwsem); down_write(&dev->bus->subsys.rwsem);
device_release_driver(dev); device_release_driver(dev);
/* FIXME: device can still be in use by previous driver */ /* FIXME: device can still be in use by previous driver */
strlcpy(drive->driver_req, driver, sizeof(drive->driver_req)); strlcpy(drive->driver_req, driver, sizeof(drive->driver_req));
device_attach(dev); err = device_attach(dev);
if (err < 0)
printk(KERN_WARNING "IDE: %s: device_attach error: %d\n",
__FUNCTION__, err);
drive->driver_req[0] = 0; drive->driver_req[0] = 0;
if (dev->driver == NULL) if (dev->driver == NULL) {
device_attach(dev); err = device_attach(dev);
if (err < 0)
printk(KERN_WARNING
"IDE: %s: device_attach(2) error: %d\n",
__FUNCTION__, err);
}
if (dev->driver && !strcmp(dev->driver->name, driver)) if (dev->driver && !strcmp(dev->driver->name, driver))
ret = 0; ret = 0;
up_write(&dev->bus->subsys.rwsem); up_write(&dev->bus->subsys.rwsem);
...@@ -526,7 +535,12 @@ static int proc_print_driver(struct device_driver *drv, void *data) ...@@ -526,7 +535,12 @@ static int proc_print_driver(struct device_driver *drv, void *data)
static int ide_drivers_show(struct seq_file *s, void *p) static int ide_drivers_show(struct seq_file *s, void *p)
{ {
bus_for_each_drv(&ide_bus_type, NULL, s, proc_print_driver); int err;
err = bus_for_each_drv(&ide_bus_type, NULL, s, proc_print_driver);
if (err < 0)
printk(KERN_WARNING "IDE: %s: bus_for_each_drv error: %d\n",
__FUNCTION__, err);
return 0; return 0;
} }
......
...@@ -1997,10 +1997,16 @@ EXPORT_SYMBOL_GPL(ide_bus_type); ...@@ -1997,10 +1997,16 @@ EXPORT_SYMBOL_GPL(ide_bus_type);
*/ */
static int __init ide_init(void) static int __init ide_init(void)
{ {
int ret;
printk(KERN_INFO "Uniform Multi-Platform E-IDE driver " REVISION "\n"); printk(KERN_INFO "Uniform Multi-Platform E-IDE driver " REVISION "\n");
system_bus_speed = ide_system_bus_speed(); system_bus_speed = ide_system_bus_speed();
bus_register(&ide_bus_type); ret = bus_register(&ide_bus_type);
if (ret < 0) {
printk(KERN_WARNING "IDE: bus_register error: %d\n", ret);
return ret;
}
init_ide_data(); init_ide_data();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment