diff --cc block/blk-mq-tag.c index cef618f6fc92,2eae3d5f7145..000000000000 --- a/block/blk-mq-tag.c +++ b/block/blk-mq-tag.c @@@ -412,9 -673,8 +406,8 @@@ struct blk_mq_tags *blk_mq_init_tags(un void blk_mq_free_tags(struct blk_mq_tags *tags) { - bt_free(&tags->bitmap_tags); - bt_free(&tags->breserved_tags); + sbitmap_queue_free(&tags->bitmap_tags); + sbitmap_queue_free(&tags->breserved_tags); - free_cpumask_var(tags->cpumask); kfree(tags); } diff --cc block/blk-mq-tag.h index 09f4cc0aaa84,556964134d1c..000000000000 --- a/block/blk-mq-tag.h +++ b/block/blk-mq-tag.h @@@ -17,8 -42,8 +17,6 @@@ struct blk_mq_tags struct request **rqs; struct list_head page_list; -- - cpumask_var_t cpumask; - int alloc_policy; }; diff --cc block/blk-mq.c index dc5f47f60931,f1c5263c44e8..000000000000 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@@ -224,11 -245,21 +224,11 @@@ struct request *blk_mq_alloc_request(st return ERR_PTR(ret); ctx = blk_mq_get_ctx(q); - hctx = q->mq_ops->map_queue(q, ctx->cpu); + hctx = blk_mq_map_queue(q, ctx->cpu); blk_mq_set_alloc_data(&alloc_data, q, flags, ctx, hctx); - rq = __blk_mq_alloc_request(&alloc_data, rw, 0); - if (!rq && !(flags & BLK_MQ_REQ_NOWAIT)) { - __blk_mq_run_hw_queue(hctx); - blk_mq_put_ctx(ctx); - - ctx = blk_mq_get_ctx(q); - hctx = blk_mq_map_queue(q, ctx->cpu); - blk_mq_set_alloc_data(&alloc_data, q, flags, ctx, hctx); - rq = __blk_mq_alloc_request(&alloc_data, rw, 0); - ctx = alloc_data.ctx; - } blk_mq_put_ctx(ctx); + if (!rq) { blk_queue_exit(q); return ERR_PTR(-EWOULDBLOCK);