forked from mirrors/linux
		
	mm: remove SWAP_MLOCK in ttu
ttu doesn't need to return SWAP_MLOCK. Instead, just return SWAP_FAIL because it means the page is not-swappable so it should move to another LRU list(active or unevictable). putback friends will move it to right list depending on the page's LRU flag. Link: http://lkml.kernel.org/r/1489555493-14659-6-git-send-email-minchan@kernel.org Signed-off-by: Minchan Kim <minchan@kernel.org> Cc: Anshuman Khandual <khandual@linux.vnet.ibm.com> Cc: Hillf Danton <hillf.zj@alibaba-inc.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Michal Hocko <mhocko@suse.com> Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									192d723256
								
							
						
					
					
						commit
						ad6b67041a
					
				
					 3 changed files with 8 additions and 16 deletions
				
			
		| 
						 | 
					@ -297,6 +297,5 @@ static inline int page_mkclean(struct page *page)
 | 
				
			||||||
#define SWAP_SUCCESS	0
 | 
					#define SWAP_SUCCESS	0
 | 
				
			||||||
#define SWAP_AGAIN	1
 | 
					#define SWAP_AGAIN	1
 | 
				
			||||||
#define SWAP_FAIL	2
 | 
					#define SWAP_FAIL	2
 | 
				
			||||||
#define SWAP_MLOCK	3
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif	/* _LINUX_RMAP_H */
 | 
					#endif	/* _LINUX_RMAP_H */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1329,7 +1329,7 @@ static int try_to_unmap_one(struct page *page, struct vm_area_struct *vma,
 | 
				
			||||||
					 */
 | 
										 */
 | 
				
			||||||
					mlock_vma_page(page);
 | 
										mlock_vma_page(page);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				ret = SWAP_MLOCK;
 | 
									ret = SWAP_FAIL;
 | 
				
			||||||
				page_vma_mapped_walk_done(&pvmw);
 | 
									page_vma_mapped_walk_done(&pvmw);
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
| 
						 | 
					@ -1506,7 +1506,6 @@ static int page_mapcount_is_zero(struct page *page)
 | 
				
			||||||
 * SWAP_SUCCESS	- we succeeded in removing all mappings
 | 
					 * SWAP_SUCCESS	- we succeeded in removing all mappings
 | 
				
			||||||
 * SWAP_AGAIN	- we missed a mapping, try again later
 | 
					 * SWAP_AGAIN	- we missed a mapping, try again later
 | 
				
			||||||
 * SWAP_FAIL	- the page is unswappable
 | 
					 * SWAP_FAIL	- the page is unswappable
 | 
				
			||||||
 * SWAP_MLOCK	- page is mlocked.
 | 
					 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
int try_to_unmap(struct page *page, enum ttu_flags flags)
 | 
					int try_to_unmap(struct page *page, enum ttu_flags flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										20
									
								
								mm/vmscan.c
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								mm/vmscan.c
									
									
									
									
									
								
							| 
						 | 
					@ -987,7 +987,7 @@ static unsigned long shrink_page_list(struct list_head *page_list,
 | 
				
			||||||
		sc->nr_scanned++;
 | 
							sc->nr_scanned++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (unlikely(!page_evictable(page)))
 | 
							if (unlikely(!page_evictable(page)))
 | 
				
			||||||
			goto cull_mlocked;
 | 
								goto activate_locked;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (!sc->may_unmap && page_mapped(page))
 | 
							if (!sc->may_unmap && page_mapped(page))
 | 
				
			||||||
			goto keep_locked;
 | 
								goto keep_locked;
 | 
				
			||||||
| 
						 | 
					@ -1152,8 +1152,6 @@ static unsigned long shrink_page_list(struct list_head *page_list,
 | 
				
			||||||
				goto activate_locked;
 | 
									goto activate_locked;
 | 
				
			||||||
			case SWAP_AGAIN:
 | 
								case SWAP_AGAIN:
 | 
				
			||||||
				goto keep_locked;
 | 
									goto keep_locked;
 | 
				
			||||||
			case SWAP_MLOCK:
 | 
					 | 
				
			||||||
				goto cull_mlocked;
 | 
					 | 
				
			||||||
			case SWAP_SUCCESS:
 | 
								case SWAP_SUCCESS:
 | 
				
			||||||
				; /* try to free the page below */
 | 
									; /* try to free the page below */
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
| 
						 | 
					@ -1295,20 +1293,16 @@ static unsigned long shrink_page_list(struct list_head *page_list,
 | 
				
			||||||
		list_add(&page->lru, &free_pages);
 | 
							list_add(&page->lru, &free_pages);
 | 
				
			||||||
		continue;
 | 
							continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cull_mlocked:
 | 
					 | 
				
			||||||
		if (PageSwapCache(page))
 | 
					 | 
				
			||||||
			try_to_free_swap(page);
 | 
					 | 
				
			||||||
		unlock_page(page);
 | 
					 | 
				
			||||||
		list_add(&page->lru, &ret_pages);
 | 
					 | 
				
			||||||
		continue;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
activate_locked:
 | 
					activate_locked:
 | 
				
			||||||
		/* Not a candidate for swapping, so reclaim swap space. */
 | 
							/* Not a candidate for swapping, so reclaim swap space. */
 | 
				
			||||||
		if (PageSwapCache(page) && mem_cgroup_swap_full(page))
 | 
							if (PageSwapCache(page) && (mem_cgroup_swap_full(page) ||
 | 
				
			||||||
 | 
											PageMlocked(page)))
 | 
				
			||||||
			try_to_free_swap(page);
 | 
								try_to_free_swap(page);
 | 
				
			||||||
		VM_BUG_ON_PAGE(PageActive(page), page);
 | 
							VM_BUG_ON_PAGE(PageActive(page), page);
 | 
				
			||||||
		SetPageActive(page);
 | 
							if (!PageMlocked(page)) {
 | 
				
			||||||
		pgactivate++;
 | 
								SetPageActive(page);
 | 
				
			||||||
 | 
								pgactivate++;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
keep_locked:
 | 
					keep_locked:
 | 
				
			||||||
		unlock_page(page);
 | 
							unlock_page(page);
 | 
				
			||||||
keep:
 | 
					keep:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue