Skip to contentSkip to conversation

mm: memcontrol: switch to rstat

bug report Dan Carpenter 1 participant 1 message Jul 5, 2021 cgroup

lore
Share & tools
lore
#0 lore raw

Hello Johannes Weiner,

The patch 2d146aa3aa84: "mm: memcontrol: switch to rstat" from Apr 29, 2021, leads to the following static checker warning:

kernel/cgroup/rstat.c:200 cgroup_rstat_flush()
warn: sleeping in atomic context

mm/memcontrol.c
3572 static unsigned long mem_cgroup_usage(struct mem_cgroup *memcg, bool swap) 3573 {
3574 unsigned long val;
3575
3576 if (mem_cgroup_is_root(memcg)) {

  3577                  cgroup_rstat_flush(memcg->css.cgroup);
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

This is from static analysis and potentially a false positive. The problem is that mem_cgroup_usage() is called from __mem_cgroup_threshold() which holds an rcu_read_lock(). And the cgroup_rstat_flush() function can sleep.

  3578                  val = memcg_page_state(memcg, NR_FILE_PAGES) +
  3579                          memcg_page_state(memcg, NR_ANON_MAPPED);
  3580                  if (swap)
  3581                          val += memcg_page_state(memcg, MEMCG_SWAP);
  3582          } else {
  3583                  if (!swap)
  3584                          val = page_counter_read(&memcg->memory);
  3585                  else
  3586                          val = page_counter_read(&memcg->memsw);
  3587          }
  3588          return val;
  3589  }

regards,
dan carpenter