int datasegcnt, protsegcnt, datadir = scsi_cmnd->sc_data_direction;
        int prot_group_type = 0;
        int fcpdl;
+       struct lpfc_vport *vport = phba->pport;
 
        /*
         * Start the lpfc command prep by bumping the bpl beyond fcp_cmnd
         */
        iocb_cmd->un.fcpi.fcpi_parm = fcpdl;
 
+       /*
+        * For First burst, we may need to adjust the initial transfer
+        * length for DIF
+        */
+       if (iocb_cmd->un.fcpi.fcpi_XRdy &&
+           (fcpdl < vport->cfg_first_burst_size))
+               iocb_cmd->un.fcpi.fcpi_XRdy = fcpdl;
+
        return 0;
 err:
        if (lpfc_cmd->seg_cnt)
        int datasegcnt, protsegcnt, datadir = scsi_cmnd->sc_data_direction;
        int prot_group_type = 0;
        int fcpdl;
+       struct lpfc_vport *vport = phba->pport;
 
        /*
         * Start the lpfc command prep by bumping the sgl beyond fcp_cmnd
         */
        iocb_cmd->un.fcpi.fcpi_parm = fcpdl;
 
+       /*
+        * For First burst, we may need to adjust the initial transfer
+        * length for DIF
+        */
+       if (iocb_cmd->un.fcpi.fcpi_XRdy &&
+           (fcpdl < vport->cfg_first_burst_size))
+               iocb_cmd->un.fcpi.fcpi_XRdy = fcpdl;
+
        /*
         * If the OAS driver feature is enabled and the lun is enabled for
         * OAS, set the oas iocb related flags.