diff options
Diffstat (limited to 'block')
| -rw-r--r-- | block/blk-mq-tag.c | 6 | 
1 files changed, 4 insertions, 2 deletions
| diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c index d64a02fb1f73..5d70edc9855f 100644 --- a/block/blk-mq-tag.c +++ b/block/blk-mq-tag.c @@ -36,7 +36,8 @@ static unsigned int __blk_mq_get_tag(struct blk_mq_tags *tags, gfp_t gfp)  {  	int tag; -	tag = percpu_ida_alloc(&tags->free_tags, gfp); +	tag = percpu_ida_alloc(&tags->free_tags, (gfp & __GFP_WAIT) ? +			       TASK_UNINTERRUPTIBLE : TASK_RUNNING);  	if (tag < 0)  		return BLK_MQ_TAG_FAIL;  	return tag + tags->nr_reserved_tags; @@ -52,7 +53,8 @@ static unsigned int __blk_mq_get_reserved_tag(struct blk_mq_tags *tags,  		return BLK_MQ_TAG_FAIL;  	} -	tag = percpu_ida_alloc(&tags->reserved_tags, gfp); +	tag = percpu_ida_alloc(&tags->reserved_tags, (gfp & __GFP_WAIT) ? +			       TASK_UNINTERRUPTIBLE : TASK_RUNNING);  	if (tag < 0)  		return BLK_MQ_TAG_FAIL;  	return tag; | 
