Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bb076620 authored by Jeff Garzik's avatar Jeff Garzik Committed by James Bottomley
Browse files

[SCSI] SCSI aic94xx: handle sysfs errors



Handle and unwind from errors returned by driver model functions.

Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 13026a6b
Loading
Loading
Loading
Loading
+33 −8
Original line number Diff line number Diff line
@@ -310,11 +310,29 @@ static ssize_t asd_show_dev_pcba_sn(struct device *dev,
}
static DEVICE_ATTR(pcba_sn, S_IRUGO, asd_show_dev_pcba_sn, NULL);

static void asd_create_dev_attrs(struct asd_ha_struct *asd_ha)
static int asd_create_dev_attrs(struct asd_ha_struct *asd_ha)
{
	device_create_file(&asd_ha->pcidev->dev, &dev_attr_revision);
	device_create_file(&asd_ha->pcidev->dev, &dev_attr_bios_build);
	device_create_file(&asd_ha->pcidev->dev, &dev_attr_pcba_sn);
	int err;

	err = device_create_file(&asd_ha->pcidev->dev, &dev_attr_revision);
	if (err)
		return err;

	err = device_create_file(&asd_ha->pcidev->dev, &dev_attr_bios_build);
	if (err)
		goto err_rev;

	err = device_create_file(&asd_ha->pcidev->dev, &dev_attr_pcba_sn);
	if (err)
		goto err_biosb;

	return 0;

err_biosb:
	device_remove_file(&asd_ha->pcidev->dev, &dev_attr_bios_build);
err_rev:
	device_remove_file(&asd_ha->pcidev->dev, &dev_attr_revision);
	return err;
}

static void asd_remove_dev_attrs(struct asd_ha_struct *asd_ha)
@@ -646,7 +664,9 @@ static int __devinit asd_pci_probe(struct pci_dev *dev,
	}
	ASD_DPRINTK("escbs posted\n");

	asd_create_dev_attrs(asd_ha);
	err = asd_create_dev_attrs(asd_ha);
	if (err)
		goto Err_dev_attrs;

	err = asd_register_sas_ha(asd_ha);
	if (err)
@@ -669,6 +689,7 @@ static int __devinit asd_pci_probe(struct pci_dev *dev,
	asd_unregister_sas_ha(asd_ha);
Err_reg_sas:
	asd_remove_dev_attrs(asd_ha);
Err_dev_attrs:
Err_escbs:
	asd_disable_ints(asd_ha);
	free_irq(dev->irq, asd_ha);
@@ -755,9 +776,9 @@ static ssize_t asd_version_show(struct device_driver *driver, char *buf)
}
static DRIVER_ATTR(version, S_IRUGO, asd_version_show, NULL);

static void asd_create_driver_attrs(struct device_driver *driver)
static int asd_create_driver_attrs(struct device_driver *driver)
{
	driver_create_file(driver, &driver_attr_version);
	return driver_create_file(driver, &driver_attr_version);
}

static void asd_remove_driver_attrs(struct device_driver *driver)
@@ -835,10 +856,14 @@ static int __init aic94xx_init(void)
	if (err)
		goto out_release_transport;

	asd_create_driver_attrs(&aic94xx_pci_driver.driver);
	err = asd_create_driver_attrs(&aic94xx_pci_driver.driver);
	if (err)
		goto out_unregister_pcidrv;

	return err;

 out_unregister_pcidrv:
	pci_unregister_driver(&aic94xx_pci_driver);
 out_release_transport:
	sas_release_transport(aic94xx_transport_template);
 out_destroy_caches: