From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail6.bemta7.messagelabs.com (mail6.bemta7.messagelabs.com [216.82.255.55]) by kanga.kvack.org (Postfix) with ESMTP id 2CBF66B0115 for ; Sun, 5 Jun 2011 16:49:07 -0400 (EDT) Received: from kpbe14.cbf.corp.google.com (kpbe14.cbf.corp.google.com [172.25.105.78]) by smtp-out.google.com with ESMTP id p55Kn3xg032365 for ; Sun, 5 Jun 2011 13:49:04 -0700 Received: from pzk30 (pzk30.prod.google.com [10.243.19.158]) by kpbe14.cbf.corp.google.com with ESMTP id p55Kn1xN000922 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for ; Sun, 5 Jun 2011 13:49:01 -0700 Received: by pzk30 with SMTP id 30so1689808pzk.4 for ; Sun, 05 Jun 2011 13:49:01 -0700 (PDT) Date: Sun, 5 Jun 2011 13:48:55 -0700 (PDT) From: Hugh Dickins Subject: Re: ENOSPC returned by handle_mm_fault() In-Reply-To: <20110605195025.GH11521@ZenIV.linux.org.uk> Message-ID: References: <20110605134317.GF11521@ZenIV.linux.org.uk> <20110605195025.GH11521@ZenIV.linux.org.uk> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-linux-mm@kvack.org List-ID: To: Al Viro Cc: linux-mm@kvack.org, Mel Gorman , linux-kernel@vger.kernel.org On Sun, 5 Jun 2011, Al Viro wrote: > On Sun, Jun 05, 2011 at 12:16:08PM -0700, Hugh Dickins wrote: > > > Good find, news to me. Interesting uses of -PTR_ERR()! > > You mean, something like the diff below? Second hunk yes, but first hunk no: there's at least one other place (hugetlb_reserve_pages) which calls region_chg(), and expects a conventional -errno return from it; and even if there weren't, I'd rather not spread these unconventional return values any deeper. Something more like the one at the bottom I think: okay, it's slightly tacky to assume the nature of the failure from vma_needs_reservation(), but we already have two places which do make that assumption. > > Signed-off-by: Al Viro > --- > diff --git a/mm/hugetlb.c b/mm/hugetlb.c > index f33bb31..3de23f0 100644 > --- a/mm/hugetlb.c > +++ b/mm/hugetlb.c > @@ -125,7 +125,7 @@ static long region_chg(struct list_head *head, long f, long t) > if (&rg->link == head || t < rg->from) { > nrg = kmalloc(sizeof(*nrg), GFP_KERNEL); > if (!nrg) > - return -ENOMEM; > + return -VM_FAULT_OOM; > nrg->from = f; > nrg->to = f; > INIT_LIST_HEAD(&nrg->link); > @@ -1036,7 +1036,7 @@ static struct page *alloc_huge_page(struct vm_area_struct *vma, > return ERR_PTR(chg); > if (chg) > if (hugetlb_get_quota(inode->i_mapping, chg)) > - return ERR_PTR(-ENOSPC); > + return ERR_PTR(-VM_FAULT_SIGBUS); > > spin_lock(&hugetlb_lock); > page = dequeue_huge_page_vma(h, vma, addr, avoid_reserve); Signed-off-by: Hugh Dickins i_mapping, chg)) - return ERR_PTR(-ENOSPC); + return ERR_PTR(-VM_FAULT_SIGBUS); spin_lock(&hugetlb_lock); page = dequeue_huge_page_vma(h, vma, addr, avoid_reserve); -- 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/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: email@kvack.org