Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b3223207 authored by Bart Van Assche's avatar Bart Van Assche Committed by Jens Axboe
Browse files

blk-mq: fix hang in bt_get()



Avoid that if there are fewer hardware queues than CPU threads that
bt_get() can hang. The symptoms of the hang were as follows:

* All tags allocated for a particular hardware queue.
* (nr_tags) pending commands for that hardware queue.
* No pending commands for the software queues associated with that
  hardware queue.

Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 6637fadf
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -254,6 +254,13 @@ static int bt_get(struct blk_mq_alloc_data *data,
		if (tag != -1)
		if (tag != -1)
			break;
			break;


		/*
		 * We're out of tags on this hardware queue, kick any
		 * pending IO submits before going to sleep waiting for
		 * some to complete.
		 */
		blk_mq_run_hw_queue(hctx, false);

		blk_mq_put_ctx(data->ctx);
		blk_mq_put_ctx(data->ctx);


		io_schedule();
		io_schedule();