From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751426AbbCIEbJ (ORCPT ); Mon, 9 Mar 2015 00:31:09 -0400 Received: from mta-out1.inet.fi ([62.71.2.203]:56211 "EHLO jenni2.inet.fi" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750927AbbCIEbF (ORCPT ); Mon, 9 Mar 2015 00:31:05 -0400 Date: Mon, 9 Mar 2015 06:30:51 +0200 From: "Kirill A. Shutemov" To: David Rientjes Cc: Andrew Morton , "Kirill A. Shutemov" , linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [patch] mm, hugetlb: abort __get_user_pages if current has been oom killed Message-ID: <20150309043051.GA13380@node.dhcp.inet.fi> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23.1 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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" > Signed-off-by: David Rientjes > --- > 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 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wg0-f53.google.com (mail-wg0-f53.google.com [74.125.82.53]) by kanga.kvack.org (Postfix) with ESMTP id 025D56B0032 for ; Mon, 9 Mar 2015 00:30:57 -0400 (EDT) Received: by wghl18 with SMTP id l18so24928809wgh.5 for ; Sun, 08 Mar 2015 21:30:56 -0700 (PDT) Received: from jenni2.inet.fi (mta-out1.inet.fi. [62.71.2.203]) by mx.google.com with ESMTP id q7si29036304wjq.201.2015.03.08.21.30.54 for ; Sun, 08 Mar 2015 21:30:55 -0700 (PDT) Date: Mon, 9 Mar 2015 06:30:51 +0200 From: "Kirill A. Shutemov" Subject: Re: [patch] mm, hugetlb: abort __get_user_pages if current has been oom killed Message-ID: <20150309043051.GA13380@node.dhcp.inet.fi> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Sender: owner-linux-mm@kvack.org List-ID: To: David Rientjes Cc: Andrew Morton , "Kirill A. Shutemov" , linux-kernel@vger.kernel.org, linux-mm@kvack.org 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" > Signed-off-by: David Rientjes > --- > 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@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org