On 03/02/2017 04:10 PM, Kirill A. Shutemov wrote:
> Restructure code in preparation for a fix.
> 
> Signed-off-by: Kirill A. Shutemov <[email protected]>

Acked-by: Vlastimil Babka <[email protected]>

> ---
>  mm/huge_memory.c | 52 ++++++++++++++++++++++++++--------------------------
>  1 file changed, 26 insertions(+), 26 deletions(-)
> 
> diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> index 71e3dede95b4..e7ce73b2b208 100644
> --- a/mm/huge_memory.c
> +++ b/mm/huge_memory.c
> @@ -1722,37 +1722,37 @@ int change_huge_pmd(struct vm_area_struct *vma, pmd_t 
> *pmd,
>  {
>       struct mm_struct *mm = vma->vm_mm;
>       spinlock_t *ptl;
> -     int ret = 0;
> +     pmd_t entry;
> +     bool preserve_write;
> +     int ret;
>  
>       ptl = __pmd_trans_huge_lock(pmd, vma);
> -     if (ptl) {
> -             pmd_t entry;
> -             bool preserve_write = prot_numa && pmd_write(*pmd);
> -             ret = 1;
> +     if (!ptl)
> +             return 0;
>  
> -             /*
> -              * Avoid trapping faults against the zero page. The read-only
> -              * data is likely to be read-cached on the local CPU and
> -              * local/remote hits to the zero page are not interesting.
> -              */
> -             if (prot_numa && is_huge_zero_pmd(*pmd)) {
> -                     spin_unlock(ptl);
> -                     return ret;
> -             }
> +     preserve_write = prot_numa && pmd_write(*pmd);
> +     ret = 1;
>  
> -             if (!prot_numa || !pmd_protnone(*pmd)) {
> -                     entry = pmdp_huge_get_and_clear_notify(mm, addr, pmd);
> -                     entry = pmd_modify(entry, newprot);
> -                     if (preserve_write)
> -                             entry = pmd_mk_savedwrite(entry);
> -                     ret = HPAGE_PMD_NR;
> -                     set_pmd_at(mm, addr, pmd, entry);
> -                     BUG_ON(vma_is_anonymous(vma) && !preserve_write &&
> -                                     pmd_write(entry));
> -             }
> -             spin_unlock(ptl);
> -     }
> +     /*
> +      * Avoid trapping faults against the zero page. The read-only
> +      * data is likely to be read-cached on the local CPU and
> +      * local/remote hits to the zero page are not interesting.
> +      */
> +     if (prot_numa && is_huge_zero_pmd(*pmd))
> +             goto unlock;
>  
> +     if (prot_numa && pmd_protnone(*pmd))
> +             goto unlock;
> +
> +     entry = pmdp_huge_get_and_clear_notify(mm, addr, pmd);
> +     entry = pmd_modify(entry, newprot);
> +     if (preserve_write)
> +             entry = pmd_mk_savedwrite(entry);
> +     ret = HPAGE_PMD_NR;
> +     set_pmd_at(mm, addr, pmd, entry);
> +     BUG_ON(vma_is_anonymous(vma) && !preserve_write && pmd_write(entry));
> +unlock:
> +     spin_unlock(ptl);
>       return ret;
>  }
>  
> 

Reply via email to