It pass a NULL pointer to the freelist_new variable in the __slab_update_freelist() function so that it don't have to re-fetch the variable values inside the while loop. Removing unnecessary variable accesses as shown below will reduce the code size of the get_freelist() function and make it faster. Signed-off-by: JaeJoon Jung --- mm/slub.c | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/mm/slub.c b/mm/slub.c index d257141896c9..2e305a17a9d7 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -3654,27 +3654,14 @@ __update_cpu_freelist_fast(struct kmem_cache *s, */ static inline void *get_freelist(struct kmem_cache *s, struct slab *slab) { - struct slab new; - unsigned long counters; - void *freelist; - lockdep_assert_held(this_cpu_ptr(&s->cpu_slab->lock)); - do { - freelist = slab->freelist; - counters = slab->counters; - - new.counters = counters; - - new.inuse = slab->objects; - new.frozen = freelist != NULL; - - } while (!__slab_update_freelist(s, slab, - freelist, counters, - NULL, new.counters, + while (!__slab_update_freelist(s, slab, + slab->freelist, slab->counters, + NULL, slab->counters, "get_freelist")); - return freelist; + return slab->freelist; } /* -- 2.43.0