diff options
| author | Hillf Danton <dhillf@gmail.com> | 2012-03-23 15:01:48 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-23 16:58:31 -0700 | 
| commit | 6629326b89b6e69cc44276e1649a31158bb2c819 (patch) | |
| tree | ca9463de7f327189cece1111112d2641114f3acc /mm/hugetlb.c | |
| parent | 934e18b5cb4531cc6e81865bf54115cfd21d1ac6 (diff) | |
| download | olio-linux-3.10-6629326b89b6e69cc44276e1649a31158bb2c819.tar.xz olio-linux-3.10-6629326b89b6e69cc44276e1649a31158bb2c819.zip  | |
mm: hugetlb: cleanup duplicated code in unmapping vm range
Fix code duplication in __unmap_hugepage_range(), such as pte_page() and
huge_pte_none().
Signed-off-by: Hillf Danton <dhillf@gmail.com>
Cc: Michal Hocko <mhocko@suse.cz>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Hugh Dickins <hughd@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/hugetlb.c')
| -rw-r--r-- | mm/hugetlb.c | 25 | 
1 files changed, 11 insertions, 14 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index afa057a1d3f..b8ce6f45095 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -2331,16 +2331,23 @@ void __unmap_hugepage_range(struct vm_area_struct *vma, unsigned long start,  		if (huge_pmd_unshare(mm, &address, ptep))  			continue; +		pte = huge_ptep_get(ptep); +		if (huge_pte_none(pte)) +			continue; + +		/* +		 * HWPoisoned hugepage is already unmapped and dropped reference +		 */ +		if (unlikely(is_hugetlb_entry_hwpoisoned(pte))) +			continue; + +		page = pte_page(pte);  		/*  		 * If a reference page is supplied, it is because a specific  		 * page is being unmapped, not a range. Ensure the page we  		 * are about to unmap is the actual page of interest.  		 */  		if (ref_page) { -			pte = huge_ptep_get(ptep); -			if (huge_pte_none(pte)) -				continue; -			page = pte_page(pte);  			if (page != ref_page)  				continue; @@ -2353,16 +2360,6 @@ void __unmap_hugepage_range(struct vm_area_struct *vma, unsigned long start,  		}  		pte = huge_ptep_get_and_clear(mm, address, ptep); -		if (huge_pte_none(pte)) -			continue; - -		/* -		 * HWPoisoned hugepage is already unmapped and dropped reference -		 */ -		if (unlikely(is_hugetlb_entry_hwpoisoned(pte))) -			continue; - -		page = pte_page(pte);  		if (pte_dirty(pte))  			set_page_dirty(page);  		list_add(&page->lru, &page_list);  |