|
@@ -229,8 +229,8 @@ __blk_mq_alloc_request(struct blk_mq_alloc_data *data, int rw)
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
-struct request *blk_mq_alloc_request(struct request_queue *q, int rw, gfp_t gfp,
|
|
|
- bool reserved)
|
|
|
+struct request *blk_mq_alloc_request(struct request_queue *q, int rw,
|
|
|
+ unsigned int flags)
|
|
|
{
|
|
|
struct blk_mq_ctx *ctx;
|
|
|
struct blk_mq_hw_ctx *hctx;
|
|
@@ -238,24 +238,22 @@ struct request *blk_mq_alloc_request(struct request_queue *q, int rw, gfp_t gfp,
|
|
|
struct blk_mq_alloc_data alloc_data;
|
|
|
int ret;
|
|
|
|
|
|
- ret = blk_queue_enter(q, gfp);
|
|
|
+ ret = blk_queue_enter(q, flags & BLK_MQ_REQ_NOWAIT);
|
|
|
if (ret)
|
|
|
return ERR_PTR(ret);
|
|
|
|
|
|
ctx = blk_mq_get_ctx(q);
|
|
|
hctx = q->mq_ops->map_queue(q, ctx->cpu);
|
|
|
- blk_mq_set_alloc_data(&alloc_data, q, gfp & ~__GFP_DIRECT_RECLAIM,
|
|
|
- reserved, ctx, hctx);
|
|
|
+ blk_mq_set_alloc_data(&alloc_data, q, flags, ctx, hctx);
|
|
|
|
|
|
rq = __blk_mq_alloc_request(&alloc_data, rw);
|
|
|
- if (!rq && (gfp & __GFP_DIRECT_RECLAIM)) {
|
|
|
+ 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 = q->mq_ops->map_queue(q, ctx->cpu);
|
|
|
- blk_mq_set_alloc_data(&alloc_data, q, gfp, reserved, ctx,
|
|
|
- hctx);
|
|
|
+ blk_mq_set_alloc_data(&alloc_data, q, flags, ctx, hctx);
|
|
|
rq = __blk_mq_alloc_request(&alloc_data, rw);
|
|
|
ctx = alloc_data.ctx;
|
|
|
}
|
|
@@ -1175,8 +1173,7 @@ static struct request *blk_mq_map_request(struct request_queue *q,
|
|
|
rw |= REQ_SYNC;
|
|
|
|
|
|
trace_block_getrq(q, bio, rw);
|
|
|
- blk_mq_set_alloc_data(&alloc_data, q, GFP_ATOMIC, false, ctx,
|
|
|
- hctx);
|
|
|
+ blk_mq_set_alloc_data(&alloc_data, q, BLK_MQ_REQ_NOWAIT, ctx, hctx);
|
|
|
rq = __blk_mq_alloc_request(&alloc_data, rw);
|
|
|
if (unlikely(!rq)) {
|
|
|
__blk_mq_run_hw_queue(hctx);
|
|
@@ -1185,8 +1182,7 @@ static struct request *blk_mq_map_request(struct request_queue *q,
|
|
|
|
|
|
ctx = blk_mq_get_ctx(q);
|
|
|
hctx = q->mq_ops->map_queue(q, ctx->cpu);
|
|
|
- blk_mq_set_alloc_data(&alloc_data, q,
|
|
|
- __GFP_RECLAIM|__GFP_HIGH, false, ctx, hctx);
|
|
|
+ blk_mq_set_alloc_data(&alloc_data, q, 0, ctx, hctx);
|
|
|
rq = __blk_mq_alloc_request(&alloc_data, rw);
|
|
|
ctx = alloc_data.ctx;
|
|
|
hctx = alloc_data.hctx;
|