Reduce code duplication by introducing a function that frees the
memory used for PLOGIN.

Cc: Himanshu Madhani <hmadh...@marvell.com>
Cc: Giridhar Malavali <gmalav...@marvell.com>
Signed-off-by: Bart Van Assche <bvanass...@acm.org>
---
 drivers/scsi/qla2xxx/qla_def.h  |  2 +-
 drivers/scsi/qla2xxx/qla_gbl.h  |  2 ++
 drivers/scsi/qla2xxx/qla_gs.c   | 12 +---------
 drivers/scsi/qla2xxx/qla_iocb.c | 40 ++++++++++++++-------------------
 4 files changed, 21 insertions(+), 35 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index c787304347d7..8edca0a00586 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -395,7 +395,7 @@ struct srb_iocb {
                        struct els_logo_payload *els_logo_pyld;
                        dma_addr_t els_logo_pyld_dma;
                } els_logo;
-               struct {
+               struct els_plogi {
 #define ELS_DCMD_PLOGI 0x3
                        uint32_t flags;
                        uint32_t els_cmd;
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
index a16c00b4773c..b2fb76cc1fef 100644
--- a/drivers/scsi/qla2xxx/qla_gbl.h
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
@@ -45,6 +45,8 @@ extern int qla2x00_local_device_login(scsi_qla_host_t *, 
fc_port_t *);
 
 extern int qla24xx_els_dcmd_iocb(scsi_qla_host_t *, int, port_id_t);
 extern int qla24xx_els_dcmd2_iocb(scsi_qla_host_t *, int, fc_port_t *, bool);
+extern void qla2x00_els_dcmd2_free(scsi_qla_host_t *vha,
+                                  struct els_plogi *els_plogi);
 
 extern void qla2x00_update_fcports(scsi_qla_host_t *);
 
diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
index 68f445dd0cde..24a80ab53db2 100644
--- a/drivers/scsi/qla2xxx/qla_gs.c
+++ b/drivers/scsi/qla2xxx/qla_gs.c
@@ -3142,17 +3142,7 @@ void qla24xx_sp_unmap(scsi_qla_host_t *vha, srb_t *sp)
 
        switch (sp->type) {
        case SRB_ELS_DCMD:
-               if (c->u.els_plogi.els_plogi_pyld)
-                       dma_free_coherent(&vha->hw->pdev->dev,
-                           c->u.els_plogi.tx_size,
-                           c->u.els_plogi.els_plogi_pyld,
-                           c->u.els_plogi.els_plogi_pyld_dma);
-
-               if (c->u.els_plogi.els_resp_pyld)
-                       dma_free_coherent(&vha->hw->pdev->dev,
-                           c->u.els_plogi.rx_size,
-                           c->u.els_plogi.els_resp_pyld,
-                           c->u.els_plogi.els_resp_pyld_dma);
+               qla2x00_els_dcmd2_free(vha, &c->u.els_plogi);
                break;
        case SRB_CT_PTHRU_CMD:
        default:
diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
index b6161dfc7527..14f58fb91814 100644
--- a/drivers/scsi/qla2xxx/qla_iocb.c
+++ b/drivers/scsi/qla2xxx/qla_iocb.c
@@ -2755,6 +2755,21 @@ qla2x00_els_dcmd2_iocb_timeout(void *data)
        sp->done(sp, QLA_FUNCTION_TIMEOUT);
 }
 
+void qla2x00_els_dcmd2_free(scsi_qla_host_t *vha, struct els_plogi *els_plogi)
+{
+       if (els_plogi->els_plogi_pyld)
+               dma_free_coherent(&vha->hw->pdev->dev,
+                                 els_plogi->tx_size,
+                                 els_plogi->els_plogi_pyld,
+                                 els_plogi->els_plogi_pyld_dma);
+
+       if (els_plogi->els_resp_pyld)
+               dma_free_coherent(&vha->hw->pdev->dev,
+                                 els_plogi->rx_size,
+                                 els_plogi->els_resp_pyld,
+                                 els_plogi->els_resp_pyld_dma);
+}
+
 static void
 qla2x00_els_dcmd2_sp_done(void *ptr, int res)
 {
@@ -2789,17 +2804,7 @@ qla2x00_els_dcmd2_sp_done(void *ptr, int res)
                if (!e) {
                        struct srb_iocb *elsio = &sp->u.iocb_cmd;
 
-                       if (elsio->u.els_plogi.els_plogi_pyld)
-                               dma_free_coherent(&sp->vha->hw->pdev->dev,
-                                   elsio->u.els_plogi.tx_size,
-                                   elsio->u.els_plogi.els_plogi_pyld,
-                                   elsio->u.els_plogi.els_plogi_pyld_dma);
-
-                       if (elsio->u.els_plogi.els_resp_pyld)
-                               dma_free_coherent(&sp->vha->hw->pdev->dev,
-                                   elsio->u.els_plogi.rx_size,
-                                   elsio->u.els_plogi.els_resp_pyld,
-                                   elsio->u.els_plogi.els_resp_pyld_dma);
+                       qla2x00_els_dcmd2_free(vha, &elsio->u.els_plogi);
                        sp->free(sp);
                        return;
                }
@@ -2899,18 +2904,7 @@ qla24xx_els_dcmd2_iocb(scsi_qla_host_t *vha, int 
els_opcode,
 
 out:
        fcport->flags &= ~(FCF_ASYNC_SENT);
-       if (elsio->u.els_plogi.els_plogi_pyld)
-               dma_free_coherent(&sp->vha->hw->pdev->dev,
-                   elsio->u.els_plogi.tx_size,
-                   elsio->u.els_plogi.els_plogi_pyld,
-                   elsio->u.els_plogi.els_plogi_pyld_dma);
-
-       if (elsio->u.els_plogi.els_resp_pyld)
-               dma_free_coherent(&sp->vha->hw->pdev->dev,
-                   elsio->u.els_plogi.rx_size,
-                   elsio->u.els_plogi.els_resp_pyld,
-                   elsio->u.els_plogi.els_resp_pyld_dma);
-
+       qla2x00_els_dcmd2_free(vha, &elsio->u.els_plogi);
        sp->free(sp);
 done:
        return rval;
-- 
2.22.0.rc1

Reply via email to