aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/ibmvscsi
diff options
context:
space:
mode:
authorBrian King <brking@linux.vnet.ibm.com>2009-10-19 16:07:47 -0400
committerJames Bottomley <James.Bottomley@suse.de>2009-12-04 13:00:17 -0500
commit230934a6fe2f44d14ef840639f010c9cf4da098f (patch)
tree5d55f8c357c325266b68cdee6529dee4e282ff82 /drivers/scsi/ibmvscsi
parent44d9269481bb43df445adf464b06ff031e67d7ea (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.c10
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