On Fri, Feb 06, 2026 at 06:34:05PM +0900, Harry Yoo wrote: > When slab objects are freed with kfree_rcu() and not call_rcu(), > using struct rcu_head (16 bytes on 64-bit) is unnecessary and > struct rcu_ptr (8 bytes on 64-bit) is enough. Save one pointer > per slab object by using struct rcu_ptr. > > Signed-off-by: Harry Yoo <[email protected]> > --- > include/linux/list_lru.h | 2 +- > include/linux/shrinker.h | 2 +- > mm/vmalloc.c | 4 ++-- > 3 files changed, 4 insertions(+), 4 deletions(-) > > diff --git a/include/linux/list_lru.h b/include/linux/list_lru.h > index fe739d35a864..c79bccb7dafa 100644 > --- a/include/linux/list_lru.h > +++ b/include/linux/list_lru.h > @@ -37,7 +37,7 @@ struct list_lru_one { > }; > > struct list_lru_memcg { > - struct rcu_head rcu; > + struct rcu_ptr rcu; > /* array of per cgroup per node lists, indexed by node id */ > struct list_lru_one node[]; > }; > diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h > index 1a00be90d93a..bad20de2803a 100644 > --- a/include/linux/shrinker.h > +++ b/include/linux/shrinker.h > @@ -19,7 +19,7 @@ struct shrinker_info_unit { > }; > > struct shrinker_info { > - struct rcu_head rcu; > + struct rcu_ptr rcu; > int map_nr_max; > struct shrinker_info_unit *unit[]; > }; > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index 41dd01e8430c..89c781dcab58 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -2596,7 +2596,7 @@ struct vmap_block { > DECLARE_BITMAP(used_map, VMAP_BBMAP_BITS); > unsigned long dirty_min, dirty_max; /*< dirty range */ > struct list_head free_list; > - struct rcu_head rcu_head; > + struct rcu_ptr rcu; > struct list_head purge; > unsigned int cpu; > }; > Why this change is needed?
If you want to save 8 bytes of vmap_block structure, then i do not see a big gain here. We do not have so many vmap_block objects. Am i missing something here? :) -- Uladzislau Rezki
