Browse Source

lpfc: call lpfc_sli_validate_fcp_iocb() with the hbalock held

Call lpfc_sli_validate_fcp_iocb() with the hbalock held, as the pointer
to iocbq is not guaranteed to still be valid after looking it up.

Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: Laurence Oberman <loberman@redhat.com>
Acked-by: James Smart <james.smart@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Johannes Thumshirn 9 năm trước cách đây
mục cha
commit
31979008fd
1 tập tin đã thay đổi với 2 bổ sung0 xóa
  1. 2 0
      drivers/scsi/lpfc/lpfc_sli.c

+ 2 - 0
drivers/scsi/lpfc/lpfc_sli.c

@@ -10203,6 +10203,7 @@ lpfc_sli_sum_iocb(struct lpfc_vport *vport, uint16_t tgt_id, uint64_t lun_id,
 	struct lpfc_iocbq *iocbq;
 	struct lpfc_iocbq *iocbq;
 	int sum, i;
 	int sum, i;
 
 
+	spin_lock_irq(&phba->hbalock);
 	for (i = 1, sum = 0; i <= phba->sli.last_iotag; i++) {
 	for (i = 1, sum = 0; i <= phba->sli.last_iotag; i++) {
 		iocbq = phba->sli.iocbq_lookup[i];
 		iocbq = phba->sli.iocbq_lookup[i];
 
 
@@ -10210,6 +10211,7 @@ lpfc_sli_sum_iocb(struct lpfc_vport *vport, uint16_t tgt_id, uint64_t lun_id,
 						ctx_cmd) == 0)
 						ctx_cmd) == 0)
 			sum++;
 			sum++;
 	}
 	}
+	spin_unlock_irq(&phba->hbalock);
 
 
 	return sum;
 	return sum;
 }
 }