On Tue, Sep 27, 2016 at 06:08:20PM +0200, Jan Kara wrote:
> Provide a helper function for finishing write faults due to PTE being
> read-only. The helper will be used by DAX to avoid the need of
> complicating generic MM code with DAX locking specifics.
> 
> Signed-off-by: Jan Kara <j...@suse.cz>
> ---
>  include/linux/mm.h |  1 +
>  mm/memory.c        | 65 
> +++++++++++++++++++++++++++++++-----------------------
>  2 files changed, 39 insertions(+), 27 deletions(-)
> 
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index 1055f2ece80d..e5a014be8932 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -617,6 +617,7 @@ static inline pte_t maybe_mkwrite(pte_t pte, struct 
> vm_area_struct *vma)
>  int alloc_set_pte(struct vm_fault *vmf, struct mem_cgroup *memcg,
>               struct page *page);
>  int finish_fault(struct vm_fault *vmf);
> +int finish_mkwrite_fault(struct vm_fault *vmf);
>  #endif
>  
>  /*
> diff --git a/mm/memory.c b/mm/memory.c
> index f49e736d6a36..8c8cb7f2133e 100644
> --- a/mm/memory.c
> +++ b/mm/memory.c
> @@ -2266,6 +2266,36 @@ oom:
>       return VM_FAULT_OOM;
>  }
>  
> +/**
> + * finish_mkrite_fault - finish page fault making PTE writeable once the page
      finish_mkwrite_fault

> @@ -2315,26 +2335,17 @@ static int wp_page_shared(struct vm_fault *vmf)
>                       put_page(vmf->page);
>                       return tmp;
>               }
> -             /*
> -              * Since we dropped the lock we need to revalidate
> -              * the PTE as someone else may have changed it.  If
> -              * they did, we just return, as we can count on the
> -              * MMU to tell us if they didn't also make it writable.
> -              */
> -             vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd,
> -                                             vmf->address, &vmf->ptl);
> -             if (!pte_same(*vmf->pte, vmf->orig_pte)) {
> +             tmp = finish_mkwrite_fault(vmf);
> +             if (unlikely(!tmp || (tmp &
> +                                   (VM_FAULT_ERROR | VM_FAULT_NOPAGE)))) {

The 'tmp' return from finish_mkwrite_fault() can only be 0 or VM_FAULT_WRITE.
I think this test should just be 

                if (unlikely(!tmp)) {

With that and the small spelling fix:

Reviewed-by: Ross Zwisler <ross.zwis...@linux.intel.com>
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

Reply via email to