diff options
author | Brian King <brking@linux.vnet.ibm.com> | 2009-10-19 16:07:53 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2009-12-04 13:00:20 -0500 |
commit | 4a5c4a5ed2b8b7fac68368e7ab8cb415dd006418 (patch) | |
tree | 73df2c0e5488fa28957c57d03b048e919e3b9adb /drivers/scsi/ibmvscsi/ibmvfc.c | |
parent | 861890c62d46bd29c73d75fc907aeffd1c4eee06 (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/ibmvscsi/ibmvfc.c')
-rw-r--r-- | drivers/scsi/ibmvscsi/ibmvfc.c | 20 |
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 | **/ |
2072 | static void ibmvfc_dev_cancel_all(struct scsi_device *sdev, void *data) | 2072 | static 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 | **/ | ||
2084 | static 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) |