forked from mirrors/linux
		
	 053837fce7
			
		
	
	
		053837fce7
		
	
	
	
	
		
			
			Migration code currently does not take a reference to target page properly, so between unlocking the pte and trying to take a new reference to the page with isolate_lru_page, anything could happen to it. Fix this by holding the pte lock until we get a chance to elevate the refcount. Other small cleanups while we're here. Signed-off-by: Nick Piggin <npiggin@suse.de> Signed-off-by: Christoph Lameter <clameter@sgi.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
		
			
				
	
	
		
			41 lines
		
	
	
	
		
			781 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			781 B
		
	
	
	
		
			C
		
	
	
	
	
	
| 
 | |
| static inline void
 | |
| add_page_to_active_list(struct zone *zone, struct page *page)
 | |
| {
 | |
| 	list_add(&page->lru, &zone->active_list);
 | |
| 	zone->nr_active++;
 | |
| }
 | |
| 
 | |
| static inline void
 | |
| add_page_to_inactive_list(struct zone *zone, struct page *page)
 | |
| {
 | |
| 	list_add(&page->lru, &zone->inactive_list);
 | |
| 	zone->nr_inactive++;
 | |
| }
 | |
| 
 | |
| static inline void
 | |
| del_page_from_active_list(struct zone *zone, struct page *page)
 | |
| {
 | |
| 	list_del(&page->lru);
 | |
| 	zone->nr_active--;
 | |
| }
 | |
| 
 | |
| static inline void
 | |
| del_page_from_inactive_list(struct zone *zone, struct page *page)
 | |
| {
 | |
| 	list_del(&page->lru);
 | |
| 	zone->nr_inactive--;
 | |
| }
 | |
| 
 | |
| static inline void
 | |
| del_page_from_lru(struct zone *zone, struct page *page)
 | |
| {
 | |
| 	list_del(&page->lru);
 | |
| 	if (PageActive(page)) {
 | |
| 		ClearPageActive(page);
 | |
| 		zone->nr_active--;
 | |
| 	} else {
 | |
| 		zone->nr_inactive--;
 | |
| 	}
 | |
| }
 | |
| 
 |