|
@@ -2987,8 +2987,7 @@ __mem_cgroup_uncharge_common(struct page *page, enum charge_type ctype,
|
|
|
if (mem_cgroup_disabled())
|
|
|
return NULL;
|
|
|
|
|
|
- if (PageSwapCache(page))
|
|
|
- return NULL;
|
|
|
+ VM_BUG_ON(PageSwapCache(page));
|
|
|
|
|
|
if (PageTransHuge(page)) {
|
|
|
nr_pages <<= compound_order(page);
|
|
@@ -3085,6 +3084,8 @@ void mem_cgroup_uncharge_page(struct page *page)
|
|
|
if (page_mapped(page))
|
|
|
return;
|
|
|
VM_BUG_ON(page->mapping && !PageAnon(page));
|
|
|
+ if (PageSwapCache(page))
|
|
|
+ return;
|
|
|
__mem_cgroup_uncharge_common(page, MEM_CGROUP_CHARGE_TYPE_ANON, false);
|
|
|
}
|
|
|
|
|
@@ -3092,6 +3093,8 @@ void mem_cgroup_uncharge_cache_page(struct page *page)
|
|
|
{
|
|
|
VM_BUG_ON(page_mapped(page));
|
|
|
VM_BUG_ON(page->mapping);
|
|
|
+ if (PageSwapCache(page))
|
|
|
+ return;
|
|
|
__mem_cgroup_uncharge_common(page, MEM_CGROUP_CHARGE_TYPE_CACHE, false);
|
|
|
}
|
|
|
|
|
@@ -3156,6 +3159,8 @@ mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout)
|
|
|
if (!swapout) /* this was a swap cache but the swap is unused ! */
|
|
|
ctype = MEM_CGROUP_CHARGE_TYPE_DROP;
|
|
|
|
|
|
+ if (PageSwapCache(page))
|
|
|
+ return;
|
|
|
memcg = __mem_cgroup_uncharge_common(page, ctype, false);
|
|
|
|
|
|
/*
|
|
@@ -3345,10 +3350,11 @@ void mem_cgroup_end_migration(struct mem_cgroup *memcg,
|
|
|
unused = oldpage;
|
|
|
}
|
|
|
anon = PageAnon(used);
|
|
|
- __mem_cgroup_uncharge_common(unused,
|
|
|
- anon ? MEM_CGROUP_CHARGE_TYPE_ANON
|
|
|
- : MEM_CGROUP_CHARGE_TYPE_CACHE,
|
|
|
- true);
|
|
|
+ if (!PageSwapCache(unused))
|
|
|
+ __mem_cgroup_uncharge_common(unused,
|
|
|
+ anon ? MEM_CGROUP_CHARGE_TYPE_ANON
|
|
|
+ : MEM_CGROUP_CHARGE_TYPE_CACHE,
|
|
|
+ true);
|
|
|
css_put(&memcg->css);
|
|
|
/*
|
|
|
* We disallowed uncharge of pages under migration because mapcount
|