]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
slub: keep empty main sheaf as spare in __pcs_replace_empty_main()
authorHao Li <haolee.swjtu@gmail.com>
Wed, 10 Dec 2025 00:26:31 +0000 (08:26 +0800)
committerVlastimil Babka <vbabka@suse.cz>
Tue, 27 Jan 2026 17:03:19 +0000 (18:03 +0100)
commit4b038a9670154e8bb4832d80f0f2b68b1b812171
tree45fc25d8e8b5249de9323d0005d39a54dd971b82
parentd907bf434fcd64c9609aa2983574e7c1f28e5493
slub: keep empty main sheaf as spare in __pcs_replace_empty_main()

When __pcs_replace_empty_main() fails to obtain a full sheaf directly
from the barn, it may either:

  - Refill an empty sheaf obtained via barn_get_empty_sheaf(), or
  - Allocate a brand new full sheaf via alloc_full_sheaf().

After reacquiring the per-CPU lock, if pcs->main is still empty and
pcs->spare is NULL, the current code donates the empty main sheaf to
the barn via barn_put_empty_sheaf() and installs the full sheaf as
pcs->main, leaving pcs->spare unpopulated.

Instead, keep the existing empty main sheaf locally as the spare:

  pcs->spare = pcs->main;
  pcs->main = full;

This populates pcs->spare earlier, which can reduce future barn traffic.

Suggested-by: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Hao Li <haolee.swjtu@gmail.com>
Reviewed-by: Harry Yoo <harry.yoo@oracle.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
Tested-by: Zhao Liu <zhao1.liu@intel.com>
mm/slub.c