diff options
author | Omar Sandoval <osandov@fb.com> | 2017-04-14 09:59:59 +0200 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2017-04-14 22:06:54 +0200 |
commit | 229a92873f3afc20b0d91aaaec08cbc11689dd8b (patch) | |
tree | 399e4d8109e92ec0ea8069dd2d331328a2c2c284 /block | |
parent | sbitmap: add sbitmap_get_shallow() operation (diff) | |
download | linux-229a92873f3afc20b0d91aaaec08cbc11689dd8b.tar.xz linux-229a92873f3afc20b0d91aaaec08cbc11689dd8b.zip |
blk-mq: add shallow depth option for blk_mq_get_tag()
Wire up the sbitmap_get_shallow() operation to the tag code so that a
caller can limit the number of tags available to it.
Signed-off-by: Omar Sandoval <osandov@fb.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'block')
-rw-r--r-- | block/blk-mq-tag.c | 5 | ||||
-rw-r--r-- | block/blk-mq.h | 1 |
2 files changed, 5 insertions, 1 deletions
diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c index 9d97bfc4d465..d0be72ccb091 100644 --- a/block/blk-mq-tag.c +++ b/block/blk-mq-tag.c @@ -96,7 +96,10 @@ static int __blk_mq_get_tag(struct blk_mq_alloc_data *data, if (!(data->flags & BLK_MQ_REQ_INTERNAL) && !hctx_may_queue(data->hctx, bt)) return -1; - return __sbitmap_queue_get(bt); + if (data->shallow_depth) + return __sbitmap_queue_get_shallow(bt, data->shallow_depth); + else + return __sbitmap_queue_get(bt); } unsigned int blk_mq_get_tag(struct blk_mq_alloc_data *data) diff --git a/block/blk-mq.h b/block/blk-mq.h index 7e6f2e467696..524f44742816 100644 --- a/block/blk-mq.h +++ b/block/blk-mq.h @@ -141,6 +141,7 @@ struct blk_mq_alloc_data { /* input parameter */ struct request_queue *q; unsigned int flags; + unsigned int shallow_depth; /* input & output parameter */ struct blk_mq_ctx *ctx; |