Re: [PATCH] mm/memory.c: avoid repeated set_page_dirty in fault_dirty_shared_page

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2019-12-13 at 00:55 Kirill A. Shutemov wrote:
>On Thu, Dec 12, 2019 at 11:21:18PM +0800, 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.
>
>Must? Do all ->page_mkwrite implementation do this?

My understanding is that set_page_dirty need be called before PTE is set to allow
writing. If not in this sequence, other thread will see a writable PTE and dirty the page
before current thread set_page_dirty. 
In ->page_mkwrite, FS can decide if set_page_dirty should be called or not. I checked
a few FS, ext4/xfs/btrsfs/ceph and generic filemap_page_mkwrite, they called it. 
If FS provide ->page_mkwrite and decide don't call set_page_dirty, why
fault_dirty_shared_page call this function unconditionally? or, I missed something?

In case no ->page_mkwrite provided, call set_page_dirty looks reasonable for default
action.

>> @@ -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) {
>
>vma->vm_ops is always non-NULL here.
yes, thanks point out.

>
>--
> Kirill A. Shutemov




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux