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

Commit 6753471c authored by Dave Hansen's avatar Dave Hansen Committed by Jens Axboe
Browse files

blk-mq: uses page->list incorrectly



'struct page' has two list_head fields: 'lru' and 'list'.  Conveniently,
they are unioned together.  This means that code can use them
interchangably, which gets horribly confusing.

The blk-mq made the logical decision to try to use page->list.  But, that
field was actually introduced just for the slub code.  ->lru is the right
field to use outside of slab/slub.

Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
Acked-by: default avatarDavid Rientjes <rientjes@google.com>
Acked-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Jens Axboe <axboe@kernel.dk>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 3d6efbf6
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1063,8 +1063,8 @@ static void blk_mq_free_rq_map(struct blk_mq_hw_ctx *hctx)
	struct page *page;

	while (!list_empty(&hctx->page_list)) {
		page = list_first_entry(&hctx->page_list, struct page, list);
		list_del_init(&page->list);
		page = list_first_entry(&hctx->page_list, struct page, lru);
		list_del_init(&page->lru);
		__free_pages(page, page->private);
	}

@@ -1128,7 +1128,7 @@ static int blk_mq_init_rq_map(struct blk_mq_hw_ctx *hctx,
			break;

		page->private = this_order;
		list_add_tail(&page->list, &hctx->page_list);
		list_add_tail(&page->lru, &hctx->page_list);

		p = page_address(page);
		entries_per_page = order_to_size(this_order) / rq_size;