Commit 83aabc1b authored by Jeff Garzik's avatar Jeff Garzik Committed by James Bottomley

[SCSI] SCSI megaraid_sas: handle thrown errors

- handle clear_user() error

- handle and properly unwind from sysfs errors thrown during mod init

- adjust order of calls in megasas_exit() to precisely match
  registration order in megasas_init()
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>

Updated for extra attribute and
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent bb076620
...@@ -2864,7 +2864,8 @@ static int megasas_mgmt_compat_ioctl_fw(struct file *file, unsigned long arg) ...@@ -2864,7 +2864,8 @@ static int megasas_mgmt_compat_ioctl_fw(struct file *file, unsigned long arg)
int i; int i;
int error = 0; int error = 0;
clear_user(ioc, sizeof(*ioc)); if (clear_user(ioc, sizeof(*ioc)))
return -EFAULT;
if (copy_in_user(&ioc->host_no, &cioc->host_no, sizeof(u16)) || if (copy_in_user(&ioc->host_no, &cioc->host_no, sizeof(u16)) ||
copy_in_user(&ioc->sgl_off, &cioc->sgl_off, sizeof(u32)) || copy_in_user(&ioc->sgl_off, &cioc->sgl_off, sizeof(u32)) ||
...@@ -3010,16 +3011,33 @@ static int __init megasas_init(void) ...@@ -3010,16 +3011,33 @@ static int __init megasas_init(void)
if (rval) { if (rval) {
printk(KERN_DEBUG "megasas: PCI hotplug regisration failed \n"); printk(KERN_DEBUG "megasas: PCI hotplug regisration failed \n");
unregister_chrdev(megasas_mgmt_majorno, "megaraid_sas_ioctl"); goto err_pcidrv;
} }
driver_create_file(&megasas_pci_driver.driver, &driver_attr_version); rval = driver_create_file(&megasas_pci_driver.driver,
driver_create_file(&megasas_pci_driver.driver, &driver_attr_version);
&driver_attr_release_date); if (rval)
driver_create_file(&megasas_pci_driver.driver, goto err_dcf_attr_ver;
&driver_attr_dbg_lvl); rval = driver_create_file(&megasas_pci_driver.driver,
&driver_attr_release_date);
if (rval)
goto err_dcf_rel_date;
rval = driver_create_file(&megasas_pci_driver.driver,
&driver_attr_dbg_lvl);
if (rval)
goto err_dcf_dbg_lvl;
return rval; return rval;
err_dcf_dbg_lvl:
driver_remove_file(&megasas_pci_driver.driver,
&driver_attr_release_date);
err_dcf_rel_date:
driver_remove_file(&megasas_pci_driver.driver, &driver_attr_version);
err_dcf_attr_ver:
pci_unregister_driver(&megasas_pci_driver);
err_pcidrv:
unregister_chrdev(megasas_mgmt_majorno, "megaraid_sas_ioctl");
return rval;
} }
/** /**
...@@ -3027,11 +3045,11 @@ static int __init megasas_init(void) ...@@ -3027,11 +3045,11 @@ static int __init megasas_init(void)
*/ */
static void __exit megasas_exit(void) static void __exit megasas_exit(void)
{ {
driver_remove_file(&megasas_pci_driver.driver, &driver_attr_version);
driver_remove_file(&megasas_pci_driver.driver,
&driver_attr_release_date);
driver_remove_file(&megasas_pci_driver.driver, driver_remove_file(&megasas_pci_driver.driver,
&driver_attr_dbg_lvl); &driver_attr_dbg_lvl);
driver_remove_file(&megasas_pci_driver.driver,
&driver_attr_release_date);
driver_remove_file(&megasas_pci_driver.driver, &driver_attr_version);
pci_unregister_driver(&megasas_pci_driver); pci_unregister_driver(&megasas_pci_driver);
unregister_chrdev(megasas_mgmt_majorno, "megaraid_sas_ioctl"); unregister_chrdev(megasas_mgmt_majorno, "megaraid_sas_ioctl");
......
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