aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorBrian King <brking@linux.vnet.ibm.com>2009-10-19 16:07:53 -0400
committerJames Bottomley <James.Bottomley@suse.de>2009-12-04 13:00:20 -0500
commit4a5c4a5ed2b8b7fac68368e7ab8cb415dd006418 (patch)
tree73df2c0e5488fa28957c57d03b048e919e3b9adb /drivers/scsi
parent861890c62d46bd29c73d75fc907aeffd1c4eee06 (diff)
[SCSI] ibmvfc: Fix adapter cancel flags for terminate_rport_io
When issuing a Cancel to the virtual fibre channel adapter, the interface specifies a flags field for the client to indicate what kind of error recovery is being performed. Fix up these flags for terminate_rport_io to indicate an abort task set rather than a target reset. Signed-off-by: Brian King <brking@linux.vnet.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/ibmvscsi/ibmvfc.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c
index 696328699ec3..2c73b831544c 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc.c
+++ b/drivers/scsi/ibmvscsi/ibmvfc.c
@@ -2064,12 +2064,24 @@ static int ibmvfc_eh_device_reset_handler(struct scsi_cmnd *cmd)
2064} 2064}
2065 2065
2066/** 2066/**
2067 * ibmvfc_dev_cancel_all - Device iterated cancel all function 2067 * ibmvfc_dev_cancel_all_abts - Device iterated cancel all function
2068 * @sdev: scsi device struct 2068 * @sdev: scsi device struct
2069 * @data: return code 2069 * @data: return code
2070 * 2070 *
2071 **/ 2071 **/
2072static void ibmvfc_dev_cancel_all(struct scsi_device *sdev, void *data) 2072static void ibmvfc_dev_cancel_all_abts(struct scsi_device *sdev, void *data)
2073{
2074 unsigned long *rc = data;
2075 *rc |= ibmvfc_cancel_all(sdev, IBMVFC_TMF_ABORT_TASK_SET);
2076}
2077
2078/**
2079 * ibmvfc_dev_cancel_all_reset - Device iterated cancel all function
2080 * @sdev: scsi device struct
2081 * @data: return code
2082 *
2083 **/
2084static void ibmvfc_dev_cancel_all_reset(struct scsi_device *sdev, void *data)
2073{ 2085{
2074 unsigned long *rc = data; 2086 unsigned long *rc = data;
2075 *rc |= ibmvfc_cancel_all(sdev, IBMVFC_TMF_TGT_RESET); 2087 *rc |= ibmvfc_cancel_all(sdev, IBMVFC_TMF_TGT_RESET);
@@ -2105,7 +2117,7 @@ static int ibmvfc_eh_target_reset_handler(struct scsi_cmnd *cmd)
2105 2117
2106 ENTER; 2118 ENTER;
2107 ibmvfc_wait_while_resetting(vhost); 2119 ibmvfc_wait_while_resetting(vhost);
2108 starget_for_each_device(starget, &cancel_rc, ibmvfc_dev_cancel_all); 2120 starget_for_each_device(starget, &cancel_rc, ibmvfc_dev_cancel_all_reset);
2109 reset_rc = ibmvfc_reset_device(sdev, IBMVFC_TARGET_RESET, "target"); 2121 reset_rc = ibmvfc_reset_device(sdev, IBMVFC_TARGET_RESET, "target");
2110 2122
2111 if (!cancel_rc && !reset_rc) 2123 if (!cancel_rc && !reset_rc)
@@ -2147,7 +2159,7 @@ static void ibmvfc_terminate_rport_io(struct fc_rport *rport)
2147 int rc = FAILED; 2159 int rc = FAILED;
2148 2160
2149 ENTER; 2161 ENTER;
2150 starget_for_each_device(starget, &cancel_rc, ibmvfc_dev_cancel_all); 2162 starget_for_each_device(starget, &cancel_rc, ibmvfc_dev_cancel_all_abts);
2151 starget_for_each_device(starget, &abort_rc, ibmvfc_dev_abort_all); 2163 starget_for_each_device(starget, &abort_rc, ibmvfc_dev_abort_all);
2152 2164
2153 if (!cancel_rc && !abort_rc) 2165 if (!cancel_rc && !abort_rc)