On Mon, Mar 27, 2023 at 11:16 PM Yosry Ahmed <yosryahmed@xxxxxxxxxx> wrote: > > Currently, all contexts that flush memcg stats do so with sleeping not > allowed. Some of these contexts are perfectly safe to sleep in, such as > reading cgroup files from userspace or the background periodic flusher. > > Refactor the code to make mem_cgroup_flush_stats() non-atomic (aka > sleepable), and provide a separate atomic version. The atomic version is > used in reclaim, refault, writeback, and in mem_cgroup_usage(). All > other code paths are left to use the non-atomic version. This includes > callbacks for userspace reads and the periodic flusher. > > Since refault is the only caller of mem_cgroup_flush_stats_ratelimited(), > this function is changed to call the atomic version of > mem_cgroup_flush_stats(). Reclaim and refault code paths are modified > to do non-atomic flushing in separate later patches -- so > mem_cgroup_flush_stats_ratelimited() will eventually become non-atomic. > > Signed-off-by: Yosry Ahmed <yosryahmed@xxxxxxxxxx> Acked-by: Shakeel Butt <shakeelb@xxxxxxxxxx>