Sync it with mem_cgroup->dcache. Disallow setting the limit, because we do not support it, and issue a warning if the user tries to set it via the legacy UB interface, just like we do in case with UB_KMEMSIZE.
Signed-off-by: Vladimir Davydov <vdavy...@parallels.com> --- kernel/bc/beancounter.c | 3 ++- kernel/bc/vm_pages.c | 1 - mm/memcontrol.c | 10 +++++++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/kernel/bc/beancounter.c b/kernel/bc/beancounter.c index 48f5a25d2add..60388ce7cf42 100644 --- a/kernel/bc/beancounter.c +++ b/kernel/bc/beancounter.c @@ -396,6 +396,7 @@ static inline int bc_verify_held(struct user_beancounter *ub) /* accounted by memcg */ ub->ub_parms[UB_KMEMSIZE].held = 0; + ub->ub_parms[UB_DCACHESIZE].held = 0; ub->ub_parms[UB_PHYSPAGES].held = 0; ub->ub_parms[UB_SWAPPAGES].held = 0; ub->ub_parms[UB_OOMGUARPAGES].held = 0; @@ -916,7 +917,7 @@ static void init_beancounter_syslimits(struct user_beancounter *ub) ub->ub_parms[UB_NUMFLOCK].limit = 1024; ub->ub_parms[UB_NUMPTY].limit = 16; ub->ub_parms[UB_NUMSIGINFO].limit = 1024; - ub->ub_parms[UB_DCACHESIZE].limit = 1024*1024; + ub->ub_parms[UB_DCACHESIZE].limit = UB_MAXVALUE; ub->ub_parms[UB_NUMFILE].limit = 1024; ub->ub_parms[UB_PHYSPAGES].limit = UB_MAXVALUE; ub->ub_parms[UB_SWAPPAGES].limit = UB_MAXVALUE; diff --git a/kernel/bc/vm_pages.c b/kernel/bc/vm_pages.c index e0e3c4550ceb..a6f311e33894 100644 --- a/kernel/bc/vm_pages.c +++ b/kernel/bc/vm_pages.c @@ -202,7 +202,6 @@ static int bc_fill_meminfo(struct user_beancounter *ub, mi->dirty_pages += pcpu->dirty_pages; mi->writeback_pages += pcpu->writeback_pages; - dcache -= pcpu->precharge[UB_DCACHESIZE]; } mi->dirty_pages = max_t(long, 0, mi->dirty_pages); diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 1871108bba17..dd7f6ef19d76 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -5335,9 +5335,10 @@ void mem_cgroup_sync_beancounter(struct cgroup *cg, struct user_beancounter *ub) { struct mem_cgroup *memcg = mem_cgroup_from_cont(cg); unsigned long long lim, held, maxheld; - volatile struct ubparm *k, *p, *s, *o; + volatile struct ubparm *k, *d, *p, *s, *o; k = &ub->ub_parms[UB_KMEMSIZE]; + d = &ub->ub_parms[UB_DCACHESIZE]; p = &ub->ub_parms[UB_PHYSPAGES]; s = &ub->ub_parms[UB_SWAPPAGES]; o = &ub->ub_parms[UB_OOMGUARPAGES]; @@ -5358,6 +5359,11 @@ void mem_cgroup_sync_beancounter(struct cgroup *cg, struct user_beancounter *ub) min_t(unsigned long long, lim, UB_MAXVALUE); k->barrier = k->limit = lim; + d->held = res_counter_read_u64(&memcg->dcache, RES_USAGE); + d->maxheld = res_counter_read_u64(&memcg->dcache, RES_MAX_USAGE); + d->failcnt = 0; + d->barrier = d->limit = UB_MAXVALUE; + held = (res_counter_read_u64(&memcg->memsw, RES_USAGE) - res_counter_read_u64(&memcg->res, RES_USAGE)) >> PAGE_SHIFT; maxheld = memcg->swap_max >> PAGE_SHIFT; @@ -5413,6 +5419,8 @@ int mem_cgroup_apply_beancounter(struct cgroup *cg, struct user_beancounter *ub) if (ub->ub_parms[UB_KMEMSIZE].limit != UB_MAXVALUE) pr_warn_once("ub: kmemsize limit is deprecated\n"); + if (ub->ub_parms[UB_DCACHESIZE].limit != UB_MAXVALUE) + pr_warn_once("ub: dcachesize limit is deprecated\n"); /* activate kmem accounting */ ret = memcg_update_kmem_limit(memcg, RESOURCE_MAX); -- 1.7.10.4 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel