Revert "blk-mq: Micro-optimize bt_get()"
This reverts commit 52f7eb945f2ba62b324bb9ae16d945326a961dcf. The optimization is only really safe for a single queue, otherwise 'bs' and 'bt' can indeed change, and if we don't do a finish_wait() for each loop, we'll potentially change the wait structure and corrupt task wait list. Reported-by: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
67e2c38838
commit
35d37c6635
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user