scsi: mpi3mr: Fix memory leaks in mpi3mr_init_ioc()

[ Upstream commit c798304470 ]

Don't allocate memory again when IOC is being reinitialized.

Fixes: fe6db61515 ("scsi: mpi3mr: Handle offline FW activation in graceful manner")
Signed-off-by: Tomas Henzl <thenzl@redhat.com>
Link: https://lore.kernel.org/r/20230302234336.25456-6-thenzl@redhat.com
Acked-by: Sathya Prakash Veerichetty <sathya.prakash@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Tomas Henzl
2023-03-03 00:43:35 +01:00
committed by Greg Kroah-Hartman
parent 705097d52a
commit 5aab9342f1

View File

@ -3814,29 +3814,34 @@ retry_init:
mpi3mr_print_ioc_info(mrioc); mpi3mr_print_ioc_info(mrioc);
dprint_init(mrioc, "allocating config page buffers\n");
mrioc->cfg_page = dma_alloc_coherent(&mrioc->pdev->dev,
MPI3MR_DEFAULT_CFG_PAGE_SZ, &mrioc->cfg_page_dma, GFP_KERNEL);
if (!mrioc->cfg_page) { if (!mrioc->cfg_page) {
retval = -1; dprint_init(mrioc, "allocating config page buffers\n");
goto out_failed_noretry; mrioc->cfg_page_sz = MPI3MR_DEFAULT_CFG_PAGE_SZ;
mrioc->cfg_page = dma_alloc_coherent(&mrioc->pdev->dev,
mrioc->cfg_page_sz, &mrioc->cfg_page_dma, GFP_KERNEL);
if (!mrioc->cfg_page) {
retval = -1;
goto out_failed_noretry;
}
} }
mrioc->cfg_page_sz = MPI3MR_DEFAULT_CFG_PAGE_SZ; if (!mrioc->init_cmds.reply) {
retval = mpi3mr_alloc_reply_sense_bufs(mrioc);
retval = mpi3mr_alloc_reply_sense_bufs(mrioc); if (retval) {
if (retval) { ioc_err(mrioc,
ioc_err(mrioc, "%s :Failed to allocated reply sense buffers %d\n",
"%s :Failed to allocated reply sense buffers %d\n", __func__, retval);
__func__, retval); goto out_failed_noretry;
goto out_failed_noretry; }
} }
retval = mpi3mr_alloc_chain_bufs(mrioc); if (!mrioc->chain_sgl_list) {
if (retval) { retval = mpi3mr_alloc_chain_bufs(mrioc);
ioc_err(mrioc, "Failed to allocated chain buffers %d\n", if (retval) {
retval); ioc_err(mrioc, "Failed to allocated chain buffers %d\n",
goto out_failed_noretry; retval);
goto out_failed_noretry;
}
} }
retval = mpi3mr_issue_iocinit(mrioc); retval = mpi3mr_issue_iocinit(mrioc);