diff options
author | Matthew Wilcox (Oracle) <willy@infradead.org> | 2021-05-14 21:04:28 +0200 |
---|---|---|
committer | Matthew Wilcox (Oracle) <willy@infradead.org> | 2021-10-18 13:49:40 +0200 |
commit | 3eed3ef55c83ec718fae676fd59699816223215f (patch) | |
tree | 68dc5ce7200238eaf9ee99b87626d5bfa5e103d7 /mm/internal.h | |
parent | mm/workingset: Convert workingset_refault() to take a folio (diff) | |
download | linux-3eed3ef55c83ec718fae676fd59699816223215f.tar.xz linux-3eed3ef55c83ec718fae676fd59699816223215f.zip |
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>
Diffstat (limited to 'mm/internal.h')
-rw-r--r-- | mm/internal.h | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/mm/internal.h b/mm/internal.h index 08fb03b16d3d..b1001ebeb286 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -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; |