Skip to contentSkip to conversation

lpfc 10.4.8000.0: Fix locking issues with abort data paths

PATCH Applied James Smart 1 participant 1 message Sep 3, 2014

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 14/19 lpfc 10.4.8000.0: Fix locking issues with abort data paths

Fix locking issues with abort data paths

---
 drivers/scsi/lpfc/lpfc_scsi.c |  12 ++++-
 drivers/scsi/lpfc/lpfc_sli.c  | 118 +++++++++++++++++++++++++-----------------
 drivers/scsi/lpfc/lpfc_sli.h  |   1 +
 3 files changed, 83 insertions(+), 48 deletions(-)
drivers/scsi/lpfc/lpfc_scsi.c +11 -1
index 6094545..0f6be85 100644
@@ -3466,7 +3466,7 @@ lpfc_scsi_prep_dma_buf_s4(struct lpfc_hba *phba, struct lpfc_scsi_buf *lpfc_cmd)
 	 */
 	if ((phba->cfg_fof) && ((struct lpfc_device_data *)
 		scsi_cmnd->device->hostdata)->oas_enabled)
-		lpfc_cmd->cur_iocbq.iocb_flag |= LPFC_IO_OAS;
+		lpfc_cmd->cur_iocbq.iocb_flag |= (LPFC_IO_OAS | LPFC_IO_FOF);
 	return 0;
 }
 
@@ -3606,6 +3606,14 @@ lpfc_bg_scsi_prep_dma_buf_s4(struct lpfc_hba *phba,
 	 */
 	iocb_cmd->un.fcpi.fcpi_parm = fcpdl;
 
+	/*
+	 * If the OAS driver feature is enabled and the lun is enabled for
+	 * OAS, set the oas iocb related flags.
+	 */
+	if ((phba->cfg_fof) && ((struct lpfc_device_data *)
+		scsi_cmnd->device->hostdata)->oas_enabled)
+		lpfc_cmd->cur_iocbq.iocb_flag |= (LPFC_IO_OAS | LPFC_IO_FOF);
+
 	return 0;
 err:
 	if (lpfc_cmd->seg_cnt)
@@ -4876,6 +4884,8 @@ lpfc_abort_handler(struct scsi_cmnd *cmnd)
 	/* ABTS WQE must go to the same WQ as the WQE to be aborted */
 	abtsiocb->fcp_wqidx = iocb->fcp_wqidx;
 	abtsiocb->iocb_flag |= LPFC_USE_FCPWQIDX;
+	if (iocb->iocb_flag & LPFC_IO_FOF)
+		abtsiocb->iocb_flag |= LPFC_IO_FOF;
 
 	if (lpfc_is_link_up(phba))
 		icmd->ulpCommand = CMD_ABORT_XRI_CN;
drivers/scsi/lpfc/lpfc_sli.c +71 -47

168 lines not on this page · raw message

drivers/scsi/lpfc/lpfc_sli.h +1 -0
index edb4883..4a01452 100644
@@ -79,6 +79,7 @@ struct lpfc_iocbq {
 #define LPFC_FIP_ELS_ID_SHIFT	14
 
 #define LPFC_IO_OAS		0x10000 /* OAS FCP IO */
+#define LPFC_IO_FOF		0x20000 /* FOF FCP IO */
 
 	uint32_t drvrTimeout;	/* driver timeout in seconds */
 	uint32_t fcp_wqidx;	/* index to FCP work queue */
Signature · 1 line
1.7.11.7