|
@@ -134,12 +134,6 @@ unsigned int blk_mq_get_tag(struct blk_mq_alloc_data *data)
|
|
|
ws = bt_wait_ptr(bt, data->hctx);
|
|
|
drop_ctx = data->ctx == NULL;
|
|
|
do {
|
|
|
- prepare_to_wait(&ws->wait, &wait, TASK_UNINTERRUPTIBLE);
|
|
|
-
|
|
|
- tag = __blk_mq_get_tag(data, bt);
|
|
|
- if (tag != -1)
|
|
|
- break;
|
|
|
-
|
|
|
/*
|
|
|
* We're out of tags on this hardware queue, kick any
|
|
|
* pending IO submits before going to sleep waiting for
|
|
@@ -155,6 +149,13 @@ unsigned int blk_mq_get_tag(struct blk_mq_alloc_data *data)
|
|
|
if (tag != -1)
|
|
|
break;
|
|
|
|
|
|
+ prepare_to_wait_exclusive(&ws->wait, &wait,
|
|
|
+ TASK_UNINTERRUPTIBLE);
|
|
|
+
|
|
|
+ tag = __blk_mq_get_tag(data, bt);
|
|
|
+ if (tag != -1)
|
|
|
+ break;
|
|
|
+
|
|
|
if (data->ctx)
|
|
|
blk_mq_put_ctx(data->ctx);
|
|
|
|