|
@@ -698,8 +698,10 @@ static int unuse_pte(struct vm_area_struct *vma, pmd_t *pmd,
|
|
pte_t *pte;
|
|
pte_t *pte;
|
|
int ret = 1;
|
|
int ret = 1;
|
|
|
|
|
|
- if (mem_cgroup_try_charge_swapin(vma->vm_mm, page, GFP_KERNEL, &ptr))
|
|
|
|
|
|
+ if (mem_cgroup_try_charge_swapin(vma->vm_mm, page, GFP_KERNEL, &ptr)) {
|
|
ret = -ENOMEM;
|
|
ret = -ENOMEM;
|
|
|
|
+ goto out_nolock;
|
|
|
|
+ }
|
|
|
|
|
|
pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
|
|
pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
|
|
if (unlikely(!pte_same(*pte, swp_entry_to_pte(entry)))) {
|
|
if (unlikely(!pte_same(*pte, swp_entry_to_pte(entry)))) {
|
|
@@ -723,6 +725,7 @@ static int unuse_pte(struct vm_area_struct *vma, pmd_t *pmd,
|
|
activate_page(page);
|
|
activate_page(page);
|
|
out:
|
|
out:
|
|
pte_unmap_unlock(pte, ptl);
|
|
pte_unmap_unlock(pte, ptl);
|
|
|
|
+out_nolock:
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|