• Tejun Heo's avatar
    writeback: fix incorrect calculation of available memory for memcg domains · c5edf9cd
    Tejun Heo authored
    For memcg domains, the amount of available memory was calculated as
     min(the amount currently in use + headroom according to memcg,
         total clean memory)
    This isn't quite correct as what should be capped by the amount of
    clean memory is the headroom, not the sum of memory in use and
    headroom.  For example, if a memcg domain has a significant amount of
    dirty memory, the above can lead to a value which is lower than the
    current amount in use which doesn't make much sense.  In most
    circumstances, the above leads to a number which is somewhat but not
    drastically lower.
    As the amount of memory which can be readily allocated to the memcg
    domain is capped by the amount of system-wide clean memory which is
    not already assigned to the memcg itself, the number we want is
     the amount currently in use +
     min(headroom according to memcg, clean memory elsewhere in the system)
    This patch updates mem_cgroup_wb_stats() to return the number of
    filepages and headroom instead of the calculated available pages.
    mdtc_cap_avail() is renamed to mdtc_calc_avail() and performs the
    above calculation from file, headroom, dirty and globally clean pages.
    v2: Dummy mem_cgroup_wb_stats() implementation wasn't updated leading
        to build failure when !CGROUP_WRITEBACK.  Fixed.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Fixes: c2aa723a ("writeback: implement memcg writeback domain based throttling")
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
page-writeback.c 83.6 KB