return memcg_page_state(memcg, item) * memcg_page_state_unit(item);
 }
 
-static void memory_stat_format(struct mem_cgroup *memcg, struct seq_buf *s)
+static void memcg_stat_format(struct mem_cgroup *memcg, struct seq_buf *s)
 {
        int i;
 
        WARN_ON_ONCE(seq_buf_has_overflowed(s));
 }
 
+static void memcg1_stat_format(struct mem_cgroup *memcg, struct seq_buf *s);
+
+static void memory_stat_format(struct mem_cgroup *memcg, struct seq_buf *s)
+{
+       if (cgroup_subsys_on_dfl(memory_cgrp_subsys))
+               memcg_stat_format(memcg, s);
+       else
+               memcg1_stat_format(memcg, s);
+       WARN_ON_ONCE(seq_buf_has_overflowed(s));
+}
+
 #define K(x) ((x) << (PAGE_SHIFT-10))
 /**
  * mem_cgroup_print_oom_context: Print OOM information relevant to
        PGMAJFAULT,
 };
 
-static int memcg_stat_show(struct seq_file *m, void *v)
+static void memcg1_stat_format(struct mem_cgroup *memcg, struct seq_buf *s)
 {
-       struct mem_cgroup *memcg = mem_cgroup_from_seq(m);
        unsigned long memory, memsw;
        struct mem_cgroup *mi;
        unsigned int i;
                if (memcg1_stats[i] == MEMCG_SWAP && !do_memsw_account())
                        continue;
                nr = memcg_page_state_local(memcg, memcg1_stats[i]);
-               seq_printf(m, "%s %lu\n", memcg1_stat_names[i],
+               seq_buf_printf(s, "%s %lu\n", memcg1_stat_names[i],
                           nr * memcg_page_state_unit(memcg1_stats[i]));
        }
 
        for (i = 0; i < ARRAY_SIZE(memcg1_events); i++)
-               seq_printf(m, "%s %lu\n", vm_event_name(memcg1_events[i]),
-                          memcg_events_local(memcg, memcg1_events[i]));
+               seq_buf_printf(s, "%s %lu\n", vm_event_name(memcg1_events[i]),
+                              memcg_events_local(memcg, memcg1_events[i]));
 
        for (i = 0; i < NR_LRU_LISTS; i++)
-               seq_printf(m, "%s %lu\n", lru_list_name(i),
-                          memcg_page_state_local(memcg, NR_LRU_BASE + i) *
-                          PAGE_SIZE);
+               seq_buf_printf(s, "%s %lu\n", lru_list_name(i),
+                              memcg_page_state_local(memcg, NR_LRU_BASE + i) *
+                              PAGE_SIZE);
 
        /* Hierarchical information */
        memory = memsw = PAGE_COUNTER_MAX;
                memory = min(memory, READ_ONCE(mi->memory.max));
                memsw = min(memsw, READ_ONCE(mi->memsw.max));
        }
-       seq_printf(m, "hierarchical_memory_limit %llu\n",
-                  (u64)memory * PAGE_SIZE);
+       seq_buf_printf(s, "hierarchical_memory_limit %llu\n",
+                      (u64)memory * PAGE_SIZE);
        if (do_memsw_account())
-               seq_printf(m, "hierarchical_memsw_limit %llu\n",
-                          (u64)memsw * PAGE_SIZE);
+               seq_buf_printf(s, "hierarchical_memsw_limit %llu\n",
+                              (u64)memsw * PAGE_SIZE);
 
        for (i = 0; i < ARRAY_SIZE(memcg1_stats); i++) {
                unsigned long nr;
                if (memcg1_stats[i] == MEMCG_SWAP && !do_memsw_account())
                        continue;
                nr = memcg_page_state(memcg, memcg1_stats[i]);
-               seq_printf(m, "total_%s %llu\n", memcg1_stat_names[i],
+               seq_buf_printf(s, "total_%s %llu\n", memcg1_stat_names[i],
                           (u64)nr * memcg_page_state_unit(memcg1_stats[i]));
        }
 
        for (i = 0; i < ARRAY_SIZE(memcg1_events); i++)
-               seq_printf(m, "total_%s %llu\n",
-                          vm_event_name(memcg1_events[i]),
-                          (u64)memcg_events(memcg, memcg1_events[i]));
+               seq_buf_printf(s, "total_%s %llu\n",
+                              vm_event_name(memcg1_events[i]),
+                              (u64)memcg_events(memcg, memcg1_events[i]));
 
        for (i = 0; i < NR_LRU_LISTS; i++)
-               seq_printf(m, "total_%s %llu\n", lru_list_name(i),
-                          (u64)memcg_page_state(memcg, NR_LRU_BASE + i) *
-                          PAGE_SIZE);
+               seq_buf_printf(s, "total_%s %llu\n", lru_list_name(i),
+                              (u64)memcg_page_state(memcg, NR_LRU_BASE + i) *
+                              PAGE_SIZE);
 
 #ifdef CONFIG_DEBUG_VM
        {
                        anon_cost += mz->lruvec.anon_cost;
                        file_cost += mz->lruvec.file_cost;
                }
-               seq_printf(m, "anon_cost %lu\n", anon_cost);
-               seq_printf(m, "file_cost %lu\n", file_cost);
+               seq_buf_printf(s, "anon_cost %lu\n", anon_cost);
+               seq_buf_printf(s, "file_cost %lu\n", file_cost);
        }
 #endif
-
-       return 0;
 }
 
 static u64 mem_cgroup_swappiness_read(struct cgroup_subsys_state *css,
 }
 #endif
 
+static int memory_stat_show(struct seq_file *m, void *v);
+
 static struct cftype mem_cgroup_legacy_files[] = {
        {
                .name = "usage_in_bytes",
        },
        {
                .name = "stat",
-               .seq_show = memcg_stat_show,
+               .seq_show = memory_stat_show,
        },
        {
                .name = "force_empty",