]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
scsi: qla2xxx: Use an on-stack completion in qla24xx_control_vp()
authorBart Van Assche <bvanassche@acm.org>
Wed, 17 Apr 2019 21:44:34 +0000 (14:44 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Mon, 29 Apr 2019 21:24:51 +0000 (17:24 -0400)
This patch reduces the size of struct srb.

Cc: Himanshu Madhani <hmadhani@marvell.com>
Cc: Giridhar Malavali <gmalavali@marvell.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Acked-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_iocb.c
drivers/scsi/qla2xxx/qla_mid.c

index c9f0169b21ea86ebaf6a4669b5206c8a4e150da7..6dd2d41713c9d10b140b236a99920e146912284e 100644 (file)
@@ -545,7 +545,7 @@ typedef struct srb {
        u32 gen2;       /* scratch */
        int rc;
        int retry_count;
-       struct completion comp;
+       struct completion *comp;
        wait_queue_head_t *cwaitq;
        union {
                struct srb_iocb iocb_cmd;
index 7ab157c079caa2d3775abb7969c5d1fa46235e42..60f6685cb3424a962bc22eabaff0f0b38bfd7595 100644 (file)
@@ -2570,7 +2570,6 @@ void qla2x00_init_timer(srb_t *sp, unsigned long tmo)
        timer_setup(&sp->u.iocb_cmd.timer, qla2x00_sp_timeout, 0);
        sp->u.iocb_cmd.timer.expires = jiffies + tmo * HZ;
        sp->free = qla2x00_sp_free;
-       init_completion(&sp->comp);
        if (IS_QLAFX00(sp->vha->hw) && sp->type == SRB_FXIOCB_DCMD)
                init_completion(&sp->u.iocb_cmd.u.fxiocb.fxiocb_comp);
        add_timer(&sp->u.iocb_cmd.timer);
index 099d8e9851cb616608f10b82111402127dfff38d..b2977e49356ba1b0b1f4d8aaa4e8f433ddaa7712 100644 (file)
@@ -905,7 +905,8 @@ static void qla_ctrlvp_sp_done(void *s, int res)
 {
        struct srb *sp = s;
 
-       complete(&sp->comp);
+       if (sp->comp)
+               complete(sp->comp);
        /* don't free sp here. Let the caller do the free */
 }
 
@@ -922,6 +923,7 @@ int qla24xx_control_vp(scsi_qla_host_t *vha, int cmd)
        struct qla_hw_data *ha = vha->hw;
        int     vp_index = vha->vp_idx;
        struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev);
+       DECLARE_COMPLETION_ONSTACK(comp);
        srb_t *sp;
 
        ql_dbg(ql_dbg_vport, vha, 0x10c1,
@@ -936,6 +938,7 @@ int qla24xx_control_vp(scsi_qla_host_t *vha, int cmd)
 
        sp->type = SRB_CTRL_VP;
        sp->name = "ctrl_vp";
+       sp->comp = &comp;
        sp->done = qla_ctrlvp_sp_done;
        sp->u.iocb_cmd.timeout = qla2x00_async_iocb_timeout;
        qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha) + 2);
@@ -953,7 +956,9 @@ int qla24xx_control_vp(scsi_qla_host_t *vha, int cmd)
        ql_dbg(ql_dbg_vport, vha, 0x113f, "%s hndl %x submitted\n",
            sp->name, sp->handle);
 
-       wait_for_completion(&sp->comp);
+       wait_for_completion(&comp);
+       sp->comp = NULL;
+
        rval = sp->rc;
        switch (rval) {
        case QLA_FUNCTION_TIMEOUT: