fix sparse warnings "Using plain integer as NULL pointer"
Use error labels for error handling
Signed-off-by: Joe Perches <[EMAIL PROTECTED]>
---
drivers/scsi/lpfc/lpfc_els.c | 64 +++++++++++++++++++++-------------------
drivers/scsi/lpfc/lpfc_init.c | 64 +++++++++++++++++++---------------------
drivers/scsi/lpfc/lpfc_mbox.c | 60 ++++++++++++++++++++++++--------------
drivers/scsi/lpfc/lpfc_sli.c | 6 ++--
4 files changed, 105 insertions(+), 89 deletions(-)
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index 8085900..70dec81 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -109,30 +109,23 @@ lpfc_prep_els_iocb(struct lpfc_vport *vport, uint8_t
expectRsp,
/* fill in BDEs for command */
/* Allocate buffer for command payload */
- if (((pcmd = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL)) == 0) ||
- ((pcmd->virt = lpfc_mbuf_alloc(phba,
- MEM_PRI, &(pcmd->phys))) == 0)) {
- kfree(pcmd);
-
- lpfc_sli_release_iocbq(phba, elsiocb);
- return NULL;
- }
+ pcmd = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
+ if (!pcmd)
+ goto out;
+ pcmd->virt = lpfc_mbuf_alloc(phba, MEM_PRI, &(pcmd->phys));
+ if (!pcmd->virt)
+ goto out1;
INIT_LIST_HEAD(&pcmd->list);
/* Allocate buffer for response payload */
if (expectRsp) {
prsp = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
- if (prsp)
- prsp->virt = lpfc_mbuf_alloc(phba, MEM_PRI,
- &prsp->phys);
- if (prsp == 0 || prsp->virt == 0) {
- kfree(prsp);
- lpfc_mbuf_free(phba, pcmd->virt, pcmd->phys);
- kfree(pcmd);
- lpfc_sli_release_iocbq(phba, elsiocb);
- return NULL;
- }
+ if (!prsp)
+ goto out2;
+ prsp->virt = lpfc_mbuf_alloc(phba, MEM_PRI, &prsp->phys);
+ if (!prsp->virt)
+ goto out3;
INIT_LIST_HEAD(&prsp->list);
} else {
prsp = NULL;
@@ -140,18 +133,12 @@ lpfc_prep_els_iocb(struct lpfc_vport *vport, uint8_t
expectRsp,
/* Allocate buffer for Buffer ptr list */
pbuflist = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
- if (pbuflist)
- pbuflist->virt = lpfc_mbuf_alloc(phba, MEM_PRI,
- &pbuflist->phys);
- if (pbuflist == 0 || pbuflist->virt == 0) {
- lpfc_sli_release_iocbq(phba, elsiocb);
- lpfc_mbuf_free(phba, pcmd->virt, pcmd->phys);
- lpfc_mbuf_free(phba, prsp->virt, prsp->phys);
- kfree(pcmd);
- kfree(prsp);
- kfree(pbuflist);
- return NULL;
- }
+ if (!pbuflist)
+ goto out4;
+
+ pbuflist->virt = lpfc_mbuf_alloc(phba, MEM_PRI, &pbuflist->phys);
+ if (!pbuflist->virt)
+ goto out5;
INIT_LIST_HEAD(&pbuflist->list);
@@ -222,6 +209,23 @@ lpfc_prep_els_iocb(struct lpfc_vport *vport, uint8_t
expectRsp,
cmdSize);
}
return elsiocb;
+
+out5:
+ kfree(pbuflist);
+out4:
+ if (prsp) {
+ lpfc_mbuf_free(phba, prsp->virt, prsp->phys);
+ kfree(prsp->virt);
+ }
+out3:
+ kfree(prsp);
+out2:
+ lpfc_mbuf_free(phba, pcmd->virt, pcmd->phys);
+out1:
+ kfree(pcmd);
+out:
+ lpfc_sli_release_iocbq(phba, elsiocb);
+ return NULL;
}
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index ecebdfa..34013fa 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -1061,7 +1061,7 @@ lpfc_get_hba_model_desc(struct lpfc_hba *phba, uint8_t
*mdp, uint8_t *descp)
/* */
/* This routine will post count buffers to the */
/* ring with the QUE_RING_BUF_CN command. This */
-/* allows 3 buffers / command to be posted. */
+/* allows 2 buffers / command to be posted. */
/* Returns the number of buffers NOT posted. */
/**************************************************/
int
@@ -1076,43 +1076,30 @@ lpfc_post_buffer(struct lpfc_hba *phba, struct
lpfc_sli_ring *pring, int cnt,
/* While there are buffers to post */
while (cnt > 0) {
- /* Allocate buffer for command iocb */
+ /* Allocate buffer for command iocb */
iocb = lpfc_sli_get_iocbq(phba);
- if (iocb == NULL) {
- pring->missbufcnt = cnt;
- return cnt;
- }
+ if (!iocb)
+ goto out;
icmd = &iocb->iocb;
/* 2 buffers can be posted per command */
/* Allocate buffer to post */
mp1 = kmalloc(sizeof (struct lpfc_dmabuf), GFP_KERNEL);
- if (mp1)
- mp1->virt = lpfc_mbuf_alloc(phba, MEM_PRI,
- &mp1->phys);
- if (mp1 == 0 || mp1->virt == 0) {
- kfree(mp1);
- lpfc_sli_release_iocbq(phba, iocb);
- pring->missbufcnt = cnt;
- return cnt;
- }
+ if (!mp1)
+ goto out1;
+ mp1->virt = lpfc_mbuf_alloc(phba, MEM_PRI, &mp1->phys);
+ if (!mp1->virt)
+ goto out2;
INIT_LIST_HEAD(&mp1->list);
/* Allocate buffer to post */
if (cnt > 1) {
mp2 = kmalloc(sizeof (struct lpfc_dmabuf), GFP_KERNEL);
- if (mp2)
- mp2->virt = lpfc_mbuf_alloc(phba, MEM_PRI,
- &mp2->phys);
- if (mp2 == 0 || mp2->virt == 0) {
- kfree(mp2);
- lpfc_mbuf_free(phba, mp1->virt, mp1->phys);
- kfree(mp1);
- lpfc_sli_release_iocbq(phba, iocb);
- pring->missbufcnt = cnt;
- return cnt;
- }
-
+ if (!mp2)
+ goto out3;
+ mp2->virt = lpfc_mbuf_alloc(phba, MEM_PRI, &mp2->phys);
+ if (!mp2->virt)
+ goto out4;
INIT_LIST_HEAD(&mp2->list);
} else {
mp2 = NULL;
@@ -1135,17 +1122,12 @@ lpfc_post_buffer(struct lpfc_hba *phba, struct
lpfc_sli_ring *pring, int cnt,
icmd->ulpLe = 1;
if (lpfc_sli_issue_iocb(phba, pring, iocb, 0) == IOCB_ERROR) {
- lpfc_mbuf_free(phba, mp1->virt, mp1->phys);
- kfree(mp1);
cnt++;
if (mp2) {
- lpfc_mbuf_free(phba, mp2->virt, mp2->phys);
- kfree(mp2);
cnt++;
+ goto out5;
}
- lpfc_sli_release_iocbq(phba, iocb);
- pring->missbufcnt = cnt;
- return cnt;
+ goto out3;
}
lpfc_sli_ringpostbuf_put(phba, pring, mp1);
if (mp2)
@@ -1153,6 +1135,20 @@ lpfc_post_buffer(struct lpfc_hba *phba, struct
lpfc_sli_ring *pring, int cnt,
}
pring->missbufcnt = 0;
return 0;
+
+out5:
+ lpfc_mbuf_free(phba, mp2->virt, mp2->phys);
+out4:
+ kfree(mp2);
+out3:
+ lpfc_mbuf_free(phba, mp1->virt, mp1->phys);
+out2:
+ kfree(mp1);
+out1:
+ lpfc_sli_release_iocbq(phba, iocb);
+out:
+ pring->missbufcnt = cnt;
+ return cnt;
}
/************************************************************************/
diff --git a/drivers/scsi/lpfc/lpfc_mbox.c b/drivers/scsi/lpfc/lpfc_mbox.c
index a592733..9322761 100644
--- a/drivers/scsi/lpfc/lpfc_mbox.c
+++ b/drivers/scsi/lpfc/lpfc_mbox.c
@@ -122,7 +122,7 @@ lpfc_read_la(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmb,
struct lpfc_dmabuf *mp)
*/
pmb->context1 = (uint8_t *) mp;
mb->mbxOwner = OWN_HOST;
- return (0);
+ return 0;
}
/**********************************************/
@@ -270,15 +270,13 @@ lpfc_read_sparam(struct lpfc_hba *phba, LPFC_MBOXQ_t
*pmb, int vpi)
/* Get a buffer to hold the HBAs Service Parameters */
- if (((mp = kmalloc(sizeof (struct lpfc_dmabuf), GFP_KERNEL)) == 0) ||
- ((mp->virt = lpfc_mbuf_alloc(phba, 0, &(mp->phys))) == 0)) {
- kfree(mp);
- mb->mbxCommand = MBX_READ_SPARM64;
- /* READ_SPARAM: no buffers */
- lpfc_printf_log(phba, KERN_WARNING, LOG_MBOX,
- "0301 READ_SPARAM: no buffers\n");
- return (1);
- }
+ mp = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
+ if (!mp)
+ goto out;
+ mp->virt = lpfc_mbuf_alloc(phba, 0, &(mp->phys));
+ if (!mp->virt)
+ goto out1;
+
INIT_LIST_HEAD(&mp->list);
mb->mbxCommand = MBX_READ_SPARM64;
mb->un.varRdSparm.un.sp64.tus.f.bdeSize = sizeof (struct serv_parm);
@@ -289,7 +287,17 @@ lpfc_read_sparam(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb,
int vpi)
/* save address for completion */
pmb->context1 = mp;
- return (0);
+ return 0;
+
+out1:
+ kfree(mp);
+out:
+ mb->mbxCommand = MBX_READ_SPARM64;
+ /* READ_SPARAM: no buffers */
+ lpfc_printf_log(phba, KERN_WARNING, LOG_MBOX,
+ "0301 READ_SPARAM: no buffers\n");
+ return 1;
+
}
/********************************************/
@@ -369,16 +377,13 @@ lpfc_reg_login(struct lpfc_hba *phba, uint16_t vpi,
uint32_t did,
mb->mbxOwner = OWN_HOST;
/* Get a buffer to hold NPorts Service Parameters */
- if (((mp = kmalloc(sizeof (struct lpfc_dmabuf), GFP_KERNEL)) == NULL) ||
- ((mp->virt = lpfc_mbuf_alloc(phba, 0, &(mp->phys))) == 0)) {
- kfree(mp);
- mb->mbxCommand = MBX_REG_LOGIN64;
- /* REG_LOGIN: no buffers */
- lpfc_printf_log(phba, KERN_WARNING, LOG_MBOX,
- "0302 REG_LOGIN: no buffers, VPI:%d DID:x%x, "
- "flag x%x\n", vpi, did, flag);
- return (1);
- }
+ mp = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
+ if (!mp)
+ goto out;
+ mp->virt = lpfc_mbuf_alloc(phba, 0, &(mp->phys));
+ if (!mp->virt)
+ goto out1;
+
INIT_LIST_HEAD(&mp->list);
sparam = mp->virt;
@@ -393,7 +398,18 @@ lpfc_reg_login(struct lpfc_hba *phba, uint16_t vpi,
uint32_t did,
mb->un.varRegLogin.un.sp64.addrHigh = putPaddrHigh(mp->phys);
mb->un.varRegLogin.un.sp64.addrLow = putPaddrLow(mp->phys);
- return (0);
+ return 0;
+
+out1:
+ kfree(mp);
+out:
+ mb->mbxCommand = MBX_REG_LOGIN64;
+ /* REG_LOGIN: no buffers */
+ lpfc_printf_log(phba, KERN_WARNING, LOG_MBOX,
+ "0302 REG_LOGIN: no buffers, VPI:%d DID:x%x, "
+ "flag x%x\n", vpi, did, flag);
+ return 1;
+
}
/**********************************************/
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index ce348c5..d60bc63 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -1921,8 +1921,8 @@ lpfc_sli_brdkill(struct lpfc_hba *phba)
"0329 Kill HBA Data: x%x x%x\n",
phba->pport->port_state, psli->sli_flag);
- if ((pmb = (LPFC_MBOXQ_t *) mempool_alloc(phba->mbox_mem_pool,
- GFP_KERNEL)) == 0)
+ pmb = (LPFC_MBOXQ_t *) mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
+ if (!pmb)
return 1;
/* Disable the error attention */
@@ -3699,7 +3699,7 @@ lpfc_sli_issue_mbox_wait(struct lpfc_hba *phba,
LPFC_MBOXQ_t *pmboxq,
unsigned long flag;
/* The caller must leave context1 empty. */
- if (pmboxq->context1 != 0)
+ if (pmboxq->context1)
return MBX_NOT_FINISHED;
/* setup wake call as IOCB callback */
-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html