Skip to content

Commit

Permalink
shmem: Convert shmem_partial_swap_usage to XArray
Browse files Browse the repository at this point in the history
Simpler code because the xarray takes care of things like the limit and
dereferencing the slot.

Signed-off-by: Matthew Wilcox <willy@infradead.org>
  • Loading branch information
Matthew Wilcox committed Oct 21, 2018
1 parent c121d3b commit 7ae3424
Showing 1 changed file with 4 additions and 14 deletions.
18 changes: 4 additions & 14 deletions mm/shmem.c
Original file line number Diff line number Diff line change
Expand Up @@ -676,29 +676,19 @@ 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 __rcu **slot;
XA_STATE(xas, &mapping->i_pages, start);
struct page *page;
unsigned long swapped = 0;

rcu_read_lock();

radix_tree_for_each_slot(slot, &mapping->i_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);
xas_for_each(&xas, page, end - 1) {
if (xas_retry(&xas, page))
continue;
}

if (xa_is_value(page))
swapped++;

if (need_resched()) {
slot = radix_tree_iter_resume(slot, &iter);
xas_pause(&xas);
cond_resched_rcu();
}
}
Expand Down

0 comments on commit 7ae3424

Please sign in to comment.