Thread (67 messages) 67 messages, 4 authors, 2017-02-13

Re: [PATCHv6 08/37] filemap: handle huge pages in do_generic_file_read()

From: Matthew Wilcox <willy@infradead.org>
Date: 2017-02-09 21:55:05
Also in: linux-ext4, linux-fsdevel, linux-mm, lkml

On Thu, Jan 26, 2017 at 02:57:50PM +0300, Kirill A. Shutemov wrote:
quoted hunk ↗ jump to hunk
+++ b/mm/filemap.c
@@ -1886,6 +1886,7 @@ static ssize_t do_generic_file_read(struct file *filp, loff_t *ppos,
 			if (unlikely(page == NULL))
 				goto no_cached_page;
 		}
+		page = compound_head(page);
We got this page from find_get_page(), which gets it from
pagecache_get_page(), which gets it from find_get_entry() ... which
(unless I'm lost in your patch series) returns the head page.  So this
line is redundant, right?

But then down in filemap_fault, we have:

        VM_BUG_ON_PAGE(page->index != offset, page);

... again, maybe I'm lost somewhere in your patch series, but I don't see
anywhere you remove that line (or modify it).  So are you not testing
with VM debugging enabled, or are you not doing a test which includes
mapping a file with huge pages, reading from it (to get the page in cache),
then faulting on an address that is not in the first 4kB of that 2MB?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help