diff options
author | Anil Veerabhadrappa <anilgv@broadcom.com> | 2009-07-30 00:50:11 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2009-08-22 18:52:12 -0400 |
commit | c19dcd011238118ad07d3ab7ed1bbc4916826324 (patch) | |
tree | 93c100d928f16f5ebd522e73c6ef43877f21a9a1 /drivers/scsi/bnx2i | |
parent | 534cc9c165017dd29ae0f4458832893dc8033c6f (diff) |
[SCSI] bnx2i : Fix "cid #n not valid" issue
When bnx2i_adapter_ready() fails, connection handle(cid) = 0 is wrongly freed
because 'cid' is not yet allocated for the endpoint. Fix is to initialize
bnx2i_ep->ep_iscsi_cid to '-1' in bnx2i_alloc_ep() and not in
bnx2i_ep_connect() to avoid releasing invalid 'cid'. There is already a check
in bnx2i_free_iscsi_cid() not to free invalid iscsi connection handle (-1)
Signed-off-by: Anil Veerabhadrappa <anilgv@broadcom.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/bnx2i')
-rw-r--r-- | drivers/scsi/bnx2i/bnx2i_iscsi.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/scsi/bnx2i/bnx2i_iscsi.c b/drivers/scsi/bnx2i/bnx2i_iscsi.c index 40120a242eff..9a7ba71f1af4 100644 --- a/drivers/scsi/bnx2i/bnx2i_iscsi.c +++ b/drivers/scsi/bnx2i/bnx2i_iscsi.c | |||
@@ -387,6 +387,7 @@ static struct iscsi_endpoint *bnx2i_alloc_ep(struct bnx2i_hba *hba) | |||
387 | bnx2i_ep = ep->dd_data; | 387 | bnx2i_ep = ep->dd_data; |
388 | INIT_LIST_HEAD(&bnx2i_ep->link); | 388 | INIT_LIST_HEAD(&bnx2i_ep->link); |
389 | bnx2i_ep->state = EP_STATE_IDLE; | 389 | bnx2i_ep->state = EP_STATE_IDLE; |
390 | bnx2i_ep->ep_iscsi_cid = (u16) -1; | ||
390 | bnx2i_ep->hba = hba; | 391 | bnx2i_ep->hba = hba; |
391 | bnx2i_ep->hba_age = hba->age; | 392 | bnx2i_ep->hba_age = hba->age; |
392 | hba->ofld_conns_active++; | 393 | hba->ofld_conns_active++; |
@@ -1681,8 +1682,6 @@ static struct iscsi_endpoint *bnx2i_ep_connect(struct Scsi_Host *shost, | |||
1681 | goto net_if_down; | 1682 | goto net_if_down; |
1682 | } | 1683 | } |
1683 | 1684 | ||
1684 | bnx2i_ep->state = EP_STATE_IDLE; | ||
1685 | bnx2i_ep->ep_iscsi_cid = (u16) -1; | ||
1686 | bnx2i_ep->num_active_cmds = 0; | 1685 | bnx2i_ep->num_active_cmds = 0; |
1687 | iscsi_cid = bnx2i_alloc_iscsi_cid(hba); | 1686 | iscsi_cid = bnx2i_alloc_iscsi_cid(hba); |
1688 | if (iscsi_cid == -1) { | 1687 | if (iscsi_cid == -1) { |