ACPI: Enhance /sys/firmware/interrupts to allow enable/disable/clear from user-space
[linux-2.6.git] / mm / mincore.c
index 9c1d0a4..5178800 100644 (file)
@@ -33,7 +33,7 @@ static unsigned char mincore_page(struct address_space *mapping, pgoff_t pgoff)
         * When tmpfs swaps out a page from a file, any process mapping that
         * file will not get a swp_entry_t in its pte, but rather it is like
         * any other file mapping (ie. marked !present and faulted in with
-        * tmpfs's .nopage). So swapped out tmpfs mappings are tested here.
+        * tmpfs's .fault). So swapped out tmpfs mappings are tested here.
         *
         * However when tmpfs moves the page from pagecache and into swapcache,
         * it is still in core, but the find_get_page below won't find it.
@@ -77,8 +77,16 @@ static long do_mincore(unsigned long addr, unsigned char *vec, unsigned long pag
         * PTE array for our address.
         */
        nr = PTRS_PER_PTE - ((addr >> PAGE_SHIFT) & (PTRS_PER_PTE-1));
-       if (nr > pages)
-               nr = pages;
+
+       /*
+        * Don't overrun this vma
+        */
+       nr = min(nr, (vma->vm_end - addr) >> PAGE_SHIFT);
+
+       /*
+        * Don't return more than the caller asked for
+        */
+       nr = min(nr, pages);
 
        pgd = pgd_offset(vma->vm_mm, addr);
        if (pgd_none_or_clear_bad(pgd))