From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752515AbdFNQ6g (ORCPT ); Wed, 14 Jun 2017 12:58:36 -0400 Received: from mx2.suse.de ([195.135.220.15]:57411 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752396AbdFNQ6f (ORCPT ); Wed, 14 Jun 2017 12:58:35 -0400 Subject: Re: [RFC PATCH 2/4] hugetlb: add support for preferred node to alloc_huge_page_nodemask To: Michal Hocko Cc: linux-mm@kvack.org, Naoya Horiguchi , Mike Kravetz , Mel Gorman , Andrew Morton , LKML References: <20170613090039.14393-1-mhocko@kernel.org> <20170613090039.14393-3-mhocko@kernel.org> <1b208520-8d4b-9a58-7384-1a031b610e15@suse.cz> <20170614164151.GA11240@dhcp22.suse.cz> From: Vlastimil Babka Message-ID: <164b0a5f-80a5-30dc-71d9-79f8a0ffe34c@suse.cz> Date: Wed, 14 Jun 2017 18:57:55 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.1 MIME-Version: 1.0 In-Reply-To: <20170614164151.GA11240@dhcp22.suse.cz> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 06/14/2017 06:41 PM, Michal Hocko wrote: > > This on top? > --- > diff --git a/mm/hugetlb.c b/mm/hugetlb.c > index 9ac0ae725c5e..f9868e095afa 100644 > --- a/mm/hugetlb.c > +++ b/mm/hugetlb.c > @@ -902,7 +902,6 @@ static struct page *dequeue_huge_page_nodemask(struct hstate *h, gfp_t gfp_mask, > { > unsigned int cpuset_mems_cookie; > struct zonelist *zonelist; > - struct page *page = NULL; > struct zone *zone; > struct zoneref *z; > int node = -1; > @@ -912,6 +911,8 @@ static struct page *dequeue_huge_page_nodemask(struct hstate *h, gfp_t gfp_mask, > retry_cpuset: > cpuset_mems_cookie = read_mems_allowed_begin(); > for_each_zone_zonelist_nodemask(zone, z, zonelist, gfp_zone(gfp_mask), nmask) { > + struct page *page; > + > if (!cpuset_zone_allowed(zone, gfp_mask)) > continue; > /* > @@ -924,9 +925,9 @@ static struct page *dequeue_huge_page_nodemask(struct hstate *h, gfp_t gfp_mask, > > page = dequeue_huge_page_node_exact(h, node); > if (page) > - break; > + return page; > } > - if (unlikely(!page && read_mems_allowed_retry(cpuset_mems_cookie))) > + if (unlikely(read_mems_allowed_retry(cpuset_mems_cookie))) > goto retry_cpuset; > > return NULL; OK > @@ -1655,18 +1656,18 @@ struct page *alloc_huge_page_nodemask(struct hstate *h, int preferred_nid, > nodemask_t *nmask) > { > gfp_t gfp_mask = htlb_alloc_mask(h); > - struct page *page = NULL; > > spin_lock(&hugetlb_lock); > if (h->free_huge_pages - h->resv_huge_pages > 0) { > + struct page *page; > + > page = dequeue_huge_page_nodemask(h, gfp_mask, preferred_nid, nmask); > - if (page) > - goto unlock; > + if (page) { > + spin_unlock(&hugetlb_lock); > + return page; > + } I thought you would just continue after the if (this is not a for-loop after all), but this works too. > } > -unlock: > spin_unlock(&hugetlb_lock); > - if (page) > - return page; > > /* No reservations, try to overcommit */ > >