On 07/24, Song Liu wrote: > > > > On Jul 15, 2019, at 8:25 AM, Oleg Nesterov <oleg@xxxxxxxxxx> wrote: > > > >> + if (!is_register) { > >> + struct page *orig_page; > >> + pgoff_t index; > >> + > >> + index = vaddr_to_offset(vma, vaddr & PAGE_MASK) >> PAGE_SHIFT; > >> + orig_page = find_get_page(vma->vm_file->f_inode->i_mapping, > >> + index); > >> + > >> + if (orig_page) { > >> + if (pages_identical(new_page, orig_page)) { > > > > Shouldn't we at least check PageUptodate? > > For page cache, we only do ClearPageUptodate() on read failures, Hmm. I don't think so. > so > this should be really rare case. But I guess we can check anyway. Can? I think we should or this code is simply wrong... > > and I am a bit surprised there is no simple way to unmap the old page > > in this case... > > The easiest way I have found requires flush_cache_page() plus a few > mmu_notifier calls around it. But we need to do this anyway? At least with your patch replace_page() still does this after page_add_file_rmap(). > I think current solution is better than > that, perhaps, I won't argue, > as it saves a page fault. I don't think it matters in this case. Oleg.