This is the folio equivalent of page_evictable().  Unfortunately, it's
different from !folio_test_unevictable(), but I think it's used in places
where you have to be a VM expert and can reasonably be expected to know
the difference.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
This commit is contained in:
Matthew Wilcox (Oracle) 2021-05-14 15:04:28 -04:00
Родитель 0995d7e568
Коммит 3eed3ef55c
1 изменённых файлов: 19 добавлений и 8 удалений

Просмотреть файл

@ -72,17 +72,28 @@ unsigned find_lock_entries(struct address_space *mapping, pgoff_t start,
pgoff_t end, struct pagevec *pvec, pgoff_t *indices); pgoff_t end, struct pagevec *pvec, pgoff_t *indices);
/** /**
* page_evictable - test whether a page is evictable * folio_evictable - Test whether a folio is evictable.
* @page: the page to test * @folio: The folio to test.
* *
* Test whether page is evictable--i.e., should be placed on active/inactive * Test whether @folio is evictable -- i.e., should be placed on
* lists vs unevictable list. * active/inactive lists vs unevictable list.
*
* Reasons page might not be evictable:
* (1) page's mapping marked unevictable
* (2) page is part of an mlocked VMA
* *
* Reasons folio might not be evictable:
* 1. folio's mapping marked unevictable
* 2. One of the pages in the folio is part of an mlocked VMA
*/ */
static inline bool folio_evictable(struct folio *folio)
{
bool ret;
/* Prevent address_space of inode and swap cache from being freed */
rcu_read_lock();
ret = !mapping_unevictable(folio_mapping(folio)) &&
!folio_test_mlocked(folio);
rcu_read_unlock();
return ret;
}
static inline bool page_evictable(struct page *page) static inline bool page_evictable(struct page *page)
{ {
bool ret; bool ret;