[Devel] [PATCH rh7] pfcache: pick page from peer mapping after readahead

Vladimir Davydov vdavydov at virtuozzo.com
Wed May 25 08:13:45 PDT 2016


There's a mistake in pick_peer_page. This function is called before
issuing read from pagefault and file read paths, in order to retrieve
the page from peer's mapping and thus save us io and page cache. In this
function we first lookup the page in the peer's mapping. If it fails, we
start readahead for the peer's mapping. Then we should retry lookup from
peer's mapping to get page allocated by the readahead, but instead we do
lookup from the original mapping, which obviously fails as we only call
pick_peer_page if there's no page in original mapping's cache. So we
fall back on reading a page for the original mapping instead of using
pages from pfcache.

Signed-off-by: Vladimir Davydov <vdavydov at virtuozzo.com>
---
 mm/memory.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/memory.c b/mm/memory.c
index 7ba5f6f8eaac..c3a36558ac40 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -4697,7 +4697,7 @@ struct page *pick_peer_page(struct address_space *mapping, pgoff_t index,
 	page = find_get_page(peer, index);
 	if (!page) {
 		page_cache_sync_readahead(peer, ra, file, index, ra_size);
-		page = find_get_page(mapping, index);
+		page = find_get_page(peer, index);
 		if (!page)
 			goto out;
 	}
-- 
2.1.4



More information about the Devel mailing list