struct srb_iocb *lio = &sp->u.iocb_cmd;
 
        logio->entry_type = LOGINOUT_PORT_IOCB_TYPE;
+       logio->control_flags = cpu_to_le16(LCF_COMMAND_PLOGI);
+
        if (lio->u.logio.flags & SRB_LOGIN_PRLI_ONLY) {
                logio->control_flags = cpu_to_le16(LCF_COMMAND_PRLI);
        } else {
        sp->fcport = fcport;
 
        elsio->timeout = qla2x00_els_dcmd2_iocb_timeout;
-       init_completion(&elsio->u.els_plogi.comp);
        if (wait)
                sp->flags = SRB_WAKEUP_ON_COMP;
 
        elsio->u.els_plogi.tx_size = elsio->u.els_plogi.rx_size = DMA_POOL_SIZE;
 
        ptr = elsio->u.els_plogi.els_plogi_pyld =
-           dma_alloc_coherent(&ha->pdev->dev, DMA_POOL_SIZE,
+           dma_alloc_coherent(&ha->pdev->dev, elsio->u.els_plogi.tx_size,
                &elsio->u.els_plogi.els_plogi_pyld_dma, GFP_KERNEL);
 
        if (!elsio->u.els_plogi.els_plogi_pyld) {
        }
 
        resp_ptr = elsio->u.els_plogi.els_resp_pyld =
-           dma_alloc_coherent(&ha->pdev->dev, DMA_POOL_SIZE,
+           dma_alloc_coherent(&ha->pdev->dev, elsio->u.els_plogi.rx_size,
                &elsio->u.els_plogi.els_resp_pyld_dma, GFP_KERNEL);
 
        if (!elsio->u.els_plogi.els_resp_pyld) {
            (uint8_t *)elsio->u.els_plogi.els_plogi_pyld,
            sizeof(*elsio->u.els_plogi.els_plogi_pyld));
 
+       init_completion(&elsio->u.els_plogi.comp);
        rval = qla2x00_start_sp(sp);
        if (rval != QLA_SUCCESS) {
                rval = QLA_FUNCTION_FAILED;