]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
slab: use struct freelist_counters as parameters in relevant functions
authorVlastimil Babka <vbabka@suse.cz>
Fri, 7 Nov 2025 13:51:26 +0000 (14:51 +0100)
committerVlastimil Babka <vbabka@suse.cz>
Thu, 13 Nov 2025 09:13:57 +0000 (10:13 +0100)
commitc33196c9429a1db5bc6cded27b6286f341ad6be0
tree3a6e88c12a5e8951a8c55f245538a3b3b1c476d4
parent32cf9f21828a752a364b2698ec66f8532cd66c52
slab: use struct freelist_counters as parameters in relevant functions

In functions such as [__]slab_update_freelist() and
__slab_update_freelist_fast/slow() we pass old and new freelist and
counters as 4 separate parameters. The underlying
__update_freelist_fast() then constructs struct freelist_counters
variables for passing the full freelist+counter combinations to cmpxchg
double.

In most cases we actually start with struct freelist_counters variables,
but then pass the individual fields, only to construct new struct
freelist_counters variables. While it's all inlined and thus should be
efficient, we can simplify this code.

Thus replace the 4 parameters for individual fields with two pointers to
struct freelist_counters wherever applicable. __update_freelist_fast()
can then pass them directly to try_cmpxchg_freelist().

The code is also more obvious as the pattern becomes unified such that
we set up "old" and "new" struct freelist_counters variables upfront as
we fully need them to be, and simply call [__]slab_update_freelist() on
them.  Previously some of the "new" values would be hidden among the
many parameters and thus make it harder to figure out what the code
does.

Reviewed-by: Harry Yoo <harry.yoo@oracle.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
mm/slub.c