for (container = 0; container < MAXIMUM_NUM_CONTAINERS; container++)
fsa_dev_ptr->devname[container][0] = '\0';
- error = scsi_add_host(shost, &pdev->dev);
- if (error)
- goto out_free_fibs;
-
if ((*aac_drivers[index].init)(aac))
goto out_free_fibs;
shost->max_lun = AAC_MAX_LUN;
pci_set_drvdata(pdev, shost);
+
+ error = scsi_add_host(shost, &pdev->dev);
+ if (error)
+ goto out_deinit;
scsi_scan_host(shost);
return 0;
+out_deinit:
+ kill_proc(aac->thread_pid, SIGKILL, 0);
+ wait_for_completion(&aac->aif_completion);
+
+ aac_send_shutdown(aac);
+ fib_map_free(aac);
+ pci_free_consistent(aac->pdev, aac->comm_size, aac->comm_addr, aac->comm_phys);
+ kfree(aac->queues);
+ free_irq(pdev->irq, aac);
+ iounmap((void * )aac->regs.sa);
out_free_fibs:
- scsi_remove_host(shost);
kfree(aac->fibs);
out_free_host:
scsi_host_put(shost);