Commit 266facde authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull slab fix from Vlastimil Babka:

 - Fix for memcg unreclaimable slab stats drift when post-charging large
   kmalloc allocations (Shakeel Butt)

* tag 'slab-for-6.13-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/vbabka/slab:
  memcg: slub: fix SUnreclaim for post charged objects
parents f932fb9b b7ffecbe
Loading
Loading
Loading
Loading
+18 −3
Original line number Diff line number Diff line
@@ -2189,9 +2189,24 @@ bool memcg_slab_post_charge(void *p, gfp_t flags)

	folio = virt_to_folio(p);
	if (!folio_test_slab(folio)) {
		return folio_memcg_kmem(folio) ||
			(__memcg_kmem_charge_page(folio_page(folio, 0), flags,
						  folio_order(folio)) == 0);
		int size;

		if (folio_memcg_kmem(folio))
			return true;

		if (__memcg_kmem_charge_page(folio_page(folio, 0), flags,
					     folio_order(folio)))
			return false;

		/*
		 * This folio has already been accounted in the global stats but
		 * not in the memcg stats. So, subtract from the global and use
		 * the interface which adds to both global and memcg stats.
		 */
		size = folio_size(folio);
		node_stat_mod_folio(folio, NR_SLAB_UNRECLAIMABLE_B, -size);
		lruvec_stat_mod_folio(folio, NR_SLAB_UNRECLAIMABLE_B, size);
		return true;
	}

	slab = folio_slab(folio);