On Sun, Mar 08, 2015 at 04:12:12PM -0700, David Rientjes wrote: > If __get_user_pages() is faulting a significant number of hugetlb pages, > usually as the result of mmap(MAP_LOCKED), it can potentially allocate a > very large amount of memory. > > If the process has been oom killed, this will cause a lot of memory to > be overcharged to its memcg since it has access to memory reserves or > could potentially deplete all system memory reserves. > > In the same way that commit 4779280d1ea4 ("mm: make get_user_pages() > interruptible") aborted for pending SIGKILLs when faulting non-hugetlb > memory, based on the premise of commit 462e00cc7151 ("oom: stop > allocating user memory if TIF_MEMDIE is set"), hugetlb page faults now > terminate when the process has been oom killed. > > Cc: "Kirill A. Shutemov" <kirill.shutemov@xxxxxxxxxxxxxxx> > Signed-off-by: David Rientjes <rientjes@xxxxxxxxxx> > --- > mm/gup.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/mm/gup.c b/mm/gup.c > --- a/mm/gup.c > +++ b/mm/gup.c > @@ -457,6 +457,8 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, > if (!vma || check_vma_flags(vma, gup_flags)) > return i ? : -EFAULT; > if (is_vm_hugetlb_page(vma)) { > + if (unlikely(fatal_signal_pending(current))) > + return i ? : -ERESTARTSYS; > i = follow_hugetlb_page(mm, vma, pages, vmas, > &start, &nr_pages, i, > gup_flags); Shouldn't the check be inside loop in follow_hugetlb_page()? IIUC, it wouldn't help much if nr_pages and hugetlb vma are big enough. -- Kirill A. Shutemov -- 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>