hfsplus: prevent btree data loss on ENOSPC
[linux-2.6-block.git] / fs / proc / task_mmu.c
index 5ea1d64cb0b4c19c185ad67d5990c0ce03e82561..47c3764c469b01c24db489d38020e9bf0f021456 100644 (file)
@@ -521,7 +521,7 @@ static void smaps_pte_entry(pte_t *pte, unsigned long addr,
                if (!page)
                        return;
 
-               if (radix_tree_exceptional_entry(page))
+               if (xa_is_value(page))
                        mss->swap += PAGE_SIZE;
                else
                        put_page(page);
@@ -713,6 +713,8 @@ static void smap_gather_stats(struct vm_area_struct *vma,
        smaps_walk.private = mss;
 
 #ifdef CONFIG_SHMEM
+       /* In case of smaps_rollup, reset the value from previous vma */
+       mss->check_shmem_swap = false;
        if (vma->vm_file && shmem_mapping(vma->vm_file->f_mapping)) {
                /*
                 * For shared or readonly shmem mappings we know that all
@@ -728,7 +730,7 @@ static void smap_gather_stats(struct vm_area_struct *vma,
 
                if (!shmem_swapped || (vma->vm_flags & VM_SHARED) ||
                                        !(vma->vm_flags & VM_WRITE)) {
-                       mss->swap = shmem_swapped;
+                       mss->swap += shmem_swapped;
                } else {
                        mss->check_shmem_swap = true;
                        smaps_walk.pte_hole = smaps_pte_hole;