aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/ibmvscsi/ibmvfc.h
diff options
context:
space:
mode:
authorBrian King <brking@linux.vnet.ibm.com>2009-03-20 16:44:39 -0400
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2009-04-03 10:22:43 -0400
commit10501e1ce3d97cc84a8e29a3a139f74601b59b0f (patch)
tree47ba1a14b3c3843efc4b39eff17424da391c73b5 /drivers/scsi/ibmvscsi/ibmvfc.h
parent9ab3610f9c24e7f303f1b0e6bb88a5f804ab847e (diff)
[SCSI] ibmvfc: Improve ADISC timeout handling
The ibmvfc driver currently breaks the CRQ and essentially resets the entire virtual FC adapter, killing all outstanding ops to all attached targets, if an ADISC times out during target discover/rediscovery. This patch adds some code to cancel the ADISC if it times out, which prevents a single ADISC timeout from affecting the other devices attached to the fabric. 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.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.h b/drivers/scsi/ibmvscsi/ibmvfc.h
index 70107522e3a9..0f14fd3c40d2 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc.h
+++ b/drivers/scsi/ibmvscsi/ibmvfc.h
@@ -33,6 +33,10 @@
33#define IBMVFC_DRIVER_DATE "(November 14, 2008)" 33#define IBMVFC_DRIVER_DATE "(November 14, 2008)"
34 34
35#define IBMVFC_DEFAULT_TIMEOUT 60 35#define IBMVFC_DEFAULT_TIMEOUT 60
36#define IBMVFC_ADISC_CANCEL_TIMEOUT 45
37#define IBMVFC_ADISC_TIMEOUT 15
38#define IBMVFC_ADISC_PLUS_CANCEL_TIMEOUT \
39 (IBMVFC_ADISC_TIMEOUT + IBMVFC_ADISC_CANCEL_TIMEOUT)
36#define IBMVFC_INIT_TIMEOUT 120 40#define IBMVFC_INIT_TIMEOUT 120
37#define IBMVFC_MAX_REQUESTS_DEFAULT 100 41#define IBMVFC_MAX_REQUESTS_DEFAULT 100
38 42
@@ -53,9 +57,9 @@
53 * Ensure we have resources for ERP and initialization: 57 * Ensure we have resources for ERP and initialization:
54 * 1 for ERP 58 * 1 for ERP
55 * 1 for initialization 59 * 1 for initialization
56 * 1 for each discovery thread 60 * 2 for each discovery thread
57 */ 61 */
58#define IBMVFC_NUM_INTERNAL_REQ (1 + 1 + disc_threads) 62#define IBMVFC_NUM_INTERNAL_REQ (1 + 1 + (disc_threads * 2))
59 63
60#define IBMVFC_MAD_SUCCESS 0x00 64#define IBMVFC_MAD_SUCCESS 0x00
61#define IBMVFC_MAD_NOT_SUPPORTED 0xF1 65#define IBMVFC_MAD_NOT_SUPPORTED 0xF1
@@ -585,10 +589,12 @@ struct ibmvfc_target {
585 enum ibmvfc_target_action action; 589 enum ibmvfc_target_action action;
586 int need_login; 590 int need_login;
587 int init_retries; 591 int init_retries;
592 u32 cancel_key;
588 struct ibmvfc_service_parms service_parms; 593 struct ibmvfc_service_parms service_parms;
589 struct ibmvfc_service_parms service_parms_change; 594 struct ibmvfc_service_parms service_parms_change;
590 struct fc_rport_identifiers ids; 595 struct fc_rport_identifiers ids;
591 void (*job_step) (struct ibmvfc_target *); 596 void (*job_step) (struct ibmvfc_target *);
597 struct timer_list timer;
592 struct kref kref; 598 struct kref kref;
593}; 599};
594 600
@@ -672,6 +678,7 @@ struct ibmvfc_host {
672 int task_set; 678 int task_set;
673 int init_retries; 679 int init_retries;
674 int discovery_threads; 680 int discovery_threads;
681 int abort_threads;
675 int client_migrated; 682 int client_migrated;
676 int reinit; 683 int reinit;
677 int delay_init; 684 int delay_init;