[SCSI] isci: remove bus and reset handlers
authorDan Williams <dan.j.williams@intel.com>
Thu, 8 Dec 2011 08:37:25 +0000 (00:37 -0800)
committerJames Bottomley <JBottomley@Parallels.com>
Wed, 29 Feb 2012 21:16:05 +0000 (15:16 -0600)
Remove ->eh_device_reset_handler() and ->eh_bus_reset_handler() for the
same reason they are not implemented for libata hosts, they cannot be
implemented reliably with ata-eh.  ATA error recovery wants to divert
all resets to the eh thread and wait for completion, these handlers may
be invoked from a non-blocking ioctl.

The other path they are called from is libsas-eh, and if we escalate
past I_T_nexus reset we have larger problems i.e. tear down all
in-flight commands in the domain potentially without notification to the
lldd if it has chosen not to implement ->lldd_clear_nexus_port() /
->lldd_clear_nexus_ha().

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/isci/init.c
drivers/scsi/isci/task.c
drivers/scsi/isci/task.h

index 68d9bc23d1908391193a5b308c3563ee1320b436..c3fe39bcacd5d65c0fe50df38f1d3a046ebd776b 100644 (file)
@@ -165,8 +165,6 @@ static struct scsi_host_template isci_sht = {
        .sg_tablesize                   = SG_ALL,
        .max_sectors                    = SCSI_DEFAULT_MAX_SECTORS,
        .use_clustering                 = ENABLE_CLUSTERING,
-       .eh_device_reset_handler        = sas_eh_device_reset_handler,
-       .eh_bus_reset_handler           = isci_bus_reset_handler,
        .slave_alloc                    = sas_slave_alloc,
        .target_destroy                 = sas_target_destroy,
        .ioctl                          = sas_ioctl,
index 3f04e97128a6ae1885733af0732dcd5c1aa1515f..5306979574812ba7a7b764ed1f2c10680427629e 100644 (file)
@@ -1322,26 +1322,3 @@ int isci_task_I_T_nexus_reset(struct domain_device *dev)
        isci_put_device(idev);
        return ret;
 }
-
-int isci_bus_reset_handler(struct scsi_cmnd *cmd)
-{
-       struct domain_device *dev = sdev_to_domain_dev(cmd->device);
-       struct isci_host *ihost = dev_to_ihost(dev);
-       struct isci_remote_device *idev;
-       unsigned long flags;
-       int ret;
-
-       spin_lock_irqsave(&ihost->scic_lock, flags);
-       idev = isci_lookup_device(dev);
-       spin_unlock_irqrestore(&ihost->scic_lock, flags);
-
-       if (!idev) {
-               ret = TMF_RESP_FUNC_COMPLETE;
-               goto out;
-       }
-
-       ret = isci_reset_device(ihost, dev, idev);
- out:
-       isci_put_device(idev);
-       return ret;
-}
index 5ba00c3081f47f5c65254e221e2eeb49eb30b34c..7b6d0e32fd9bc75720da20df9f2a12c04034b59a 100644 (file)
@@ -208,8 +208,6 @@ int isci_queuecommand(
        struct scsi_cmnd *scsi_cmd,
        void (*donefunc)(struct scsi_cmnd *));
 
-int isci_bus_reset_handler(struct scsi_cmnd *cmd);
-
 /**
  * enum isci_completion_selection - This enum defines the possible actions to
  *    take with respect to a given request's notification back to libsas.