KVM: s390: Fix user triggerable bug in dead code
[pandora-kernel.git] / mm / swapfile.c
index 4c524f7..8798b2e 100644 (file)
@@ -843,16 +843,13 @@ void swap_free(swp_entry_t entry)
 /*
  * Called after dropping swapcache to decrease refcnt to swap entries.
  */
-void swapcache_free(swp_entry_t entry, struct page *page)
+void swapcache_free(swp_entry_t entry)
 {
        struct swap_info_struct *p;
-       unsigned char count;
 
        p = swap_info_get(entry);
        if (p) {
-               count = swap_entry_free(p, entry, SWAP_HAS_CACHE);
-               if (page)
-                       mem_cgroup_uncharge_swapcache(page, entry, count != 0);
+               swap_entry_free(p, entry, SWAP_HAS_CACHE);
                spin_unlock(&p->lock);
        }
 }
@@ -1106,15 +1103,14 @@ static int unuse_pte(struct vm_area_struct *vma, pmd_t *pmd,
        if (unlikely(!page))
                return -ENOMEM;
 
-       if (mem_cgroup_try_charge_swapin(vma->vm_mm, page,
-                                        GFP_KERNEL, &memcg)) {
+       if (mem_cgroup_try_charge(page, vma->vm_mm, GFP_KERNEL, &memcg)) {
                ret = -ENOMEM;
                goto out_nolock;
        }
 
        pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
        if (unlikely(!maybe_same_pte(*pte, swp_entry_to_pte(entry)))) {
-               mem_cgroup_cancel_charge_swapin(memcg);
+               mem_cgroup_cancel_charge(page, memcg);
                ret = 0;
                goto out;
        }
@@ -1124,11 +1120,14 @@ static int unuse_pte(struct vm_area_struct *vma, pmd_t *pmd,
        get_page(page);
        set_pte_at(vma->vm_mm, addr, pte,
                   pte_mkold(mk_pte(page, vma->vm_page_prot)));
-       if (page == swapcache)
+       if (page == swapcache) {
                page_add_anon_rmap(page, vma, addr);
-       else /* ksm created a completely new copy */
+               mem_cgroup_commit_charge(page, memcg, true);
+       } else { /* ksm created a completely new copy */
                page_add_new_anon_rmap(page, vma, addr);
-       mem_cgroup_commit_charge_swapin(page, memcg);
+               mem_cgroup_commit_charge(page, memcg, false);
+               lru_cache_add_active_or_unevictable(page, vma);
+       }
        swap_free(entry);
        /*
         * Move the page to the active list so it is not