spin_lock_irqsave(&phba->hbalock, iflags);
        phba->hba_flag &= ~HBA_RRQ_ACTIVE;
+       spin_unlock_irqrestore(&phba->hbalock, iflags);
+
        next_time = jiffies + msecs_to_jiffies(1000 * (phba->fc_ratov + 1));
+       spin_lock_irqsave(&phba->rrq_list_lock, iflags);
        list_for_each_entry_safe(rrq, nextrrq,
                                 &phba->active_rrq_list, list) {
                if (time_after(jiffies, rrq->rrq_stop_time))
                else if (time_before(rrq->rrq_stop_time, next_time))
                        next_time = rrq->rrq_stop_time;
        }
-       spin_unlock_irqrestore(&phba->hbalock, iflags);
+       spin_unlock_irqrestore(&phba->rrq_list_lock, iflags);
        if ((!list_empty(&phba->active_rrq_list)) &&
            (!test_bit(FC_UNLOADING, &phba->pport->load_flag)))
                mod_timer(&phba->rrq_tmr, next_time);
 
        if (phba->sli_rev != LPFC_SLI_REV4)
                return NULL;
-       spin_lock_irqsave(&phba->hbalock, iflags);
+       spin_lock_irqsave(&phba->rrq_list_lock, iflags);
        list_for_each_entry_safe(rrq, nextrrq, &phba->active_rrq_list, list) {
                if (rrq->vport == vport && rrq->xritag == xri &&
                                rrq->nlp_DID == did){
                        list_del(&rrq->list);
-                       spin_unlock_irqrestore(&phba->hbalock, iflags);
+                       spin_unlock_irqrestore(&phba->rrq_list_lock, iflags);
                        return rrq;
                }
        }
-       spin_unlock_irqrestore(&phba->hbalock, iflags);
+       spin_unlock_irqrestore(&phba->rrq_list_lock, iflags);
        return NULL;
 }
 
                lpfc_sli4_vport_delete_els_xri_aborted(vport);
                lpfc_sli4_vport_delete_fcp_xri_aborted(vport);
        }
-       spin_lock_irqsave(&phba->hbalock, iflags);
+       spin_lock_irqsave(&phba->rrq_list_lock, iflags);
        list_for_each_entry_safe(rrq, nextrrq, &phba->active_rrq_list, list) {
                if (rrq->vport != vport)
                        continue;
                        list_move(&rrq->list, &rrq_list);
 
        }
-       spin_unlock_irqrestore(&phba->hbalock, iflags);
+       spin_unlock_irqrestore(&phba->rrq_list_lock, iflags);
 
        list_for_each_entry_safe(rrq, nextrrq, &rrq_list, list) {
                list_del(&rrq->list);
        rrq->nlp_DID = ndlp->nlp_DID;
        rrq->vport = ndlp->vport;
        rrq->rxid = rxid;
-       spin_lock_irqsave(&phba->hbalock, iflags);
+
+       spin_lock_irqsave(&phba->rrq_list_lock, iflags);
        empty = list_empty(&phba->active_rrq_list);
        list_add_tail(&rrq->list, &phba->active_rrq_list);
+       spin_unlock_irqrestore(&phba->rrq_list_lock, iflags);
+
+       spin_lock_irqsave(&phba->hbalock, iflags);
        phba->hba_flag |= HBA_RRQ_ACTIVE;
        spin_unlock_irqrestore(&phba->hbalock, iflags);
+
        if (empty)
                lpfc_worker_wake_up(phba);
        return 0;