Skip to content

Commit c798304

Browse files
thenzlmartinkpetersen
authored andcommitted
scsi: mpi3mr: Fix memory leaks in mpi3mr_init_ioc()
Don't allocate memory again when IOC is being reinitialized. Fixes: fe6db61 ("scsi: mpi3mr: Handle offline FW activation in graceful manner") Signed-off-by: Tomas Henzl <[email protected]> Link: https://lore.kernel.org/r/[email protected] Acked-by: Sathya Prakash Veerichetty <[email protected]> Signed-off-by: Martin K. Petersen <[email protected]>
1 parent d4caa1a commit c798304

File tree

1 file changed

+23
-18
lines changed

1 file changed

+23
-18
lines changed

drivers/scsi/mpi3mr/mpi3mr_fw.c

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3837,29 +3837,34 @@ int mpi3mr_init_ioc(struct mpi3mr_ioc *mrioc)
38373837

38383838
mpi3mr_print_ioc_info(mrioc);
38393839

3840-
dprint_init(mrioc, "allocating config page buffers\n");
3841-
mrioc->cfg_page = dma_alloc_coherent(&mrioc->pdev->dev,
3842-
MPI3MR_DEFAULT_CFG_PAGE_SZ, &mrioc->cfg_page_dma, GFP_KERNEL);
38433840
if (!mrioc->cfg_page) {
3844-
retval = -1;
3845-
goto out_failed_noretry;
3841+
dprint_init(mrioc, "allocating config page buffers\n");
3842+
mrioc->cfg_page_sz = MPI3MR_DEFAULT_CFG_PAGE_SZ;
3843+
mrioc->cfg_page = dma_alloc_coherent(&mrioc->pdev->dev,
3844+
mrioc->cfg_page_sz, &mrioc->cfg_page_dma, GFP_KERNEL);
3845+
if (!mrioc->cfg_page) {
3846+
retval = -1;
3847+
goto out_failed_noretry;
3848+
}
38463849
}
38473850

3848-
mrioc->cfg_page_sz = MPI3MR_DEFAULT_CFG_PAGE_SZ;
3849-
3850-
retval = mpi3mr_alloc_reply_sense_bufs(mrioc);
3851-
if (retval) {
3852-
ioc_err(mrioc,
3853-
"%s :Failed to allocated reply sense buffers %d\n",
3854-
__func__, retval);
3855-
goto out_failed_noretry;
3851+
if (!mrioc->init_cmds.reply) {
3852+
retval = mpi3mr_alloc_reply_sense_bufs(mrioc);
3853+
if (retval) {
3854+
ioc_err(mrioc,
3855+
"%s :Failed to allocated reply sense buffers %d\n",
3856+
__func__, retval);
3857+
goto out_failed_noretry;
3858+
}
38563859
}
38573860

3858-
retval = mpi3mr_alloc_chain_bufs(mrioc);
3859-
if (retval) {
3860-
ioc_err(mrioc, "Failed to allocated chain buffers %d\n",
3861-
retval);
3862-
goto out_failed_noretry;
3861+
if (!mrioc->chain_sgl_list) {
3862+
retval = mpi3mr_alloc_chain_bufs(mrioc);
3863+
if (retval) {
3864+
ioc_err(mrioc, "Failed to allocated chain buffers %d\n",
3865+
retval);
3866+
goto out_failed_noretry;
3867+
}
38633868
}
38643869

38653870
retval = mpi3mr_issue_iocinit(mrioc);

0 commit comments

Comments
 (0)