lkml.org 
[lkml]   [2021]   [Jun]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 38/46] mm: Add folio_evictable()
    Date
    This is the folio equivalent of page_evictable().  Unfortunately, it's
    different from !folio_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>
    ---
    mm/internal.h | 27 +++++++++++++++++++--------
    1 file changed, 19 insertions(+), 8 deletions(-)

    diff --git a/mm/internal.h b/mm/internal.h
    index d7013df5d1f0..3b0ab6b5457c 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. page's mapping marked unevictable
    + * 2. page 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_mlocked(folio);
    + rcu_read_unlock();
    + return ret;
    +}
    +
    static inline bool page_evictable(struct page *page)
    {
    bool ret;
    --
    2.30.2
    \
     
     \ /
      Last update: 2021-06-22 14:52    [W:7.878 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site