On 03/02/2017 04:10 PM, Kirill A. Shutemov wrote: > Restructure code in preparation for a fix. > > Signed-off-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> Acked-by: Vlastimil Babka <vbabka@xxxxxxx> > --- > 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; > } > > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>