On 12.12.19 16:21, Li Xinhai wrote: > When vm_ops->page_mkwrite is defined, and called from wp_page_shared and > do_shared_fault, the set_page_dirty must already called by page_mkwrite. > Then in fault_dirty_shared_page, avoid this repeated call. > > Signed-off-by: Li Xinhai <lixinhai.lxh@xxxxxxxxx> > Cc: Jan Kara <jack@xxxxxxx> > --- > mm/memory.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/mm/memory.c b/mm/memory.c > index 606da18..34a83d7 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -2300,10 +2300,11 @@ static vm_fault_t fault_dirty_shared_page(struct vm_fault *vmf) > struct vm_area_struct *vma = vmf->vma; > struct address_space *mapping; > struct page *page = vmf->page; > - bool dirtied; > + bool dirtied = false; > bool page_mkwrite = vma->vm_ops && vma->vm_ops->page_mkwrite; > > - dirtied = set_page_dirty(page); > + if(!page_mkwrite) > + dirtied = set_page_dirty(page); > VM_BUG_ON_PAGE(PageAnon(page), page); > /* > * Take a local copy of the address_space - page.mapping may be zeroed > @@ -3645,7 +3646,7 @@ static vm_fault_t do_shared_fault(struct vm_fault *vmf) > * Check if the backing address space wants to know that the page is > * about to become writable > */ > - if (vma->vm_ops->page_mkwrite) { > + if (vma->vm_ops && vma->vm_ops->page_mkwrite) { > unlock_page(vmf->page); > tmp = do_page_mkwrite(vmf); > if (unlikely(!tmp || > This hunk looks like an unrelated change to me. -- Thanks, David / dhildenb