lpfc 8.1.7 : Consolidate dma buf cleanup into a separate function
Subsystems (2)
PATCH 8/15 lpfc 8.1.7 : Consolidate dma buf cleanup into a separate function
Consolidate dma buf cleanup into a separate function
Signed-off-by James Smart <[email protected]>
drivers/scsi/lpfc/lpfc_scsi.c +24 -16
@@ -153,22 +153,6 @@ static void lpfc_release_scsi_buf(struct lpfc_hba * phba, struct lpfc_scsi_buf * psb) { unsigned long iflag = 0; -/* -* There are only two special cases to consider. (1) the scsi command -* requested scatter-gather usage or (2) the scsi command allocated -* a request buffer, but did not request use_sg. There is a third -* case, but it does not require resource deallocation. -*/ -if ((psb->seg_cnt >0 ) && (psb->pCmd->use_sg)) { -dma_unmap_sg (&phba->pcidev->dev, psb->pCmd->request_buffer, - psb->seg_cnt, psb->pCmd->sc_data_direction); - }else { -if ((psb->nonsg_phys) && (psb->pCmd->request_bufflen)) { -dma_unmap_single (&phba->pcidev->dev, psb->nonsg_phys, - psb->pCmd->request_bufflen, - psb->pCmd->sc_data_direction); - } - }spin_lock_irqsave (&phba->scsi_buf_list_lock, iflag); psb->pCmd =NULL ;
@@ -282,6 +266,27 @@ lpfc_scsi_prep_dma_buf(struct lpfc_hba * }static void +lpfc_scsi_unprep_dma_buf (struct lpfc_hba * phba,struct lpfc_scsi_buf * psb) +{ +/* +* There are only two special cases to consider. (1) the scsi command +* requested scatter-gather usage or (2) the scsi command allocated +* a request buffer, but did not request use_sg. There is a third +* case, but it does not require resource deallocation. +*/ +if ((psb->seg_cnt >0 ) && (psb->pCmd->use_sg)) { +dma_unmap_sg (&phba->pcidev->dev, psb->pCmd->request_buffer, + psb->seg_cnt, psb->pCmd->sc_data_direction); + }else { +if ((psb->nonsg_phys) && (psb->pCmd->request_bufflen)) { +dma_unmap_single (&phba->pcidev->dev, psb->nonsg_phys, + psb->pCmd->request_bufflen, + psb->pCmd->sc_data_direction); + } + } +} + +static void lpfc_handle_fcp_err (struct lpfc_scsi_buf *lpfc_cmd) {struct scsi_cmnd *cmnd = lpfc_cmd->pCmd;
@@ -454,6 +459,7 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba cmd->scsi_done (cmd);if (phba->cfg_poll &ENABLE_FCP_RING_POLLING ) { +lpfc_scsi_unprep_dma_buf (phba, lpfc_cmd);lpfc_release_scsi_buf (phba, lpfc_cmd);return ; }
@@ -511,6 +517,7 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba } } +lpfc_scsi_unprep_dma_buf (phba, lpfc_cmd);lpfc_release_scsi_buf (phba, lpfc_cmd); }
@@ -822,6 +829,7 @@ lpfc_queuecommand(struct scsi_cmnd *cmndreturn 0 ; out_host_busy_free_buf: +lpfc_scsi_unprep_dma_buf (phba, lpfc_cmd);lpfc_release_scsi_buf (phba, lpfc_cmd); out_host_busy:return SCSI_MLQUEUE_HOST_BUSY ;