aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/ibmvscsi/ibmvfc.h
diff options
context:
space:
mode:
authorBrian King <brking@linux.vnet.ibm.com>2008-10-29 09:46:41 -0400
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2008-12-29 12:24:13 -0500
commitad8dcffaf9bc1d7eb86dabf591e95f4ffb86cf1b (patch)
treedb8928e93f09708714f3bed2dd2a2a244721b6b5 /drivers/scsi/ibmvscsi/ibmvfc.h
parent50119dad2a6c2674f35d81e708822b40f65f40cb (diff)
[SCSI] ibmvfc: Error handling fixes
Due to an ambiguity in the VIOS VFC interface specification, abort/cancel handling is not done correctly and can result in double completion of commands. In order to cancel all outstanding commands to a device, a cancel must be sent, followed by an abort task set. After the responses are received for these commands, there may still be commands outstanding, in the process of getting flushed back, in which case, we need to wait for them. This patch removes the assumption that if the abort and the cancel both complete successfully that the device queue has been flushed and waits for all the responses to come back. Signed-off-by: Brian King <brking@linux.vnet.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi/ibmvscsi/ibmvfc.h')
-rw-r--r--drivers/scsi/ibmvscsi/ibmvfc.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.h b/drivers/scsi/ibmvscsi/ibmvfc.h
index 1d18a4c48a9c..c3696ce470bd 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc.h
+++ b/drivers/scsi/ibmvscsi/ibmvfc.h
@@ -337,7 +337,6 @@ struct ibmvfc_tmf {
337#define IBMVFC_TMF_LUA_VALID 0x40 337#define IBMVFC_TMF_LUA_VALID 0x40
338 u32 cancel_key; 338 u32 cancel_key;
339 u32 my_cancel_key; 339 u32 my_cancel_key;
340#define IBMVFC_TMF_CANCEL_KEY 0x80000000
341 u32 pad; 340 u32 pad;
342 u64 reserved[2]; 341 u64 reserved[2];
343}__attribute__((packed, aligned (8))); 342}__attribute__((packed, aligned (8)));
@@ -606,6 +605,7 @@ struct ibmvfc_event {
606 struct srp_direct_buf *ext_list; 605 struct srp_direct_buf *ext_list;
607 dma_addr_t ext_list_token; 606 dma_addr_t ext_list_token;
608 struct completion comp; 607 struct completion comp;
608 struct completion *eh_comp;
609 struct timer_list timer; 609 struct timer_list timer;
610}; 610};
611 611