diff options
author | Brian King <brking@linux.vnet.ibm.com> | 2009-10-19 16:07:47 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2009-12-04 13:00:17 -0500 |
commit | 230934a6fe2f44d14ef840639f010c9cf4da098f (patch) | |
tree | 5d55f8c357c325266b68cdee6529dee4e282ff82 /drivers/scsi/ibmvscsi | |
parent | 44d9269481bb43df445adf464b06ff031e67d7ea (diff) |
[SCSI] ibmvfc: Fixup TMF response handling
When processing the response to either a LUN reset,
target reset, or an abort task set, the ibmvfc driver needs to
treat as success receiving a response with a non-zero
status in the response IU along with a general transport
error with the FCP response code being zero. The VIOS
currently guarantees this cannot happen, but a future version
of VIOS may allow this to be returned, so ensure we handle
this response combination correctly for TMFs, as we already
do for SCSI commands.
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')
-rw-r--r-- | drivers/scsi/ibmvscsi/ibmvfc.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c index bb2c696c006a..c35d8054dbbb 100644 --- a/drivers/scsi/ibmvscsi/ibmvfc.c +++ b/drivers/scsi/ibmvscsi/ibmvfc.c | |||
@@ -1731,7 +1731,10 @@ static int ibmvfc_reset_device(struct scsi_device *sdev, int type, char *desc) | |||
1731 | sdev_printk(KERN_INFO, sdev, "Resetting %s\n", desc); | 1731 | sdev_printk(KERN_INFO, sdev, "Resetting %s\n", desc); |
1732 | wait_for_completion(&evt->comp); | 1732 | wait_for_completion(&evt->comp); |
1733 | 1733 | ||
1734 | if (rsp_iu.cmd.status) { | 1734 | if (rsp_iu.cmd.status) |
1735 | rsp_code = ibmvfc_get_err_result(&rsp_iu.cmd); | ||
1736 | |||
1737 | if (rsp_code) { | ||
1735 | if (fc_rsp->flags & FCP_RSP_LEN_VALID) | 1738 | if (fc_rsp->flags & FCP_RSP_LEN_VALID) |
1736 | rsp_code = fc_rsp->data.info.rsp_code; | 1739 | rsp_code = fc_rsp->data.info.rsp_code; |
1737 | 1740 | ||
@@ -1820,7 +1823,10 @@ static int ibmvfc_abort_task_set(struct scsi_device *sdev) | |||
1820 | sdev_printk(KERN_INFO, sdev, "Aborting outstanding commands\n"); | 1823 | sdev_printk(KERN_INFO, sdev, "Aborting outstanding commands\n"); |
1821 | wait_for_completion(&evt->comp); | 1824 | wait_for_completion(&evt->comp); |
1822 | 1825 | ||
1823 | if (rsp_iu.cmd.status) { | 1826 | if (rsp_iu.cmd.status) |
1827 | rsp_code = ibmvfc_get_err_result(&rsp_iu.cmd); | ||
1828 | |||
1829 | if (rsp_code) { | ||
1824 | if (fc_rsp->flags & FCP_RSP_LEN_VALID) | 1830 | if (fc_rsp->flags & FCP_RSP_LEN_VALID) |
1825 | rsp_code = fc_rsp->data.info.rsp_code; | 1831 | rsp_code = fc_rsp->data.info.rsp_code; |
1826 | 1832 | ||