diff options
Diffstat (limited to 'mm/memcontrol.c')
-rw-r--r-- | mm/memcontrol.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 6ad309e9825f..964a70035e8f 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -1171,7 +1171,9 @@ __mem_cgroup_uncharge_common(struct page *page, enum charge_type ctype) | |||
1171 | mz = page_cgroup_zoneinfo(pc); | 1171 | mz = page_cgroup_zoneinfo(pc); |
1172 | unlock_page_cgroup(pc); | 1172 | unlock_page_cgroup(pc); |
1173 | 1173 | ||
1174 | css_put(&mem->css); | 1174 | /* at swapout, this memcg will be accessed to record to swap */ |
1175 | if (ctype != MEM_CGROUP_CHARGE_TYPE_SWAPOUT) | ||
1176 | css_put(&mem->css); | ||
1175 | 1177 | ||
1176 | return mem; | 1178 | return mem; |
1177 | 1179 | ||
@@ -1212,6 +1214,8 @@ void mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent) | |||
1212 | swap_cgroup_record(ent, memcg); | 1214 | swap_cgroup_record(ent, memcg); |
1213 | mem_cgroup_get(memcg); | 1215 | mem_cgroup_get(memcg); |
1214 | } | 1216 | } |
1217 | if (memcg) | ||
1218 | css_put(&memcg->css); | ||
1215 | } | 1219 | } |
1216 | 1220 | ||
1217 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP | 1221 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP |