[SCSI] bnx2i : Fix "cid #n not valid" issue
authorAnil Veerabhadrappa <anilgv@broadcom.com>
Thu, 30 Jul 2009 04:50:11 +0000 (21:50 -0700)
committerJames Bottomley <James.Bottomley@suse.de>
Sat, 22 Aug 2009 22:52:12 +0000 (17:52 -0500)
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>
drivers/scsi/bnx2i/bnx2i_iscsi.c

index 40120a2..9a7ba71 100644 (file)
@@ -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) {