diff options
-rw-r--r-- | drivers/scsi/esas2r/esas2r.h | 2 | ||||
-rw-r--r-- | drivers/scsi/esas2r/esas2r_init.c | 21 | ||||
-rw-r--r-- | drivers/scsi/esas2r/esas2r_main.c | 72 |
3 files changed, 4 insertions, 91 deletions
diff --git a/drivers/scsi/esas2r/esas2r.h b/drivers/scsi/esas2r/esas2r.h index 1da6407ee142..858c3b33db78 100644 --- a/drivers/scsi/esas2r/esas2r.h +++ b/drivers/scsi/esas2r/esas2r.h | |||
@@ -962,7 +962,6 @@ struct esas2r_adapter { | |||
962 | * Function Declarations | 962 | * Function Declarations |
963 | * SCSI functions | 963 | * SCSI functions |
964 | */ | 964 | */ |
965 | int esas2r_release(struct Scsi_Host *); | ||
966 | const char *esas2r_info(struct Scsi_Host *); | 965 | const char *esas2r_info(struct Scsi_Host *); |
967 | int esas2r_write_params(struct esas2r_adapter *a, struct esas2r_request *rq, | 966 | int esas2r_write_params(struct esas2r_adapter *a, struct esas2r_request *rq, |
968 | struct esas2r_sas_nvram *data); | 967 | struct esas2r_sas_nvram *data); |
@@ -984,7 +983,6 @@ int esas2r_target_reset(struct scsi_cmnd *cmd); | |||
984 | /* Internal functions */ | 983 | /* Internal functions */ |
985 | int esas2r_init_adapter(struct Scsi_Host *host, struct pci_dev *pcid, | 984 | int esas2r_init_adapter(struct Scsi_Host *host, struct pci_dev *pcid, |
986 | int index); | 985 | int index); |
987 | int esas2r_cleanup(struct Scsi_Host *host); | ||
988 | int esas2r_read_fw(struct esas2r_adapter *a, char *buf, long off, int count); | 986 | int esas2r_read_fw(struct esas2r_adapter *a, char *buf, long off, int count); |
989 | int esas2r_write_fw(struct esas2r_adapter *a, const char *buf, long off, | 987 | int esas2r_write_fw(struct esas2r_adapter *a, const char *buf, long off, |
990 | int count); | 988 | int count); |
diff --git a/drivers/scsi/esas2r/esas2r_init.c b/drivers/scsi/esas2r/esas2r_init.c index 5b14dd29b764..9dffcb28c9b7 100644 --- a/drivers/scsi/esas2r/esas2r_init.c +++ b/drivers/scsi/esas2r/esas2r_init.c | |||
@@ -661,27 +661,6 @@ void esas2r_kill_adapter(int i) | |||
661 | } | 661 | } |
662 | } | 662 | } |
663 | 663 | ||
664 | int esas2r_cleanup(struct Scsi_Host *host) | ||
665 | { | ||
666 | struct esas2r_adapter *a; | ||
667 | int index; | ||
668 | |||
669 | if (host == NULL) { | ||
670 | int i; | ||
671 | |||
672 | esas2r_debug("esas2r_cleanup everything"); | ||
673 | for (i = 0; i < MAX_ADAPTERS; i++) | ||
674 | esas2r_kill_adapter(i); | ||
675 | return -1; | ||
676 | } | ||
677 | |||
678 | esas2r_debug("esas2r_cleanup called for host %p", host); | ||
679 | a = (struct esas2r_adapter *)host->hostdata; | ||
680 | index = a->index; | ||
681 | esas2r_kill_adapter(index); | ||
682 | return index; | ||
683 | } | ||
684 | |||
685 | int esas2r_suspend(struct pci_dev *pdev, pm_message_t state) | 664 | int esas2r_suspend(struct pci_dev *pdev, pm_message_t state) |
686 | { | 665 | { |
687 | struct Scsi_Host *host = pci_get_drvdata(pdev); | 666 | struct Scsi_Host *host = pci_get_drvdata(pdev); |
diff --git a/drivers/scsi/esas2r/esas2r_main.c b/drivers/scsi/esas2r/esas2r_main.c index 4eb14301a497..e07eac5be087 100644 --- a/drivers/scsi/esas2r/esas2r_main.c +++ b/drivers/scsi/esas2r/esas2r_main.c | |||
@@ -235,7 +235,6 @@ static struct scsi_host_template driver_template = { | |||
235 | .module = THIS_MODULE, | 235 | .module = THIS_MODULE, |
236 | .show_info = esas2r_show_info, | 236 | .show_info = esas2r_show_info, |
237 | .name = ESAS2R_LONGNAME, | 237 | .name = ESAS2R_LONGNAME, |
238 | .release = esas2r_release, | ||
239 | .info = esas2r_info, | 238 | .info = esas2r_info, |
240 | .ioctl = esas2r_ioctl, | 239 | .ioctl = esas2r_ioctl, |
241 | .queuecommand = esas2r_queuecommand, | 240 | .queuecommand = esas2r_queuecommand, |
@@ -520,44 +519,16 @@ static int esas2r_probe(struct pci_dev *pcid, | |||
520 | 519 | ||
521 | static void esas2r_remove(struct pci_dev *pdev) | 520 | static void esas2r_remove(struct pci_dev *pdev) |
522 | { | 521 | { |
523 | struct Scsi_Host *host; | 522 | struct Scsi_Host *host = pci_get_drvdata(pdev); |
524 | int index; | 523 | struct esas2r_adapter *a = (struct esas2r_adapter *)host->hostdata; |
525 | |||
526 | if (pdev == NULL) { | ||
527 | esas2r_log(ESAS2R_LOG_WARN, "esas2r_remove pdev==NULL"); | ||
528 | return; | ||
529 | } | ||
530 | |||
531 | host = pci_get_drvdata(pdev); | ||
532 | |||
533 | if (host == NULL) { | ||
534 | /* | ||
535 | * this can happen if pci_set_drvdata was already called | ||
536 | * to clear the host pointer. if this is the case, we | ||
537 | * are okay; this channel has already been cleaned up. | ||
538 | */ | ||
539 | |||
540 | return; | ||
541 | } | ||
542 | 524 | ||
543 | esas2r_log_dev(ESAS2R_LOG_INFO, &(pdev->dev), | 525 | esas2r_log_dev(ESAS2R_LOG_INFO, &(pdev->dev), |
544 | "esas2r_remove(%p) called; " | 526 | "esas2r_remove(%p) called; " |
545 | "host:%p", pdev, | 527 | "host:%p", pdev, |
546 | host); | 528 | host); |
547 | 529 | ||
548 | index = esas2r_cleanup(host); | 530 | esas2r_kill_adapter(a->index); |
549 | |||
550 | if (index < 0) | ||
551 | esas2r_log_dev(ESAS2R_LOG_WARN, &(pdev->dev), | ||
552 | "unknown host in %s", | ||
553 | __func__); | ||
554 | |||
555 | found_adapters--; | 531 | found_adapters--; |
556 | |||
557 | /* if this was the last adapter, clean up the rest of the driver */ | ||
558 | |||
559 | if (found_adapters == 0) | ||
560 | esas2r_cleanup(NULL); | ||
561 | } | 532 | } |
562 | 533 | ||
563 | static int __init esas2r_init(void) | 534 | static int __init esas2r_init(void) |
@@ -638,30 +609,7 @@ static int __init esas2r_init(void) | |||
638 | for (i = 0; i < MAX_ADAPTERS; i++) | 609 | for (i = 0; i < MAX_ADAPTERS; i++) |
639 | esas2r_adapters[i] = NULL; | 610 | esas2r_adapters[i] = NULL; |
640 | 611 | ||
641 | /* initialize */ | 612 | return pci_register_driver(&esas2r_pci_driver); |
642 | |||
643 | driver_template.module = THIS_MODULE; | ||
644 | |||
645 | if (pci_register_driver(&esas2r_pci_driver) != 0) | ||
646 | esas2r_log(ESAS2R_LOG_CRIT, "pci_register_driver FAILED"); | ||
647 | else | ||
648 | esas2r_log(ESAS2R_LOG_INFO, "pci_register_driver() OK"); | ||
649 | |||
650 | if (!found_adapters) { | ||
651 | pci_unregister_driver(&esas2r_pci_driver); | ||
652 | esas2r_cleanup(NULL); | ||
653 | |||
654 | esas2r_log(ESAS2R_LOG_CRIT, | ||
655 | "driver will not be loaded because no ATTO " | ||
656 | "%s devices were found", | ||
657 | ESAS2R_DRVR_NAME); | ||
658 | return -1; | ||
659 | } else { | ||
660 | esas2r_log(ESAS2R_LOG_INFO, "found %d adapters", | ||
661 | found_adapters); | ||
662 | } | ||
663 | |||
664 | return 0; | ||
665 | } | 613 | } |
666 | 614 | ||
667 | /* Handle ioctl calls to "/proc/scsi/esas2r/ATTOnode" */ | 615 | /* Handle ioctl calls to "/proc/scsi/esas2r/ATTOnode" */ |
@@ -753,18 +701,6 @@ int esas2r_show_info(struct seq_file *m, struct Scsi_Host *sh) | |||
753 | 701 | ||
754 | } | 702 | } |
755 | 703 | ||
756 | int esas2r_release(struct Scsi_Host *sh) | ||
757 | { | ||
758 | esas2r_log_dev(ESAS2R_LOG_INFO, &(sh->shost_gendev), | ||
759 | "esas2r_release() called"); | ||
760 | |||
761 | esas2r_cleanup(sh); | ||
762 | if (sh->irq) | ||
763 | free_irq(sh->irq, NULL); | ||
764 | scsi_unregister(sh); | ||
765 | return 0; | ||
766 | } | ||
767 | |||
768 | const char *esas2r_info(struct Scsi_Host *sh) | 704 | const char *esas2r_info(struct Scsi_Host *sh) |
769 | { | 705 | { |
770 | struct esas2r_adapter *a = (struct esas2r_adapter *)sh->hostdata; | 706 | struct esas2r_adapter *a = (struct esas2r_adapter *)sh->hostdata; |