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

Commit 5d12f905 authored by Jens Axboe's avatar Jens Axboe
Browse files

blk-mq: fix wrong usage of hctx->state vs hctx->flags



BLK_MQ_F_* flags are for hctx->flags, and are non-atomic and
set at registration time. BLK_MQ_S_* flags are dynamic and
atomic, and are accessed through hctx->state.

Some of the BLK_MQ_S_STOPPED uses were wrong. Additionally,
the header file should not use a bit shift for the _S_ flags,
as they are done through the set/test_bit functions.

Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 95363efd
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -547,7 +547,7 @@ static void __blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx)
	LIST_HEAD(rq_list);
	LIST_HEAD(rq_list);
	int bit, queued;
	int bit, queued;


	if (unlikely(test_bit(BLK_MQ_S_STOPPED, &hctx->flags)))
	if (unlikely(test_bit(BLK_MQ_S_STOPPED, &hctx->state)))
		return;
		return;


	hctx->run++;
	hctx->run++;
@@ -636,7 +636,7 @@ static void __blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx)


void blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx, bool async)
void blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx, bool async)
{
{
	if (unlikely(test_bit(BLK_MQ_S_STOPPED, &hctx->flags)))
	if (unlikely(test_bit(BLK_MQ_S_STOPPED, &hctx->state)))
		return;
		return;


	if (!async)
	if (!async)
@@ -656,7 +656,7 @@ void blk_mq_run_queues(struct request_queue *q, bool async)
	queue_for_each_hw_ctx(q, hctx, i) {
	queue_for_each_hw_ctx(q, hctx, i) {
		if ((!blk_mq_hctx_has_pending(hctx) &&
		if ((!blk_mq_hctx_has_pending(hctx) &&
		    list_empty_careful(&hctx->dispatch)) ||
		    list_empty_careful(&hctx->dispatch)) ||
		    test_bit(BLK_MQ_S_STOPPED, &hctx->flags))
		    test_bit(BLK_MQ_S_STOPPED, &hctx->state))
			continue;
			continue;


		blk_mq_run_hw_queue(hctx, async);
		blk_mq_run_hw_queue(hctx, async);
+1 −1
Original line number Original line Diff line number Diff line
@@ -109,7 +109,7 @@ enum {
	BLK_MQ_F_SHOULD_SORT	= 1 << 1,
	BLK_MQ_F_SHOULD_SORT	= 1 << 1,
	BLK_MQ_F_SHOULD_IPI	= 1 << 2,
	BLK_MQ_F_SHOULD_IPI	= 1 << 2,


	BLK_MQ_S_STOPPED	= 1 << 0,
	BLK_MQ_S_STOPPED	= 0,


	BLK_MQ_MAX_DEPTH	= 2048,
	BLK_MQ_MAX_DEPTH	= 2048,
};
};