vserver 1.9.3
[linux-2.6.git] / mm / memory.c
index adaca7c..ea40537 100644 (file)
@@ -1129,12 +1129,12 @@ no_new_page:
 static inline void unmap_mapping_range_list(struct prio_tree_root *root,
                                            struct zap_details *details)
 {
-       struct vm_area_struct *vma = NULL;
+       struct vm_area_struct *vma;
        struct prio_tree_iter iter;
        pgoff_t vba, vea, zba, zea;
 
-       while ((vma = vma_prio_tree_next(vma, root, &iter,
-                       details->first_index, details->last_index)) != NULL) {
+       vma_prio_tree_foreach(vma, &iter, root,
+                       details->first_index, details->last_index) {
                vba = vma->vm_pgoff;
                vea = vba + ((vma->vm_end - vma->vm_start) >> PAGE_SHIFT) - 1;
                /* Assume for now that PAGE_CACHE_SHIFT == PAGE_SHIFT */
@@ -1357,6 +1357,7 @@ static int do_swap_page(struct mm_struct * mm,
                /* Had to read the page from swap area: Major fault */
                ret = VM_FAULT_MAJOR;
                inc_page_state(pgmajfault);
+               grab_swap_token();
        }
 
        if (!vx_rsspages_avail(mm, 1)) {
@@ -1761,6 +1762,8 @@ int make_pages_present(unsigned long addr, unsigned long end)
        struct vm_area_struct * vma;
 
        vma = find_vma(current->mm, addr);
+       if (!vma)
+               return -1;
        write = (vma->vm_flags & VM_WRITE) != 0;
        if (addr >= end)
                BUG();