memcg: fix deadlock between lock_page_cgroup and mapping tree_lock
[sfrench/cifs-2.6.git] / mm / vmscan.c
index 5fa3eda1f03fccb6626f08c8e7bdad53326bce84..d254306562cda93af097d60ed024a71479c9da4d 100644 (file)
@@ -470,10 +470,12 @@ static int __remove_mapping(struct address_space *mapping, struct page *page)
                swp_entry_t swap = { .val = page_private(page) };
                __delete_from_swap_cache(page);
                spin_unlock_irq(&mapping->tree_lock);
+               mem_cgroup_uncharge_swapcache(page, swap);
                swap_free(swap);
        } else {
                __remove_from_page_cache(page);
                spin_unlock_irq(&mapping->tree_lock);
+               mem_cgroup_uncharge_cache_page(page);
        }
 
        return 1;