diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c index e3d4e4043b496199d9f1eda8d83318cd1f9b0fe9..32e8dbb9ad1c49f0078e57fae100f0e6a7eb8a73 100644 --- a/block/blk-mq-tag.c +++ b/block/blk-mq-tag.c @@ -248,8 +248,8 @@ static int bt_get(struct blk_mq_alloc_data *data, if (!(data->gfp & __GFP_WAIT)) return -1; + bs = bt_wait_ptr(bt, hctx); do { - bs = bt_wait_ptr(bt, hctx); prepare_to_wait(&bs->wait, &wait, TASK_UNINTERRUPTIBLE); tag = __bt_get(hctx, bt, last_tag); @@ -285,6 +285,8 @@ static int bt_get(struct blk_mq_alloc_data *data, hctx = data->hctx; bt = &hctx->tags->bitmap_tags; } + finish_wait(&bs->wait, &wait); + bs = bt_wait_ptr(bt, hctx); } while (1); finish_wait(&bs->wait, &wait);