hpsa: fix memory leak in hpsa_alloc_cmd_pool
Partial allocation failure wasn't handled correctly Reviewed-by: Scott Teel <scott.teel@pmcs.com> Signed-off-by: Robert Elliott <elliott@hp.com> Signed-off-by: Don Brace <don.brace@pmcs.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
3d4e6af8af
commit
2c14334278
|
@ -211,6 +211,7 @@ static struct CommandList *cmd_special_alloc(struct ctlr_info *h);
|
||||||
static int fill_cmd(struct CommandList *c, u8 cmd, struct ctlr_info *h,
|
static int fill_cmd(struct CommandList *c, u8 cmd, struct ctlr_info *h,
|
||||||
void *buff, size_t size, u16 page_code, unsigned char *scsi3addr,
|
void *buff, size_t size, u16 page_code, unsigned char *scsi3addr,
|
||||||
int cmd_type);
|
int cmd_type);
|
||||||
|
static void hpsa_free_cmd_pool(struct ctlr_info *h);
|
||||||
#define VPD_PAGE (1 << 8)
|
#define VPD_PAGE (1 << 8)
|
||||||
|
|
||||||
static int hpsa_scsi_queue_command(struct Scsi_Host *h, struct scsi_cmnd *cmd);
|
static int hpsa_scsi_queue_command(struct Scsi_Host *h, struct scsi_cmnd *cmd);
|
||||||
|
@ -6471,9 +6472,12 @@ static int hpsa_allocate_cmd_pool(struct ctlr_info *h)
|
||||||
|| (h->cmd_pool == NULL)
|
|| (h->cmd_pool == NULL)
|
||||||
|| (h->errinfo_pool == NULL)) {
|
|| (h->errinfo_pool == NULL)) {
|
||||||
dev_err(&h->pdev->dev, "out of memory in %s", __func__);
|
dev_err(&h->pdev->dev, "out of memory in %s", __func__);
|
||||||
return -ENOMEM;
|
goto clean_up;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
clean_up:
|
||||||
|
hpsa_free_cmd_pool(h);
|
||||||
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hpsa_free_cmd_pool(struct ctlr_info *h)
|
static void hpsa_free_cmd_pool(struct ctlr_info *h)
|
||||||
|
|
Loading…
Reference in New Issue