mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	ksm: no debug in page_dup_rmap()
page_dup_rmap(), used on each mapped page when forking, was originally just an inline atomic_inc of mapcount. 2.6.22 added CONFIG_DEBUG_VM out-of-line checks to it, which would need to be ever-so-slightly complicated to allow for the PageKsm() we're about to define. But I think these checks never caught anything. And if it's coding errors we're worried about, such checks should be in page_remove_rmap() too, not just when forking; whereas if it's pagetable corruption we're worried about, then they shouldn't be limited to CONFIG_DEBUG_VM. Oh, just revert page_dup_rmap() to an inline atomic_inc of mapcount. Signed-off-by: Hugh Dickins <hugh.dickins@tiscali.co.uk> Signed-off-by: Chris Wright <chrisw@redhat.com> Signed-off-by: Izik Eidus <ieidus@redhat.com> Cc: Nick Piggin <npiggin@suse.de> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Rik van Riel <riel@redhat.com> Cc: Wu Fengguang <fengguang.wu@intel.com> Cc: Balbir Singh <balbir@in.ibm.com> Cc: Hugh Dickins <hugh.dickins@tiscali.co.uk> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Lee Schermerhorn <lee.schermerhorn@hp.com> Cc: Avi Kivity <avi@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									f8af4da3b4
								
							
						
					
					
						commit
						21333b2b66
					
				
					 3 changed files with 2 additions and 27 deletions
				
			
		| 
						 | 
				
			
			@ -71,14 +71,10 @@ void page_add_new_anon_rmap(struct page *, struct vm_area_struct *, unsigned lon
 | 
			
		|||
void page_add_file_rmap(struct page *);
 | 
			
		||||
void page_remove_rmap(struct page *);
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_DEBUG_VM
 | 
			
		||||
void page_dup_rmap(struct page *page, struct vm_area_struct *vma, unsigned long address);
 | 
			
		||||
#else
 | 
			
		||||
static inline void page_dup_rmap(struct page *page, struct vm_area_struct *vma, unsigned long address)
 | 
			
		||||
static inline void page_dup_rmap(struct page *page)
 | 
			
		||||
{
 | 
			
		||||
	atomic_inc(&page->_mapcount);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Called from mm/vmscan.c to handle paging out
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -597,7 +597,7 @@ copy_one_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
 | 
			
		|||
	page = vm_normal_page(vma, addr, pte);
 | 
			
		||||
	if (page) {
 | 
			
		||||
		get_page(page);
 | 
			
		||||
		page_dup_rmap(page, vma, addr);
 | 
			
		||||
		page_dup_rmap(page);
 | 
			
		||||
		rss[!!PageAnon(page)]++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										21
									
								
								mm/rmap.c
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								mm/rmap.c
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -710,27 +710,6 @@ void page_add_file_rmap(struct page *page)
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_DEBUG_VM
 | 
			
		||||
/**
 | 
			
		||||
 * page_dup_rmap - duplicate pte mapping to a page
 | 
			
		||||
 * @page:	the page to add the mapping to
 | 
			
		||||
 * @vma:	the vm area being duplicated
 | 
			
		||||
 * @address:	the user virtual address mapped
 | 
			
		||||
 *
 | 
			
		||||
 * For copy_page_range only: minimal extract from page_add_file_rmap /
 | 
			
		||||
 * page_add_anon_rmap, avoiding unnecessary tests (already checked) so it's
 | 
			
		||||
 * quicker.
 | 
			
		||||
 *
 | 
			
		||||
 * The caller needs to hold the pte lock.
 | 
			
		||||
 */
 | 
			
		||||
void page_dup_rmap(struct page *page, struct vm_area_struct *vma, unsigned long address)
 | 
			
		||||
{
 | 
			
		||||
	if (PageAnon(page))
 | 
			
		||||
		__page_check_anon_rmap(page, vma, address);
 | 
			
		||||
	atomic_inc(&page->_mapcount);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * page_remove_rmap - take down pte mapping from a page
 | 
			
		||||
 * @page: page to remove mapping from
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue