@ -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 ;