#define NR_MEMCG_NODE_STAT_ITEMS ARRAY_SIZE(memcg_node_stat_items)
 #define MEMCG_VMSTAT_SIZE (NR_MEMCG_NODE_STAT_ITEMS + \
                           ARRAY_SIZE(memcg_stat_items))
-static int8_t mem_cgroup_stats_index[MEMCG_NR_STAT] __read_mostly;
+#define IS_INVALID(index) ((index) == U8_MAX)
+static u8 mem_cgroup_stats_index[MEMCG_NR_STAT] __read_mostly;
 
 static void init_memcg_stats(void)
 {
-       int8_t i, j = 0;
+       u8 i, j = 0;
 
-       BUILD_BUG_ON(MEMCG_NR_STAT >= S8_MAX);
+       BUILD_BUG_ON(MEMCG_NR_STAT >= U8_MAX);
 
-       for (i = 0; i < NR_MEMCG_NODE_STAT_ITEMS; ++i)
-               mem_cgroup_stats_index[memcg_node_stat_items[i]] = ++j;
+       memset(mem_cgroup_stats_index, U8_MAX, sizeof(mem_cgroup_stats_index));
 
-       for (i = 0; i < ARRAY_SIZE(memcg_stat_items); ++i)
-               mem_cgroup_stats_index[memcg_stat_items[i]] = ++j;
+       for (i = 0; i < NR_MEMCG_NODE_STAT_ITEMS; ++i, ++j)
+               mem_cgroup_stats_index[memcg_node_stat_items[i]] = j;
+
+       for (i = 0; i < ARRAY_SIZE(memcg_stat_items); ++i, ++j)
+               mem_cgroup_stats_index[memcg_stat_items[i]] = j;
 }
 
 static inline int memcg_stats_index(int idx)
 {
-       return mem_cgroup_stats_index[idx] - 1;
+       return mem_cgroup_stats_index[idx];
 }
 
 struct lruvec_stats_percpu {
                return node_page_state(lruvec_pgdat(lruvec), idx);
 
        i = memcg_stats_index(idx);
-       if (WARN_ONCE(i < 0, "%s: missing stat item %d\n", __func__, idx))
+       if (WARN_ONCE(IS_INVALID(i), "%s: missing stat item %d\n", __func__, idx))
                return 0;
 
        pn = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
                return node_page_state(lruvec_pgdat(lruvec), idx);
 
        i = memcg_stats_index(idx);
-       if (WARN_ONCE(i < 0, "%s: missing stat item %d\n", __func__, idx))
+       if (WARN_ONCE(IS_INVALID(i), "%s: missing stat item %d\n", __func__, idx))
                return 0;
 
        pn = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
 };
 
 #define NR_MEMCG_EVENTS ARRAY_SIZE(memcg_vm_event_stat)
-static int8_t mem_cgroup_events_index[NR_VM_EVENT_ITEMS] __read_mostly;
+static u8 mem_cgroup_events_index[NR_VM_EVENT_ITEMS] __read_mostly;
 
 static void init_memcg_events(void)
 {
-       int8_t i;
+       u8 i;
+
+       BUILD_BUG_ON(NR_VM_EVENT_ITEMS >= U8_MAX);
 
-       BUILD_BUG_ON(NR_VM_EVENT_ITEMS >= S8_MAX);
+       memset(mem_cgroup_events_index, U8_MAX,
+              sizeof(mem_cgroup_events_index));
 
        for (i = 0; i < NR_MEMCG_EVENTS; ++i)
-               mem_cgroup_events_index[memcg_vm_event_stat[i]] = i + 1;
+               mem_cgroup_events_index[memcg_vm_event_stat[i]] = i;
 }
 
 static inline int memcg_events_index(enum vm_event_item idx)
 {
-       return mem_cgroup_events_index[idx] - 1;
+       return mem_cgroup_events_index[idx];
 }
 
 struct memcg_vmstats_percpu {
        long x;
        int i = memcg_stats_index(idx);
 
-       if (WARN_ONCE(i < 0, "%s: missing stat item %d\n", __func__, idx))
+       if (WARN_ONCE(IS_INVALID(i), "%s: missing stat item %d\n", __func__, idx))
                return 0;
 
        x = READ_ONCE(memcg->vmstats->state[i]);
        if (mem_cgroup_disabled())
                return;
 
-       if (WARN_ONCE(i < 0, "%s: missing stat item %d\n", __func__, idx))
+       if (WARN_ONCE(IS_INVALID(i), "%s: missing stat item %d\n", __func__, idx))
                return;
 
        __this_cpu_add(memcg->vmstats_percpu->state[i], val);
        long x;
        int i = memcg_stats_index(idx);
 
-       if (WARN_ONCE(i < 0, "%s: missing stat item %d\n", __func__, idx))
+       if (WARN_ONCE(IS_INVALID(i), "%s: missing stat item %d\n", __func__, idx))
                return 0;
 
        x = READ_ONCE(memcg->vmstats->state_local[i]);
        struct mem_cgroup *memcg;
        int i = memcg_stats_index(idx);
 
-       if (WARN_ONCE(i < 0, "%s: missing stat item %d\n", __func__, idx))
+       if (WARN_ONCE(IS_INVALID(i), "%s: missing stat item %d\n", __func__, idx))
                return;
 
        pn = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
        if (mem_cgroup_disabled())
                return;
 
-       if (WARN_ONCE(i < 0, "%s: missing stat item %d\n", __func__, idx))
+       if (WARN_ONCE(IS_INVALID(i), "%s: missing stat item %d\n", __func__, idx))
                return;
 
        memcg_stats_lock();
 {
        int i = memcg_events_index(event);
 
-       if (WARN_ONCE(i < 0, "%s: missing stat item %d\n", __func__, event))
+       if (WARN_ONCE(IS_INVALID(i), "%s: missing stat item %d\n", __func__, event))
                return 0;
 
        return READ_ONCE(memcg->vmstats->events[i]);
 {
        int i = memcg_events_index(event);
 
-       if (WARN_ONCE(i < 0, "%s: missing stat item %d\n", __func__, event))
+       if (WARN_ONCE(IS_INVALID(i), "%s: missing stat item %d\n", __func__, event))
                return 0;
 
        return READ_ONCE(memcg->vmstats->events_local[i]);