pfc_host_stat->dumped_frames = stats->dumped_frames;
                pfc_host_stat->nos_count = stats->nos_rcvd;
        }
+       pfc_host_stat->fcp_input_megabytes = ha->qla_stats.input_bytes >> 20;
+       pfc_host_stat->fcp_output_megabytes = ha->qla_stats.output_bytes >> 20;
 
 done_free:
         dma_pool_free(ha->s_dma_pool, stats, stats_dma);
 
  * Returns the proper CF_* direction based on CDB.
  */
 static inline uint16_t
-qla2x00_get_cmd_direction(struct scsi_cmnd *cmd)
+qla2x00_get_cmd_direction(srb_t *sp)
 {
        uint16_t cflags;
 
        cflags = 0;
 
        /* Set transfer direction */
-       if (cmd->sc_data_direction == DMA_TO_DEVICE)
+       if (sp->cmd->sc_data_direction == DMA_TO_DEVICE) {
                cflags = CF_WRITE;
-       else if (cmd->sc_data_direction == DMA_FROM_DEVICE)
+               sp->fcport->ha->qla_stats.output_bytes +=
+                   scsi_bufflen(sp->cmd);
+       } else if (sp->cmd->sc_data_direction == DMA_FROM_DEVICE) {
                cflags = CF_READ;
+               sp->fcport->ha->qla_stats.input_bytes +=
+                   scsi_bufflen(sp->cmd);
+       }
        return (cflags);
 }
 
 
        ha = sp->ha;
 
-       cmd_pkt->control_flags |= cpu_to_le16(qla2x00_get_cmd_direction(cmd));
+       cmd_pkt->control_flags |= cpu_to_le16(qla2x00_get_cmd_direction(sp));
 
        /* Three DSDs are available in the Command Type 2 IOCB */
        avail_dsds = 3;
 
        ha = sp->ha;
 
-       cmd_pkt->control_flags |= cpu_to_le16(qla2x00_get_cmd_direction(cmd));
+       cmd_pkt->control_flags |= cpu_to_le16(qla2x00_get_cmd_direction(sp));
 
        /* Two DSDs are available in the Command Type 3 IOCB */
        avail_dsds = 2;
        ha = sp->ha;
 
        /* Set transfer direction */
-       if (cmd->sc_data_direction == DMA_TO_DEVICE)
+       if (cmd->sc_data_direction == DMA_TO_DEVICE) {
                cmd_pkt->task_mgmt_flags =
                    __constant_cpu_to_le16(TMF_WRITE_DATA);
-       else if (cmd->sc_data_direction == DMA_FROM_DEVICE)
+               sp->fcport->ha->qla_stats.output_bytes +=
+                   scsi_bufflen(sp->cmd);
+       } else if (cmd->sc_data_direction == DMA_FROM_DEVICE) {
                cmd_pkt->task_mgmt_flags =
                    __constant_cpu_to_le16(TMF_READ_DATA);
+               sp->fcport->ha->qla_stats.input_bytes +=
+                   scsi_bufflen(sp->cmd);
+       }
 
        /* One DSD is available in the Command Type 3 IOCB */
        avail_dsds = 1;