diff options
author | Eddie Wai <eddie.wai@broadcom.com> | 2010-07-01 18:34:53 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2010-07-27 13:03:59 -0400 |
commit | e37d2c4791480e27c2e2e4a556e4d2ba1d353ff8 (patch) | |
tree | 25e5526cecab3bd1359b3b8468dc2ce0ba7116d9 /drivers/scsi/bnx2i/bnx2i_iscsi.c | |
parent | 55e15c975cbf9ef8b765eba9ebadc96f2a2e5752 (diff) |
[SCSI] bnx2i: Fine tuned conn destroy and context destroy timeout values
Added variables to separate the fine tuned timeout values for
connection destroy and context destroy for both 1g and 10g devices.
v2: Extended the 5771X disconnect timeout from 10s to 20s as the firmware
has a retransmission timeout of 16s. This fixes one of the iscsi_endpoint
leak issues when the target is slow or non-responsive to our TCP FIN.
Signed-off-by: Eddie Wai <eddie.wai@broadcom.com>
Reviewed-by: Michael Chan <mchan@broadcom.com>
Reviewed-by: Benjamin Li <benli@broadcom.com>
Acked-by: Anil Veerabhadrappa <anilgv@broadcom.com>
Reviewed-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/bnx2i/bnx2i_iscsi.c')
-rw-r--r-- | drivers/scsi/bnx2i/bnx2i_iscsi.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/scsi/bnx2i/bnx2i_iscsi.c b/drivers/scsi/bnx2i/bnx2i_iscsi.c index 1600e7cae191..f6eebb39fe54 100644 --- a/drivers/scsi/bnx2i/bnx2i_iscsi.c +++ b/drivers/scsi/bnx2i/bnx2i_iscsi.c | |||
@@ -854,10 +854,15 @@ struct bnx2i_hba *bnx2i_alloc_hba(struct cnic_dev *cnic) | |||
854 | spin_lock_init(&hba->lock); | 854 | spin_lock_init(&hba->lock); |
855 | mutex_init(&hba->net_dev_lock); | 855 | mutex_init(&hba->net_dev_lock); |
856 | init_waitqueue_head(&hba->eh_wait); | 856 | init_waitqueue_head(&hba->eh_wait); |
857 | if (test_bit(BNX2I_NX2_DEV_57710, &hba->cnic_dev_type)) | 857 | if (test_bit(BNX2I_NX2_DEV_57710, &hba->cnic_dev_type)) { |
858 | hba->hba_shutdown_tmo = 20 * HZ; | 858 | hba->hba_shutdown_tmo = 20 * HZ; |
859 | else /* 5706/5708/5709 */ | 859 | hba->conn_teardown_tmo = 20 * HZ; |
860 | hba->conn_ctx_destroy_tmo = 6 * HZ; | ||
861 | } else { /* 5706/5708/5709 */ | ||
860 | hba->hba_shutdown_tmo = 20 * HZ; | 862 | hba->hba_shutdown_tmo = 20 * HZ; |
863 | hba->conn_teardown_tmo = 10 * HZ; | ||
864 | hba->conn_ctx_destroy_tmo = 2 * HZ; | ||
865 | } | ||
861 | 866 | ||
862 | if (iscsi_host_add(shost, &hba->pcidev->dev)) | 867 | if (iscsi_host_add(shost, &hba->pcidev->dev)) |
863 | goto free_dump_mem; | 868 | goto free_dump_mem; |
@@ -1633,7 +1638,7 @@ static int bnx2i_tear_down_conn(struct bnx2i_hba *hba, | |||
1633 | 1638 | ||
1634 | ep->state = EP_STATE_CLEANUP_START; | 1639 | ep->state = EP_STATE_CLEANUP_START; |
1635 | init_timer(&ep->ofld_timer); | 1640 | init_timer(&ep->ofld_timer); |
1636 | ep->ofld_timer.expires = 10*HZ + jiffies; | 1641 | ep->ofld_timer.expires = hba->conn_ctx_destroy_tmo + jiffies; |
1637 | ep->ofld_timer.function = bnx2i_ep_ofld_timer; | 1642 | ep->ofld_timer.function = bnx2i_ep_ofld_timer; |
1638 | ep->ofld_timer.data = (unsigned long) ep; | 1643 | ep->ofld_timer.data = (unsigned long) ep; |
1639 | add_timer(&ep->ofld_timer); | 1644 | add_timer(&ep->ofld_timer); |
@@ -1937,7 +1942,7 @@ int bnx2i_hw_ep_disconnect(struct bnx2i_endpoint *bnx2i_ep) | |||
1937 | bnx2i_ep->state = EP_STATE_DISCONN_START; | 1942 | bnx2i_ep->state = EP_STATE_DISCONN_START; |
1938 | 1943 | ||
1939 | init_timer(&bnx2i_ep->ofld_timer); | 1944 | init_timer(&bnx2i_ep->ofld_timer); |
1940 | bnx2i_ep->ofld_timer.expires = 10*HZ + jiffies; | 1945 | bnx2i_ep->ofld_timer.expires = hba->conn_teardown_tmo + jiffies; |
1941 | bnx2i_ep->ofld_timer.function = bnx2i_ep_ofld_timer; | 1946 | bnx2i_ep->ofld_timer.function = bnx2i_ep_ofld_timer; |
1942 | bnx2i_ep->ofld_timer.data = (unsigned long) bnx2i_ep; | 1947 | bnx2i_ep->ofld_timer.data = (unsigned long) bnx2i_ep; |
1943 | add_timer(&bnx2i_ep->ofld_timer); | 1948 | add_timer(&bnx2i_ep->ofld_timer); |