Message ID | 20210718043034.76431-2-zhengqi.arch@bytedance.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Free user PTE page table pages | expand |
On Sun, Jul 18, 2021 at 12:30:27PM +0800, Qi Zheng wrote: > The commit 63f3655f9501(mm, memcg: fix reclaim deadlock with writeback) > fix a deadlock bug by pre-allocating the pte page table outside of the > page lock, the commit f9ce0be71d1f(mm: Cleanup faultaround and > finish_fault() codepaths) rework the relevant code but ignore this race, > fix it. > > Fixes: f9ce0be71d1f(mm: Cleanup faultaround and finish_fault() codepaths) > Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> and add stable@, please.
On 7/19/21 5:28 AM, Kirill A. Shutemov wrote: > On Sun, Jul 18, 2021 at 12:30:27PM +0800, Qi Zheng wrote: >> The commit 63f3655f9501(mm, memcg: fix reclaim deadlock with writeback) >> fix a deadlock bug by pre-allocating the pte page table outside of the >> page lock, the commit f9ce0be71d1f(mm: Cleanup faultaround and >> finish_fault() codepaths) rework the relevant code but ignore this race, >> fix it. >> >> Fixes: f9ce0be71d1f(mm: Cleanup faultaround and finish_fault() codepaths) >> Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com> > > Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> > > and add stable@, please. > OK, I will add these in the patch v2, thanks.
On Mon, 19 Jul 2021 17:53:12 +0800 Qi Zheng <zhengqi.arch@bytedance.com> wrote: > > > On 7/19/21 5:28 AM, Kirill A. Shutemov wrote: > > On Sun, Jul 18, 2021 at 12:30:27PM +0800, Qi Zheng wrote: > >> The commit 63f3655f9501(mm, memcg: fix reclaim deadlock with writeback) > >> fix a deadlock bug by pre-allocating the pte page table outside of the > >> page lock, the commit f9ce0be71d1f(mm: Cleanup faultaround and > >> finish_fault() codepaths) rework the relevant code but ignore this race, > >> fix it. > >> > >> Fixes: f9ce0be71d1f(mm: Cleanup faultaround and finish_fault() codepaths) > >> Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com> > > > > Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> > > > > and add stable@, please. > > > > OK, I will add these in the patch v2, thanks. Please send this as a separate standalone patch, not as a part of the main series. Also, please include in the changelog a description of the user-visible impact of the bug which is being fixed.
On 7/21/21 7:14 AM, Andrew Morton wrote: > On Mon, 19 Jul 2021 17:53:12 +0800 Qi Zheng <zhengqi.arch@bytedance.com> wrote: > >> >> >> On 7/19/21 5:28 AM, Kirill A. Shutemov wrote: >>> On Sun, Jul 18, 2021 at 12:30:27PM +0800, Qi Zheng wrote: >>>> The commit 63f3655f9501(mm, memcg: fix reclaim deadlock with writeback) >>>> fix a deadlock bug by pre-allocating the pte page table outside of the >>>> page lock, the commit f9ce0be71d1f(mm: Cleanup faultaround and >>>> finish_fault() codepaths) rework the relevant code but ignore this race, >>>> fix it. >>>> >>>> Fixes: f9ce0be71d1f(mm: Cleanup faultaround and finish_fault() codepaths) >>>> Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com> >>> >>> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> >>> >>> and add stable@, please. >>> >> >> OK, I will add these in the patch v2, thanks. > > Please send this as a separate standalone patch, not as a part of the > main series. > > Also, please include in the changelog a description of the user-visible > impact of the bug which is being fixed. > OK, I will do this. Thanks, Qi
diff --git a/mm/memory.c b/mm/memory.c index db86558791f1..94a17a9a48ab 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -4026,8 +4026,17 @@ vm_fault_t finish_fault(struct vm_fault *vmf) return ret; } - if (unlikely(pte_alloc(vma->vm_mm, vmf->pmd))) + if (vmf->prealloc_pte) { + vmf->ptl = pmd_lock(vma->vm_mm, vmf->pmd); + if (likely(pmd_none(*vmf->pmd))) { + mm_inc_nr_ptes(vma->vm_mm); + pmd_populate(vma->vm_mm, vmf->pmd, vmf->prealloc_pte); + vmf->prealloc_pte = NULL; + } + spin_unlock(vmf->ptl); + } else if (unlikely(pte_alloc(vma->vm_mm, vmf->pmd))) { return VM_FAULT_OOM; + } } /* See comment in handle_pte_fault() */
The commit 63f3655f9501(mm, memcg: fix reclaim deadlock with writeback) fix a deadlock bug by pre-allocating the pte page table outside of the page lock, the commit f9ce0be71d1f(mm: Cleanup faultaround and finish_fault() codepaths) rework the relevant code but ignore this race, fix it. Fixes: f9ce0be71d1f(mm: Cleanup faultaround and finish_fault() codepaths) Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com> --- mm/memory.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)