[PATCH] IDE core: driver layer error checking
Check driver layer return values in IDE core. Signed-off-by: Randy Dunlap <rdunlap@xenotime.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
5ac2469769
commit
349ae23fe7
3 changed files with 46 additions and 9 deletions
|
@ -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)
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
{
|
{
|
||||||
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)
|
||||||
|
|
||||||
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);
|
||||||
*/
|
*/
|
||||||
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();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue