|
@@ -1359,16 +1359,19 @@ void mem_cgroup_update_file_mapped(struct page *page, int val)
|
|
|
|
|
|
lock_page_cgroup(pc);
|
|
|
mem = pc->mem_cgroup;
|
|
|
- if (!mem)
|
|
|
- goto done;
|
|
|
-
|
|
|
- if (!PageCgroupUsed(pc))
|
|
|
+ if (!mem || !PageCgroupUsed(pc))
|
|
|
goto done;
|
|
|
|
|
|
/*
|
|
|
* Preemption is already disabled. We can use __this_cpu_xxx
|
|
|
*/
|
|
|
- __this_cpu_add(mem->stat->count[MEM_CGROUP_STAT_FILE_MAPPED], val);
|
|
|
+ if (val > 0) {
|
|
|
+ __this_cpu_inc(mem->stat->count[MEM_CGROUP_STAT_FILE_MAPPED]);
|
|
|
+ SetPageCgroupFileMapped(pc);
|
|
|
+ } else {
|
|
|
+ __this_cpu_dec(mem->stat->count[MEM_CGROUP_STAT_FILE_MAPPED]);
|
|
|
+ ClearPageCgroupFileMapped(pc);
|
|
|
+ }
|
|
|
|
|
|
done:
|
|
|
unlock_page_cgroup(pc);
|
|
@@ -1801,16 +1804,13 @@ static void __mem_cgroup_commit_charge(struct mem_cgroup *mem,
|
|
|
static void __mem_cgroup_move_account(struct page_cgroup *pc,
|
|
|
struct mem_cgroup *from, struct mem_cgroup *to, bool uncharge)
|
|
|
{
|
|
|
- struct page *page;
|
|
|
-
|
|
|
VM_BUG_ON(from == to);
|
|
|
VM_BUG_ON(PageLRU(pc->page));
|
|
|
VM_BUG_ON(!PageCgroupLocked(pc));
|
|
|
VM_BUG_ON(!PageCgroupUsed(pc));
|
|
|
VM_BUG_ON(pc->mem_cgroup != from);
|
|
|
|
|
|
- page = pc->page;
|
|
|
- if (page_mapped(page) && !PageAnon(page)) {
|
|
|
+ if (PageCgroupFileMapped(pc)) {
|
|
|
/* Update mapped_file data for mem_cgroup */
|
|
|
preempt_disable();
|
|
|
__this_cpu_dec(from->stat->count[MEM_CGROUP_STAT_FILE_MAPPED]);
|