lpfc 8.3.38: Fixed deadlock condition in FCF round robin handling
Subsystems (2)
PATCH 4/11 lpfc 8.3.38: Fixed deadlock condition in FCF round robin handling
Fixed deadlock condition in FCF round robin handling
Signed-off-by James Smart <[email protected]>
---
lpfc_hbadisc.c | 2 ++ lpfc_sli.c | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-)
drivers/scsi/lpfc/lpfc_hbadisc.c +2 -0
@@ -1793,6 +1793,8 @@ lpfc_sli4_fcf_rec_mbox_parse(struct lpfc virt_addr = mboxq->sge_array->addr[0 ]; shdr = (union lpfc_sli4_cfg_shdr *)virt_addr; +lpfc_sli_pcimem_bcopy (shdr, shdr, +sizeof (union lpfc_sli4_cfg_shdr )); shdr_status =bf_get (lpfc_mbox_hdr_status, &shdr->response); shdr_add_status =bf_get (lpfc_mbox_hdr_add_status, &shdr->response);if (shdr_status || shdr_add_status) {
drivers/scsi/lpfc/lpfc_sli.c +8 -1
@@ -15507,11 +15507,18 @@ lpfc_check_next_fcf_pri_level(struct lpf LPFC_SLI4_FCF_TBL_INDX_MAX);lpfc_printf_log (phba,KERN_INFO ,LOG_FIP ,"3060 Last IDX %d\n" , last_index); -if (list_empty (&phba->fcf.fcf_pri_list)) { + +/* Verify the priority list has 2 or more entries */ +spin_lock_irq (&phba->hbalock); +if (list_empty (&phba->fcf.fcf_pri_list) || +list_is_singular (&phba->fcf.fcf_pri_list)) { +spin_unlock_irq (&phba->hbalock);lpfc_printf_log (phba,KERN_ERR ,LOG_FIP ,"3061 Last IDX %d\n" , last_index);return 0 ;/* Empty rr list */ } +spin_unlock_irq (&phba->hbalock); + next_fcf_pri =0 ;/* * Clear the rr_bmask and set all of the bits that are at this