diff options
author | Jens Axboe <axboe@kernel.dk> | 2017-08-18 10:04:15 -0400 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2017-08-18 10:04:15 -0400 |
commit | 6caa0503c43d65de92309b967b5b1aa289af303b (patch) | |
tree | a6c71e2455deac92e834d36cfe4509fa289d301c | |
parent | 3e09fc802d05695393a48f6c2d888771b80c4301 (diff) | |
parent | e9d8a0fdeacd843c85dcef480cdb2ab76bcdb6e4 (diff) |
Merge branch 'nvme-4.13' of git://git.infradead.org/nvme into for-linus
Pull NVMe changes from Christoph:
"The fixes are getting really small now - two for FC, one for PCI, one
for the fabrics layer and one for the target."
-rw-r--r-- | drivers/nvme/host/fabrics.c | 3 | ||||
-rw-r--r-- | drivers/nvme/host/pci.c | 5 | ||||
-rw-r--r-- | drivers/nvme/target/admin-cmd.c | 6 | ||||
-rw-r--r-- | drivers/nvme/target/fc.c | 9 |
4 files changed, 9 insertions, 14 deletions
diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c index 2e582a240943..5f5cd306f76d 100644 --- a/drivers/nvme/host/fabrics.c +++ b/drivers/nvme/host/fabrics.c | |||
@@ -794,7 +794,8 @@ static int nvmf_check_allowed_opts(struct nvmf_ctrl_options *opts, | |||
794 | int i; | 794 | int i; |
795 | 795 | ||
796 | for (i = 0; i < ARRAY_SIZE(opt_tokens); i++) { | 796 | for (i = 0; i < ARRAY_SIZE(opt_tokens); i++) { |
797 | if (opt_tokens[i].token & ~allowed_opts) { | 797 | if ((opt_tokens[i].token & opts->mask) && |
798 | (opt_tokens[i].token & ~allowed_opts)) { | ||
798 | pr_warn("invalid parameter '%s'\n", | 799 | pr_warn("invalid parameter '%s'\n", |
799 | opt_tokens[i].pattern); | 800 | opt_tokens[i].pattern); |
800 | } | 801 | } |
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index 74a124a06264..925467b31a33 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c | |||
@@ -801,6 +801,7 @@ static inline void nvme_handle_cqe(struct nvme_queue *nvmeq, | |||
801 | return; | 801 | return; |
802 | } | 802 | } |
803 | 803 | ||
804 | nvmeq->cqe_seen = 1; | ||
804 | req = blk_mq_tag_to_rq(*nvmeq->tags, cqe->command_id); | 805 | req = blk_mq_tag_to_rq(*nvmeq->tags, cqe->command_id); |
805 | nvme_end_request(req, cqe->status, cqe->result); | 806 | nvme_end_request(req, cqe->status, cqe->result); |
806 | } | 807 | } |
@@ -830,10 +831,8 @@ static void nvme_process_cq(struct nvme_queue *nvmeq) | |||
830 | consumed++; | 831 | consumed++; |
831 | } | 832 | } |
832 | 833 | ||
833 | if (consumed) { | 834 | if (consumed) |
834 | nvme_ring_cq_doorbell(nvmeq); | 835 | nvme_ring_cq_doorbell(nvmeq); |
835 | nvmeq->cqe_seen = 1; | ||
836 | } | ||
837 | } | 836 | } |
838 | 837 | ||
839 | static irqreturn_t nvme_irq(int irq, void *data) | 838 | static irqreturn_t nvme_irq(int irq, void *data) |
diff --git a/drivers/nvme/target/admin-cmd.c b/drivers/nvme/target/admin-cmd.c index 2d7a98ab53fb..a53bb6635b83 100644 --- a/drivers/nvme/target/admin-cmd.c +++ b/drivers/nvme/target/admin-cmd.c | |||
@@ -199,12 +199,6 @@ static void nvmet_execute_identify_ctrl(struct nvmet_req *req) | |||
199 | copy_and_pad(id->mn, sizeof(id->mn), model, sizeof(model) - 1); | 199 | copy_and_pad(id->mn, sizeof(id->mn), model, sizeof(model) - 1); |
200 | copy_and_pad(id->fr, sizeof(id->fr), UTS_RELEASE, strlen(UTS_RELEASE)); | 200 | copy_and_pad(id->fr, sizeof(id->fr), UTS_RELEASE, strlen(UTS_RELEASE)); |
201 | 201 | ||
202 | memset(id->mn, ' ', sizeof(id->mn)); | ||
203 | strncpy((char *)id->mn, "Linux", sizeof(id->mn)); | ||
204 | |||
205 | memset(id->fr, ' ', sizeof(id->fr)); | ||
206 | strncpy((char *)id->fr, UTS_RELEASE, sizeof(id->fr)); | ||
207 | |||
208 | id->rab = 6; | 202 | id->rab = 6; |
209 | 203 | ||
210 | /* | 204 | /* |
diff --git a/drivers/nvme/target/fc.c b/drivers/nvme/target/fc.c index 1b7f2520a20d..309c84aa7595 100644 --- a/drivers/nvme/target/fc.c +++ b/drivers/nvme/target/fc.c | |||
@@ -394,7 +394,7 @@ nvmet_fc_free_ls_iodlist(struct nvmet_fc_tgtport *tgtport) | |||
394 | static struct nvmet_fc_ls_iod * | 394 | static struct nvmet_fc_ls_iod * |
395 | nvmet_fc_alloc_ls_iod(struct nvmet_fc_tgtport *tgtport) | 395 | nvmet_fc_alloc_ls_iod(struct nvmet_fc_tgtport *tgtport) |
396 | { | 396 | { |
397 | static struct nvmet_fc_ls_iod *iod; | 397 | struct nvmet_fc_ls_iod *iod; |
398 | unsigned long flags; | 398 | unsigned long flags; |
399 | 399 | ||
400 | spin_lock_irqsave(&tgtport->lock, flags); | 400 | spin_lock_irqsave(&tgtport->lock, flags); |
@@ -471,7 +471,7 @@ nvmet_fc_destroy_fcp_iodlist(struct nvmet_fc_tgtport *tgtport, | |||
471 | static struct nvmet_fc_fcp_iod * | 471 | static struct nvmet_fc_fcp_iod * |
472 | nvmet_fc_alloc_fcp_iod(struct nvmet_fc_tgt_queue *queue) | 472 | nvmet_fc_alloc_fcp_iod(struct nvmet_fc_tgt_queue *queue) |
473 | { | 473 | { |
474 | static struct nvmet_fc_fcp_iod *fod; | 474 | struct nvmet_fc_fcp_iod *fod; |
475 | 475 | ||
476 | lockdep_assert_held(&queue->qlock); | 476 | lockdep_assert_held(&queue->qlock); |
477 | 477 | ||
@@ -704,7 +704,7 @@ nvmet_fc_delete_target_queue(struct nvmet_fc_tgt_queue *queue) | |||
704 | { | 704 | { |
705 | struct nvmet_fc_tgtport *tgtport = queue->assoc->tgtport; | 705 | struct nvmet_fc_tgtport *tgtport = queue->assoc->tgtport; |
706 | struct nvmet_fc_fcp_iod *fod = queue->fod; | 706 | struct nvmet_fc_fcp_iod *fod = queue->fod; |
707 | struct nvmet_fc_defer_fcp_req *deferfcp; | 707 | struct nvmet_fc_defer_fcp_req *deferfcp, *tempptr; |
708 | unsigned long flags; | 708 | unsigned long flags; |
709 | int i, writedataactive; | 709 | int i, writedataactive; |
710 | bool disconnect; | 710 | bool disconnect; |
@@ -735,7 +735,8 @@ nvmet_fc_delete_target_queue(struct nvmet_fc_tgt_queue *queue) | |||
735 | } | 735 | } |
736 | 736 | ||
737 | /* Cleanup defer'ed IOs in queue */ | 737 | /* Cleanup defer'ed IOs in queue */ |
738 | list_for_each_entry(deferfcp, &queue->avail_defer_list, req_list) { | 738 | list_for_each_entry_safe(deferfcp, tempptr, &queue->avail_defer_list, |
739 | req_list) { | ||
739 | list_del(&deferfcp->req_list); | 740 | list_del(&deferfcp->req_list); |
740 | kfree(deferfcp); | 741 | kfree(deferfcp); |
741 | } | 742 | } |