diff options
| author | Randy Dunlap <rdunlap@xenotime.net> | 2006-10-03 04:14:23 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-03 11:04:08 -0400 |
| commit | 349ae23fe7379a42973bcb1c85f7d43ec583c17d (patch) | |
| tree | 2f885e437a59a23f04161e9761b86a8421ab6ff7 | |
| parent | 5ac24697699b394cdebac0a2329ce3af247d6a3b (diff) | |
[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>
| -rw-r--r-- | drivers/ide/ide-probe.c | 25 | ||||
| -rw-r--r-- | drivers/ide/ide-proc.c | 22 | ||||
| -rw-r--r-- | drivers/ide/ide.c | 8 |
3 files changed, 46 insertions, 9 deletions
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c index 9cadf0106c..dad9c47ebb 100644 --- a/drivers/ide/ide-probe.c +++ b/drivers/ide/ide-probe.c | |||
| @@ -623,6 +623,8 @@ static void hwif_release_dev (struct device *dev) | |||
| 623 | 623 | ||
| 624 | static void hwif_register (ide_hwif_t *hwif) | 624 | static void hwif_register (ide_hwif_t *hwif) |
| 625 | { | 625 | { |
| 626 | int ret; | ||
| 627 | |||
| 626 | /* register with global device tree */ | 628 | /* register with global device tree */ |
| 627 | strlcpy(hwif->gendev.bus_id,hwif->name,BUS_ID_SIZE); | 629 | strlcpy(hwif->gendev.bus_id,hwif->name,BUS_ID_SIZE); |
| 628 | hwif->gendev.driver_data = hwif; | 630 | hwif->gendev.driver_data = hwif; |
| @@ -634,7 +636,10 @@ static void hwif_register (ide_hwif_t *hwif) | |||
| 634 | hwif->gendev.parent = NULL; | 636 | hwif->gendev.parent = NULL; |
| 635 | } | 637 | } |
| 636 | hwif->gendev.release = hwif_release_dev; | 638 | hwif->gendev.release = hwif_release_dev; |
| 637 | device_register(&hwif->gendev); | 639 | ret = device_register(&hwif->gendev); |
| 640 | if (ret < 0) | ||
| 641 | printk(KERN_WARNING "IDE: %s: device_register error: %d\n", | ||
| 642 | __FUNCTION__, ret); | ||
| 638 | } | 643 | } |
| 639 | 644 | ||
| 640 | static int wait_hwif_ready(ide_hwif_t *hwif) | 645 | 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 | 889 | ||
| 885 | if (hwif->present) { | 890 | if (hwif->present) { |
| 886 | u16 unit = 0; | 891 | u16 unit = 0; |
| 892 | int ret; | ||
| 893 | |||
| 887 | for (unit = 0; unit < MAX_DRIVES; ++unit) { | 894 | for (unit = 0; unit < MAX_DRIVES; ++unit) { |
| 888 | ide_drive_t *drive = &hwif->drives[unit]; | 895 | ide_drive_t *drive = &hwif->drives[unit]; |
| 889 | /* For now don't attach absent drives, we may | 896 | /* For now don't attach absent drives, we may |
| 890 | want them on default or a new "empty" class | 897 | want them on default or a new "empty" class |
| 891 | for hotplug reprobing ? */ | 898 | for hotplug reprobing ? */ |
| 892 | if (drive->present) { | 899 | if (drive->present) { |
| 893 | device_register(&drive->gendev); | 900 | ret = device_register(&drive->gendev); |
| 901 | if (ret < 0) | ||
| 902 | printk(KERN_WARNING "IDE: %s: " | ||
| 903 | "device_register error: %d\n", | ||
| 904 | __FUNCTION__, ret); | ||
| 894 | } | 905 | } |
| 895 | } | 906 | } |
| 896 | } | 907 | } |
| @@ -1409,8 +1420,14 @@ int ideprobe_init (void) | |||
| 1409 | if (hwif->chipset == ide_unknown || hwif->chipset == ide_forced) | 1420 | if (hwif->chipset == ide_unknown || hwif->chipset == ide_forced) |
| 1410 | hwif->chipset = ide_generic; | 1421 | hwif->chipset = ide_generic; |
| 1411 | for (unit = 0; unit < MAX_DRIVES; ++unit) | 1422 | for (unit = 0; unit < MAX_DRIVES; ++unit) |
| 1412 | if (hwif->drives[unit].present) | 1423 | if (hwif->drives[unit].present) { |
| 1413 | device_register(&hwif->drives[unit].gendev); | 1424 | int ret = device_register( |
| 1425 | &hwif->drives[unit].gendev); | ||
| 1426 | if (ret < 0) | ||
| 1427 | printk(KERN_WARNING "IDE: %s: " | ||
| 1428 | "device_register error: %d\n", | ||
| 1429 | __FUNCTION__, ret); | ||
| 1430 | } | ||
| 1414 | } | 1431 | } |
| 1415 | } | 1432 | } |
| 1416 | return 0; | 1433 | return 0; |
diff --git a/drivers/ide/ide-proc.c b/drivers/ide/ide-proc.c index 41b74b13a0..aa049dab3d 100644 --- a/drivers/ide/ide-proc.c +++ b/drivers/ide/ide-proc.c | |||
| @@ -326,15 +326,24 @@ static int ide_replace_subdriver(ide_drive_t *drive, const char *driver) | |||
| 326 | { | 326 | { |
| 327 | struct device *dev = &drive->gendev; | 327 | struct device *dev = &drive->gendev; |
| 328 | int ret = 1; | 328 | int ret = 1; |
| 329 | int err; | ||
| 329 | 330 | ||
| 330 | down_write(&dev->bus->subsys.rwsem); | 331 | down_write(&dev->bus->subsys.rwsem); |
| 331 | device_release_driver(dev); | 332 | device_release_driver(dev); |
| 332 | /* FIXME: device can still be in use by previous driver */ | 333 | /* FIXME: device can still be in use by previous driver */ |
| 333 | strlcpy(drive->driver_req, driver, sizeof(drive->driver_req)); | 334 | strlcpy(drive->driver_req, driver, sizeof(drive->driver_req)); |
| 334 | device_attach(dev); | 335 | err = device_attach(dev); |
| 336 | if (err < 0) | ||
| 337 | printk(KERN_WARNING "IDE: %s: device_attach error: %d\n", | ||
| 338 | __FUNCTION__, err); | ||
| 335 | drive->driver_req[0] = 0; | 339 | drive->driver_req[0] = 0; |
| 336 | if (dev->driver == NULL) | 340 | if (dev->driver == NULL) { |
| 337 | device_attach(dev); | 341 | err = device_attach(dev); |
| 342 | if (err < 0) | ||
| 343 | printk(KERN_WARNING | ||
| 344 | "IDE: %s: device_attach(2) error: %d\n", | ||
| 345 | __FUNCTION__, err); | ||
| 346 | } | ||
| 338 | if (dev->driver && !strcmp(dev->driver->name, driver)) | 347 | if (dev->driver && !strcmp(dev->driver->name, driver)) |
| 339 | ret = 0; | 348 | ret = 0; |
| 340 | up_write(&dev->bus->subsys.rwsem); | 349 | up_write(&dev->bus->subsys.rwsem); |
| @@ -526,7 +535,12 @@ static int proc_print_driver(struct device_driver *drv, void *data) | |||
| 526 | 535 | ||
| 527 | static int ide_drivers_show(struct seq_file *s, void *p) | 536 | static int ide_drivers_show(struct seq_file *s, void *p) |
| 528 | { | 537 | { |
| 529 | bus_for_each_drv(&ide_bus_type, NULL, s, proc_print_driver); | 538 | int err; |
| 539 | |||
| 540 | err = bus_for_each_drv(&ide_bus_type, NULL, s, proc_print_driver); | ||
| 541 | if (err < 0) | ||
| 542 | printk(KERN_WARNING "IDE: %s: bus_for_each_drv error: %d\n", | ||
| 543 | __FUNCTION__, err); | ||
| 530 | return 0; | 544 | return 0; |
| 531 | } | 545 | } |
| 532 | 546 | ||
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c index 8c3f062422..97b162ca98 100644 --- a/drivers/ide/ide.c +++ b/drivers/ide/ide.c | |||
| @@ -1997,10 +1997,16 @@ EXPORT_SYMBOL_GPL(ide_bus_type); | |||
| 1997 | */ | 1997 | */ |
| 1998 | static int __init ide_init(void) | 1998 | static int __init ide_init(void) |
| 1999 | { | 1999 | { |
| 2000 | int ret; | ||
| 2001 | |||
| 2000 | printk(KERN_INFO "Uniform Multi-Platform E-IDE driver " REVISION "\n"); | 2002 | printk(KERN_INFO "Uniform Multi-Platform E-IDE driver " REVISION "\n"); |
| 2001 | system_bus_speed = ide_system_bus_speed(); | 2003 | system_bus_speed = ide_system_bus_speed(); |
| 2002 | 2004 | ||
| 2003 | bus_register(&ide_bus_type); | 2005 | ret = bus_register(&ide_bus_type); |
| 2006 | if (ret < 0) { | ||
| 2007 | printk(KERN_WARNING "IDE: bus_register error: %d\n", ret); | ||
| 2008 | return ret; | ||
| 2009 | } | ||
| 2004 | 2010 | ||
| 2005 | init_ide_data(); | 2011 | init_ide_data(); |
| 2006 | 2012 | ||
