summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/libfc/fc_exch.c
diff options
context:
space:
mode:
authorVasu Dev <vasu.dev@intel.com>2011-10-28 20:34:17 +0200
committerJames Bottomley <JBottomley@Parallels.com>2011-10-31 10:27:19 +0100
commitb6e3c84034b93e6acc895711f74730e235dfe9d2 (patch)
treed4f80cd98ba82f5900a1f21ff9b623d86ed12c8f /drivers/scsi/libfc/fc_exch.c
parent[SCSI] libfc: fix checking FC_TYPE_BLS (diff)
downloadlinux-b6e3c84034b93e6acc895711f74730e235dfe9d2.tar.xz
linux-b6e3c84034b93e6acc895711f74730e235dfe9d2.zip
[SCSI] libfc: avoid exchanges collision during lport reset
Currently timer delay is large and is using msleep to avoid avoid exchanges collision across lport reset, so instead do this by initializing exches pool indexes during reset also. Signed-off-by: Vasu Dev <vasu.dev@intel.com> Tested-by: Bhanu Prakash Gollapudi <bprakash@broadcom.com> Signed-off-by: Yi Zou <yi.zou@intel.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/libfc/fc_exch.c')
-rw-r--r--drivers/scsi/libfc/fc_exch.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/scsi/libfc/fc_exch.c b/drivers/scsi/libfc/fc_exch.c
index 81235f36adc1..1b22130035da 100644
--- a/drivers/scsi/libfc/fc_exch.c
+++ b/drivers/scsi/libfc/fc_exch.c
@@ -1793,6 +1793,9 @@ restart:
goto restart;
}
}
+ pool->next_index = 0;
+ pool->left = FC_XID_UNKNOWN;
+ pool->right = FC_XID_UNKNOWN;
spin_unlock_bh(&pool->lock);
}
@@ -2281,6 +2284,7 @@ struct fc_exch_mgr *fc_exch_mgr_alloc(struct fc_lport *lport,
goto free_mempool;
for_each_possible_cpu(cpu) {
pool = per_cpu_ptr(mp->pool, cpu);
+ pool->next_index = 0;
pool->left = FC_XID_UNKNOWN;
pool->right = FC_XID_UNKNOWN;
spin_lock_init(&pool->lock);