Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[linux-2.6-microblaze.git] / drivers / scsi / lpfc / lpfc_nvmet.c
index f2d9a35..6e3dd0b 100644 (file)
@@ -1797,19 +1797,22 @@ lpfc_sli4_nvmet_xri_aborted(struct lpfc_hba *phba,
                if (ctxp->ctxbuf->sglq->sli4_xritag != xri)
                        continue;
 
-               spin_lock(&ctxp->ctxlock);
+               spin_unlock_irqrestore(&phba->sli4_hba.abts_nvmet_buf_list_lock,
+                                      iflag);
+
+               spin_lock_irqsave(&ctxp->ctxlock, iflag);
                /* Check if we already received a free context call
                 * and we have completed processing an abort situation.
                 */
                if (ctxp->flag & LPFC_NVME_CTX_RLS &&
                    !(ctxp->flag & LPFC_NVME_ABORT_OP)) {
+                       spin_lock(&phba->sli4_hba.abts_nvmet_buf_list_lock);
                        list_del_init(&ctxp->list);
+                       spin_unlock(&phba->sli4_hba.abts_nvmet_buf_list_lock);
                        released = true;
                }
                ctxp->flag &= ~LPFC_NVME_XBUSY;
-               spin_unlock(&ctxp->ctxlock);
-               spin_unlock_irqrestore(&phba->sli4_hba.abts_nvmet_buf_list_lock,
-                                      iflag);
+               spin_unlock_irqrestore(&ctxp->ctxlock, iflag);
 
                rrq_empty = list_empty(&phba->active_rrq_list);
                ndlp = lpfc_findnode_did(phba->pport, ctxp->sid);