diff options
Diffstat (limited to 'drivers/nvme/target/fc.c')
| -rw-r--r-- | drivers/nvme/target/fc.c | 9 |
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); |
