mm: Add folio_evictable()
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:
Родитель
0995d7e568
Коммит
3eed3ef55c
|
@ -72,17 +72,28 @@ unsigned find_lock_entries(struct address_space *mapping, pgoff_t start,
|
|||
pgoff_t end, struct pagevec *pvec, pgoff_t *indices);
|
||||
|
||||
/**
|
||||
* page_evictable - test whether a page is evictable
|
||||
* @page: the page to test
|
||||
* folio_evictable - Test whether a folio is evictable.
|
||||
* @folio: The folio to test.
|
||||
*
|
||||
* Test whether page is evictable--i.e., should be placed on 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
|
||||
* Test whether @folio is evictable -- i.e., should be placed on
|
||||
* active/inactive lists vs unevictable list.
|
||||
*
|
||||
* 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)
|
||||
{
|
||||
bool ret;
|
||||
|
|
Загрузка…
Ссылка в новой задаче