OSDN Git Service

scsi: qla2xxx: Introduce qla2x00_els_dcmd2_free()
authorBart Van Assche <bvanassche@acm.org>
Fri, 9 Aug 2019 03:02:16 +0000 (20:02 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 13 Aug 2019 01:34:09 +0000 (21:34 -0400)
This patch reduces code duplication.

Cc: Himanshu Madhani <hmadhani@marvell.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Tested-by: Himanshu Madhani <hmadhani@marvell.com>
Reviewed-by: Himanshu Madhani <hmadhani@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qla2xxx/qla_def.h
drivers/scsi/qla2xxx/qla_gbl.h
drivers/scsi/qla2xxx/qla_gs.c
drivers/scsi/qla2xxx/qla_iocb.c

index a971d42..873a6ae 100644 (file)
@@ -455,7 +455,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;
index 3f313ea..d11416d 100644 (file)
@@ -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 *);
 
index 0e1df82..bf8b30c 100644 (file)
@@ -3119,17 +3119,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:
index 39c7738..7021fbe 100644 (file)
@@ -2717,6 +2717,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(srb_t *sp, int res)
 {
        fc_port_t *fcport = sp->fcport;
@@ -2748,17 +2763,7 @@ static void qla2x00_els_dcmd2_sp_done(srb_t *sp, 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;
                }
@@ -2858,18 +2863,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;