diff options
author | Sagi Grimberg <sagi@grimberg.me> | 2016-07-06 08:55:48 -0400 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2016-07-08 10:38:49 -0400 |
commit | 486cf9899e311838b6ab95d19ff87c4da44d6508 (patch) | |
tree | e80448aaa15469f06c1215f46fd1494fc7ab9761 /block | |
parent | d9e46d5d7cb0d27a07f6c33a90ac6b4b522a5657 (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.c | 26 |
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 | } |
486 | EXPORT_SYMBOL(blk_mq_tagset_busy_iter); | 486 | EXPORT_SYMBOL(blk_mq_tagset_busy_iter); |
487 | 487 | ||
488 | int 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 | |||
509 | out: | ||
510 | return ret; | ||
511 | } | ||
512 | EXPORT_SYMBOL_GPL(blk_mq_reinit_tagset); | ||
513 | |||
488 | void blk_mq_queue_tag_busy_iter(struct request_queue *q, busy_iter_fn *fn, | 514 | void blk_mq_queue_tag_busy_iter(struct request_queue *q, busy_iter_fn *fn, |
489 | void *priv) | 515 | void *priv) |
490 | { | 516 | { |