diff options
Diffstat (limited to 'mm/mincore.c')
| -rw-r--r-- | mm/mincore.c | 27 | 
1 files changed, 14 insertions, 13 deletions
diff --git a/mm/mincore.c b/mm/mincore.c index da2be56a7b8..725c8096104 100644 --- a/mm/mincore.c +++ b/mm/mincore.c @@ -70,13 +70,21 @@ static unsigned char mincore_page(struct address_space *mapping, pgoff_t pgoff)  	 * any other file mapping (ie. marked !present and faulted in with  	 * tmpfs's .fault). So swapped out tmpfs mappings are tested here.  	 */ -	page = find_get_page(mapping, pgoff);  #ifdef CONFIG_SWAP -	/* shmem/tmpfs may return swap: account for swapcache page too. */ -	if (radix_tree_exceptional_entry(page)) { -		swp_entry_t swap = radix_to_swp_entry(page); -		page = find_get_page(swap_address_space(swap), swap.val); -	} +	if (shmem_mapping(mapping)) { +		page = find_get_entry(mapping, pgoff); +		/* +		 * shmem/tmpfs may return swap: account for swapcache +		 * page too. +		 */ +		if (radix_tree_exceptional_entry(page)) { +			swp_entry_t swp = radix_to_swp_entry(page); +			page = find_get_page(swap_address_space(swp), swp.val); +		} +	} else +		page = find_get_page(mapping, pgoff); +#else +	page = find_get_page(mapping, pgoff);  #endif  	if (page) {  		present = PageUptodate(page); @@ -225,13 +233,6 @@ static long do_mincore(unsigned long addr, unsigned long pages, unsigned char *v  	end = min(vma->vm_end, addr + (pages << PAGE_SHIFT)); -	if (is_vm_hugetlb_page(vma)) { -		mincore_hugetlb_page_range(vma, addr, end, vec); -		return (end - addr) >> PAGE_SHIFT; -	} - -	end = pmd_addr_end(addr, end); -  	if (is_vm_hugetlb_page(vma))  		mincore_hugetlb_page_range(vma, addr, end, vec);  	else  | 
