From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
To: linux-mm@kvack.org
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Subject: [PATCH 3/4] mm: Optimise madvise WILLNEED
Date: Fri, 10 Jul 2020 21:26:41 +0100 [thread overview]
Message-ID: <20200710202642.21794-4-willy@infradead.org> (raw)
In-Reply-To: <20200710202642.21794-1-willy@infradead.org>
Instead of calling find_get_entry() for every page index, use an XArray
iterator to skip over NULL entries, and avoid calling get_page(),
because we only want the swap entries.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
mm/madvise.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/mm/madvise.c b/mm/madvise.c
index dd1d43cf026d..9f46d2fd79d1 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -224,25 +224,25 @@ static void force_shm_swapin_readahead(struct vm_area_struct *vma,
unsigned long start, unsigned long end,
struct address_space *mapping)
{
- pgoff_t index;
+ XA_STATE(xas, &mapping->i_pages, linear_page_index(vma, start));
+ pgoff_t end_index = end / PAGE_SIZE;
struct page *page;
- swp_entry_t swap;
- for (; start < end; start += PAGE_SIZE) {
- index = ((start - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
-
- page = find_get_entry(mapping, index);
- if (!xa_is_value(page)) {
- if (page)
- put_page(page);
+ rcu_read_lock();
+ xas_for_each(&xas, page, end_index) {
+ swp_entry_t swap;
+ if (!xa_is_value(page))
continue;
- }
+
swap = radix_to_swp_entry(page);
page = read_swap_cache_async(swap, GFP_HIGHUSER_MOVABLE,
NULL, 0, false);
if (page)
put_page(page);
+ rcu_read_lock();
+ xas_reset(&xas);
}
+ rcu_read_unlock();
lru_add_drain(); /* Push any new pages onto the LRU now */
}
--
2.27.0
next prev parent reply other threads:[~2020-07-10 20:26 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-10 20:26 [PATCH 0/4] Remove/consolidate calls to find_get_entry Matthew Wilcox (Oracle)
2020-07-10 20:26 ` [PATCH 1/4] mm: Factor find_get_swap_page out of mincore_page Matthew Wilcox (Oracle)
2020-07-10 20:26 ` [PATCH 2/4] mm: Use find_get_swap_page in memcontrol Matthew Wilcox (Oracle)
2020-07-10 20:26 ` Matthew Wilcox (Oracle) [this message]
2020-07-10 20:26 ` [PATCH 4/4] proc: Optimise smaps for shmem entries Matthew Wilcox (Oracle)
2020-07-11 0:15 ` [PATCH 0/4] Remove/consolidate calls to find_get_entry William Kucharski
2020-07-11 3:31 ` [PATCH 5/4] mm: Return head pages from find_get_entry Matthew Wilcox
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200710202642.21794-4-willy@infradead.org \
--to=willy@infradead.org \
--cc=linux-mm@kvack.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox