> How so? Truncate will chop the page off the mapping - it doesn't
> miss any pages.
> Truncate has to wait for the page lock, so the page may be removed from
> the mapping shortly after the major fault's IO has completed. Maybe
> that's what you are seeing.
My guess on the order is this:
task 1 waits for IO in the page fault.
task 2 calls truncate, which does zap_page_range() on the range that page
task 1 wakes up and maps the page.
task 2 calls truncate_inode_pages which removes the newly mapped page from
the page cache.
Now the state is that the page has been disconnected from the file, but
it's still mapped in task 1's address space. That task thinks it has valid
data from the file in that page, and may continue to read/write there, and
assume any changes will get written back..
Dave McCracken IBM Linux Base Kernel Team 1-512-838-3059
email@example.com T/L 678-3059
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to firstname.lastname@example.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/