On Thu, Apr 22, 2021 at 2:18 PM Peter Xu peterx@redhat.com wrote:
Axel,
On Thu, Apr 22, 2021 at 01:22:02PM -0700, Axel Rasmussen wrote:
if (page_in_cache)
page_add_file_rmap(page, false);
else
page_add_new_anon_rmap(page, dst_vma, dst_addr, false);
/*
* Must happen after rmap, as mm_counter() checks mapping (via
* PageAnon()), which is set by __page_set_anon_rmap().
*/
inc_mm_counter(dst_mm, mm_counter(page));
Actually, I've noticed that this is still slightly incorrect.
As Hugh pointed out, this works for the anon case, because page_add_new_anon_rmap() sets page->mapping.
But for the page_in_cache case, it doesn't work: unlike its anon counterpart, page_add_file_rmap() *does not* set page->mapping.
If it's already in the page cache, shouldn't it be set already in e.g. one previous call to shmem_add_to_page_cache()? Thanks,
Ah, of course. Sorry for the noise. This should have been obvious to me from how page_in_cache is defined.
I had run into the same "Bad rss-counter state" warning while applying my patches to an earlier kernel version, and got concerned about this line after looking at page_add_file_rmap().
But, you're right that this ought to work, and indeed I can't reproduce the warning when the patches are based on the mm snapshot mentioned in the cover letter. So, it seems the problem lies with this other unrelated merge I'm doing, not the series itself. :)
-- Peter Xu