lkml.org 
[lkml]   [2017]   [Dec]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 49/73] shmem: Convert shmem_partial_swap_usage to XArray
    Date
    From: Matthew Wilcox <mawilcox@microsoft.com>

    Simpler code because the xarray takes care of things like the limit and
    dereferencing the slot.

    Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
    ---
    mm/shmem.c | 18 +++---------------
    1 file changed, 3 insertions(+), 15 deletions(-)

    diff --git a/mm/shmem.c b/mm/shmem.c
    index ca45ff493587..01102e2e0ef3 100644
    --- a/mm/shmem.c
    +++ b/mm/shmem.c
    @@ -658,29 +658,17 @@ static int shmem_free_swap(struct address_space *mapping,
    unsigned long shmem_partial_swap_usage(struct address_space *mapping,
    pgoff_t start, pgoff_t end)
    {
    - struct radix_tree_iter iter;
    - void **slot;
    + XA_STATE(xas, &mapping->pages, start);
    struct page *page;
    unsigned long swapped = 0;

    rcu_read_lock();
    -
    - radix_tree_for_each_slot(slot, &mapping->pages, &iter, start) {
    - if (iter.index >= end)
    - break;
    -
    - page = radix_tree_deref_slot(slot);
    -
    - if (radix_tree_deref_retry(page)) {
    - slot = radix_tree_iter_retry(&iter);
    - continue;
    - }
    -
    + xas_for_each(&xas, page, end - 1) {
    if (xa_is_value(page))
    swapped++;

    if (need_resched()) {
    - slot = radix_tree_iter_resume(slot, &iter);
    + xas_pause(&xas);
    cond_resched_rcu();
    }
    }
    --
    2.15.0
    \
     
     \ /
      Last update: 2017-12-06 01:53    [W:3.577 / U:0.076 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site