Commit f262cfd7 authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle) Committed by Vlastimil Babka
Browse files

slab: Remove folio references from kvfree_rcu_cb()



Remove conversions from folio to page and folio to slab.  This is
preparation for separately allocated struct slab from struct page.

Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Link: https://patch.msgid.link/20251113000932.1589073-8-willy@infradead.org


Reviewed-by: default avatarHarry Yoo <harry.yoo@oracle.com>
Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
parent 0bdfdd6a
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -6771,7 +6771,7 @@ static void free_large_kmalloc(struct page *page, void *object)
void kvfree_rcu_cb(struct rcu_head *head)
{
	void *obj = head;
	struct folio *folio;
	struct page *page;
	struct slab *slab;
	struct kmem_cache *s;
	void *slab_addr;
@@ -6782,20 +6782,20 @@ void kvfree_rcu_cb(struct rcu_head *head)
		return;
	}

	folio = virt_to_folio(obj);
	if (!folio_test_slab(folio)) {
	page = virt_to_page(obj);
	slab = page_slab(page);
	if (!slab) {
		/*
		 * rcu_head offset can be only less than page size so no need to
		 * consider folio order
		 * consider allocation order
		 */
		obj = (void *) PAGE_ALIGN_DOWN((unsigned long)obj);
		free_large_kmalloc(&folio->page, obj);
		free_large_kmalloc(page, obj);
		return;
	}

	slab = folio_slab(folio);
	s = slab->slab_cache;
	slab_addr = folio_address(folio);
	slab_addr = slab_address(slab);

	if (is_kfence_address(obj)) {
		obj = kfence_object_start(obj);