diff options
author | Anil Veerabhadrappa <anilgv@broadcom.com> | 2009-07-30 08:50:11 +0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2009-08-23 02:52:12 +0400 |
commit | c19dcd011238118ad07d3ab7ed1bbc4916826324 (patch) | |
tree | 93c100d928f16f5ebd522e73c6ef43877f21a9a1 /drivers/scsi/bnx2i | |
parent | 534cc9c165017dd29ae0f4458832893dc8033c6f (diff) | |
download | linux-c19dcd011238118ad07d3ab7ed1bbc4916826324.tar.xz |
[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) bnx2i_ep = ep->dd_data; INIT_LIST_HEAD(&bnx2i_ep->link); bnx2i_ep->state = EP_STATE_IDLE; + bnx2i_ep->ep_iscsi_cid = (u16) -1; bnx2i_ep->hba = hba; bnx2i_ep->hba_age = hba->age; hba->ofld_conns_active++; @@ -1681,8 +1682,6 @@ static struct iscsi_endpoint *bnx2i_ep_connect(struct Scsi_Host *shost, goto net_if_down; } - bnx2i_ep->state = EP_STATE_IDLE; - bnx2i_ep->ep_iscsi_cid = (u16) -1; bnx2i_ep->num_active_cmds = 0; iscsi_cid = bnx2i_alloc_iscsi_cid(hba); if (iscsi_cid == -1) { |