5.3 swappiness
 
-Similar to /proc/sys/vm/swappiness, but only affecting reclaim that is
-triggered by this cgroup's hard limit.  The tunable in the root cgroup
-corresponds to the global swappiness setting.
-
-Please note that unlike the global swappiness, memcg knob set to 0
-really prevents from any swapping even if there is a swap storage
-available. This might lead to memcg OOM killer if there are no file
-pages to reclaim.
+Overrides /proc/sys/vm/swappiness for the particular group. The tunable
+in the root cgroup corresponds to the global swappiness setting.
+
+Please note that unlike during the global reclaim, limit reclaim
+enforces that 0 swappiness really prevents from any swapping even if
+there is a swap storage available. This might lead to memcg OOM killer
+if there are no file pages to reclaim.
 
 5.4 failcnt
 
 
        /* Scan (total_size >> priority) pages at once */
        int priority;
 
+       /* anon vs. file LRUs scanning "ratio" */
+       int swappiness;
+
        /*
         * The memory cgroup that hit its limit and as a result is the
         * primary target of this reclaim invocation.
        return shrink_inactive_list(nr_to_scan, lruvec, sc, lru);
 }
 
-static int vmscan_swappiness(struct scan_control *sc)
-{
-       if (global_reclaim(sc))
-               return vm_swappiness;
-       return mem_cgroup_swappiness(sc->target_mem_cgroup);
-}
-
 enum scan_balance {
        SCAN_EQUAL,
        SCAN_FRACT,
         * using the memory controller's swap limit feature would be
         * too expensive.
         */
-       if (!global_reclaim(sc) && !vmscan_swappiness(sc)) {
+       if (!global_reclaim(sc) && !sc->swappiness) {
                scan_balance = SCAN_FILE;
                goto out;
        }
         * system is close to OOM, scan both anon and file equally
         * (unless the swappiness setting disagrees with swapping).
         */
-       if (!sc->priority && vmscan_swappiness(sc)) {
+       if (!sc->priority && sc->swappiness) {
                scan_balance = SCAN_EQUAL;
                goto out;
        }
         * With swappiness at 100, anonymous and file have the same priority.
         * This scanning priority is essentially the inverse of IO cost.
         */
-       anon_prio = vmscan_swappiness(sc);
+       anon_prio = sc->swappiness;
        file_prio = 200 - anon_prio;
 
        /*
 
                        lruvec = mem_cgroup_zone_lruvec(zone, memcg);
 
+                       sc->swappiness = mem_cgroup_swappiness(memcg);
                        shrink_lruvec(lruvec, sc);
 
                        /*
                .may_swap = !noswap,
                .order = 0,
                .priority = 0,
+               .swappiness = mem_cgroup_swappiness(memcg),
                .target_mem_cgroup = memcg,
        };
        struct lruvec *lruvec = mem_cgroup_zone_lruvec(zone, memcg);