return;
        }
 
-       vha = sp->vha;
+       vha = sp->fcport->vha;
        req = sp->que;
 
        cmd_pkt->control_flags |= cpu_to_le16(qla2x00_get_cmd_direction(sp));
                return;
        }
 
-       vha = sp->vha;
+       vha = sp->fcport->vha;
        req = sp->que;
 
        cmd_pkt->control_flags |= cpu_to_le16(qla2x00_get_cmd_direction(sp));
 
        /* Setup device pointers. */
        ret = 0;
-       vha = sp->vha;
+       vha = sp->fcport->vha;
        ha = vha->hw;
        reg = &ha->iobase->isp;
        cmd = sp->cmd;
        /* Build command packet */
        req->current_outstanding_cmd = handle;
        req->outstanding_cmds[handle] = sp;
-       sp->vha = vha;
        sp->que = req;
        sp->cmd->host_scribble = (unsigned char *)(unsigned long)handle;
        req->cnt -= req_cnt;
                return;
        }
 
-       vha = sp->vha;
+       vha = sp->fcport->vha;
        req = sp->que;
 
        /* Set transfer direction */
        struct req_que *req = NULL;
        struct rsp_que *rsp = NULL;
        struct scsi_cmnd *cmd = sp->cmd;
-       struct scsi_qla_host *vha = sp->vha;
+       struct scsi_qla_host *vha = sp->fcport->vha;
        struct qla_hw_data *ha = vha->hw;
        uint16_t que_id;
 
        /* Build command packet. */
        req->current_outstanding_cmd = handle;
        req->outstanding_cmds[handle] = sp;
-       sp->vha = vha;
        sp->cmd->host_scribble = (unsigned char *)(unsigned long)handle;
        req->cnt -= req_cnt;
 
 
        mcp->mb[7] = LSW(MSD(rsp->dma));
        mcp->mb[5] = rsp->length;
        mcp->mb[11] = rsp->vp_idx;
-       mcp->mb[14] = rsp->msix->vector;
+       mcp->mb[14] = rsp->msix->entry;
        mcp->mb[13] = rsp->rid;
 
        reg = (struct device_reg_25xxmq *)((void *)(ha->mqiobase) +
 
        req->vp_idx = vp_idx;
        req->qos = qos;
 
-       if (ha->rsp_q_map[rsp_que])
+       if (ha->rsp_q_map[rsp_que]) {
                req->rsp = ha->rsp_q_map[rsp_que];
+               req->rsp->req = req;
+       }
        /* Use alternate PCI bus number */
        if (MSB(req->rid))
                options |= BIT_4;
 
        if (!sp)
                return sp;
 
-       sp->vha = vha;
        sp->fcport = fcport;
        sp->cmd = cmd;
        sp->que = ha->req_q_map[0];
                        continue;
                for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) {
                        sp = req->outstanding_cmds[cnt];
-                       if (sp && sp->vha == vha) {
+                       if (sp && sp->fcport->vha == vha) {
                                req->outstanding_cmds[cnt] = NULL;
                                sp->cmd->result = res;
                                qla2x00_sp_compl(ha, sp);