aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/nvme/target/fc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/nvme/target/fc.c')
-rw-r--r--drivers/nvme/target/fc.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/nvme/target/fc.c b/drivers/nvme/target/fc.c
index 664d3013f68f..5fd86039e353 100644
--- a/drivers/nvme/target/fc.c
+++ b/drivers/nvme/target/fc.c
@@ -533,15 +533,15 @@ nvmet_fc_free_fcp_iod(struct nvmet_fc_tgt_queue *queue,
533 533
534 tgtport->ops->fcp_req_release(&tgtport->fc_target_port, fcpreq); 534 tgtport->ops->fcp_req_release(&tgtport->fc_target_port, fcpreq);
535 535
536 /* release the queue lookup reference on the completed IO */
537 nvmet_fc_tgt_q_put(queue);
538
536 spin_lock_irqsave(&queue->qlock, flags); 539 spin_lock_irqsave(&queue->qlock, flags);
537 deferfcp = list_first_entry_or_null(&queue->pending_cmd_list, 540 deferfcp = list_first_entry_or_null(&queue->pending_cmd_list,
538 struct nvmet_fc_defer_fcp_req, req_list); 541 struct nvmet_fc_defer_fcp_req, req_list);
539 if (!deferfcp) { 542 if (!deferfcp) {
540 list_add_tail(&fod->fcp_list, &fod->queue->fod_list); 543 list_add_tail(&fod->fcp_list, &fod->queue->fod_list);
541 spin_unlock_irqrestore(&queue->qlock, flags); 544 spin_unlock_irqrestore(&queue->qlock, flags);
542
543 /* Release reference taken at queue lookup and fod allocation */
544 nvmet_fc_tgt_q_put(queue);
545 return; 545 return;
546 } 546 }
547 547
@@ -760,6 +760,9 @@ nvmet_fc_delete_target_queue(struct nvmet_fc_tgt_queue *queue)
760 tgtport->ops->fcp_req_release(&tgtport->fc_target_port, 760 tgtport->ops->fcp_req_release(&tgtport->fc_target_port,
761 deferfcp->fcp_req); 761 deferfcp->fcp_req);
762 762
763 /* release the queue lookup reference */
764 nvmet_fc_tgt_q_put(queue);
765
763 kfree(deferfcp); 766 kfree(deferfcp);
764 767
765 spin_lock_irqsave(&queue->qlock, flags); 768 spin_lock_irqsave(&queue->qlock, flags);