aboutsummaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
authorSagi Grimberg <sagi@grimberg.me>2016-07-06 08:55:48 -0400
committerJens Axboe <axboe@fb.com>2016-07-08 10:38:49 -0400
commit486cf9899e311838b6ab95d19ff87c4da44d6508 (patch)
treee80448aaa15469f06c1215f46fd1494fc7ab9761 /block
parentd9e46d5d7cb0d27a07f6c33a90ac6b4b522a5657 (diff)
blk-mq: Introduce blk_mq_reinit_tagset
The new nvme-rdma driver will need to reinitialize all the tags as part of the error recovery procedure (realloc the tag memory region). Add a helper in blk-mq for it that can iterate over all requests in a tagset to make this easier. Signed-off-by: Sagi Grimberg <sagi@grimberg.me> Tested-by: Ming Lin <ming.l@ssi.samsung.com> Reviewed-by: Stephen Bates <Stephen.Bates@pmcs.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Steve Wise <swise@opengridcomputing.com> Tested-by: Steve Wise <swise@opengridcomputing.com> Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'block')
-rw-r--r--block/blk-mq-tag.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c
index 56a0c37a3d06..729bac3a673b 100644
--- a/block/blk-mq-tag.c
+++ b/block/blk-mq-tag.c
@@ -485,6 +485,32 @@ void blk_mq_tagset_busy_iter(struct blk_mq_tag_set *tagset,
485} 485}
486EXPORT_SYMBOL(blk_mq_tagset_busy_iter); 486EXPORT_SYMBOL(blk_mq_tagset_busy_iter);
487 487
488int blk_mq_reinit_tagset(struct blk_mq_tag_set *set)
489{
490 int i, j, ret = 0;
491
492 if (!set->ops->reinit_request)
493 goto out;
494
495 for (i = 0; i < set->nr_hw_queues; i++) {
496 struct blk_mq_tags *tags = set->tags[i];
497
498 for (j = 0; j < tags->nr_tags; j++) {
499 if (!tags->rqs[j])
500 continue;
501
502 ret = set->ops->reinit_request(set->driver_data,
503 tags->rqs[j]);
504 if (ret)
505 goto out;
506 }
507 }
508
509out:
510 return ret;
511}
512EXPORT_SYMBOL_GPL(blk_mq_reinit_tagset);
513
488void blk_mq_queue_tag_busy_iter(struct request_queue *q, busy_iter_fn *fn, 514void blk_mq_queue_tag_busy_iter(struct request_queue *q, busy_iter_fn *fn,
489 void *priv) 515 void *priv)
490{ 516{