On 09.02.2021 20:46, Yang Shi wrote: > The shrinker_info is dereferenced in a couple of places via rcu_dereference_protected > with different calling conventions, for example, using mem_cgroup_nodeinfo helper > or dereferencing memcg->nodeinfo[nid]->shrinker_info. And the later patch > will add more dereference places. > > So extract the dereference into a helper to make the code more readable. No > functional change. > > Signed-off-by: Yang Shi <shy828301@xxxxxxxxx> Acked-by: Kirill Tkhai <ktkhai@xxxxxxxxxxxxx> > --- > mm/vmscan.c | 15 ++++++++++----- > 1 file changed, 10 insertions(+), 5 deletions(-) > > diff --git a/mm/vmscan.c b/mm/vmscan.c > index 9436f9246d32..273efbf4d53c 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -190,6 +190,13 @@ static int shrinker_nr_max; > #define NR_MAX_TO_SHR_MAP_SIZE(nr_max) \ > (DIV_ROUND_UP(nr_max, BITS_PER_LONG) * sizeof(unsigned long)) > > +static struct shrinker_info *shrinker_info_protected(struct mem_cgroup *memcg, > + int nid) > +{ > + return rcu_dereference_protected(memcg->nodeinfo[nid]->shrinker_info, > + lockdep_is_held(&shrinker_rwsem)); > +} > + > static void free_shrinker_info_rcu(struct rcu_head *head) > { > kvfree(container_of(head, struct shrinker_info, rcu)); > @@ -202,8 +209,7 @@ static int expand_one_shrinker_info(struct mem_cgroup *memcg, > int nid; > > for_each_node(nid) { > - old = rcu_dereference_protected( > - mem_cgroup_nodeinfo(memcg, nid)->shrinker_info, true); > + old = shrinker_info_protected(memcg, nid); > /* Not yet online memcg */ > if (!old) > return 0; > @@ -234,7 +240,7 @@ void free_shrinker_info(struct mem_cgroup *memcg) > > for_each_node(nid) { > pn = mem_cgroup_nodeinfo(memcg, nid); > - info = rcu_dereference_protected(pn->shrinker_info, true); > + info = shrinker_info_protected(memcg, nid); > kvfree(info); > rcu_assign_pointer(pn->shrinker_info, NULL); > } > @@ -674,8 +680,7 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, > if (!down_read_trylock(&shrinker_rwsem)) > return 0; > > - info = rcu_dereference_protected(memcg->nodeinfo[nid]->shrinker_info, > - true); > + info = shrinker_info_protected(memcg, nid); > if (unlikely(!info)) > goto unlock; > >