提交 de897881 编写于 作者: J Jeff Garzik

drivers/net/wireless/{airo,ipw2100}: fix error handling bugs

airo:
* fix oops, if !CONFIG_PROC_FS (create_proc_entry always returns NULL)

* handle pci_register_driver() failure.  if it fails, we really do
  want to exit, rather than (as a comment indicates) return success
  because-we-are-a-library.

* #if 0 have_isa_dev variable, which is assigned a value but never used

ipw2100:
* handle sysfs_create_group() failure

* handle driver_create_file() failure
Signed-off-by: NJeff Garzik <jeff@garzik.org>
上级 b7a00ecd
...@@ -5659,25 +5659,40 @@ static int airo_pci_resume(struct pci_dev *pdev) ...@@ -5659,25 +5659,40 @@ static int airo_pci_resume(struct pci_dev *pdev)
static int __init airo_init_module( void ) static int __init airo_init_module( void )
{ {
int i, have_isa_dev = 0; int i;
#if 0
int have_isa_dev = 0;
#endif
airo_entry = create_proc_entry("aironet", airo_entry = create_proc_entry("aironet",
S_IFDIR | airo_perm, S_IFDIR | airo_perm,
proc_root_driver); proc_root_driver);
airo_entry->uid = proc_uid;
airo_entry->gid = proc_gid; if (airo_entry) {
airo_entry->uid = proc_uid;
airo_entry->gid = proc_gid;
}
for( i = 0; i < 4 && io[i] && irq[i]; i++ ) { for( i = 0; i < 4 && io[i] && irq[i]; i++ ) {
airo_print_info("", "Trying to configure ISA adapter at irq=%d " airo_print_info("", "Trying to configure ISA adapter at irq=%d "
"io=0x%x", irq[i], io[i] ); "io=0x%x", irq[i], io[i] );
if (init_airo_card( irq[i], io[i], 0, NULL )) if (init_airo_card( irq[i], io[i], 0, NULL ))
#if 0
have_isa_dev = 1; have_isa_dev = 1;
#else
/* do nothing */ ;
#endif
} }
#ifdef CONFIG_PCI #ifdef CONFIG_PCI
airo_print_info("", "Probing for PCI adapters"); airo_print_info("", "Probing for PCI adapters");
pci_register_driver(&airo_driver); i = pci_register_driver(&airo_driver);
airo_print_info("", "Finished probing for PCI adapters"); airo_print_info("", "Finished probing for PCI adapters");
if (i) {
remove_proc_entry("aironet", proc_root_driver);
return i;
}
#endif #endif
/* Always exit with success, as we are a library module /* Always exit with success, as we are a library module
......
...@@ -6267,7 +6267,9 @@ static int ipw2100_pci_init_one(struct pci_dev *pci_dev, ...@@ -6267,7 +6267,9 @@ static int ipw2100_pci_init_one(struct pci_dev *pci_dev,
IPW_DEBUG_INFO("%s: Bound to %s\n", dev->name, pci_name(pci_dev)); IPW_DEBUG_INFO("%s: Bound to %s\n", dev->name, pci_name(pci_dev));
/* perform this after register_netdev so that dev->name is set */ /* perform this after register_netdev so that dev->name is set */
sysfs_create_group(&pci_dev->dev.kobj, &ipw2100_attribute_group); err = sysfs_create_group(&pci_dev->dev.kobj, &ipw2100_attribute_group);
if (err)
goto fail_unlock;
/* If the RF Kill switch is disabled, go ahead and complete the /* If the RF Kill switch is disabled, go ahead and complete the
* startup sequence */ * startup sequence */
...@@ -6533,13 +6535,16 @@ static int __init ipw2100_init(void) ...@@ -6533,13 +6535,16 @@ static int __init ipw2100_init(void)
printk(KERN_INFO DRV_NAME ": %s\n", DRV_COPYRIGHT); printk(KERN_INFO DRV_NAME ": %s\n", DRV_COPYRIGHT);
ret = pci_register_driver(&ipw2100_pci_driver); ret = pci_register_driver(&ipw2100_pci_driver);
if (ret)
goto out;
#ifdef CONFIG_IPW2100_DEBUG #ifdef CONFIG_IPW2100_DEBUG
ipw2100_debug_level = debug; ipw2100_debug_level = debug;
driver_create_file(&ipw2100_pci_driver.driver, ret = driver_create_file(&ipw2100_pci_driver.driver,
&driver_attr_debug_level); &driver_attr_debug_level);
#endif #endif
out:
return ret; return ret;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册