From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757463AbcJaB1I (ORCPT ); Sun, 30 Oct 2016 21:27:08 -0400 Received: from mga02.intel.com ([134.134.136.20]:2838 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757422AbcJaB1D (ORCPT ); Sun, 30 Oct 2016 21:27:03 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,572,1473145200"; d="scan'208";a="25865586" From: "Huang\, Ying" To: Hillf Danton Cc: "'Huang\, Ying'" , "'Andrew Morton'" , , , , , , , "'Andrea Arcangeli'" , "'Kirill A . Shutemov'" , "'Ebru Akagunduz'" Subject: Re: [PATCH -v4 RESEND 8/9] mm, THP, swap: Support to split THP in swap cache References: <20161028055608.1736-1-ying.huang@intel.com> <20161028055608.1736-9-ying.huang@intel.com> <052901d23104$a6473380$f2d59a80$@alibaba-inc.com> Date: Mon, 31 Oct 2016 09:26:59 +0800 In-Reply-To: <052901d23104$a6473380$f2d59a80$@alibaba-inc.com> (Hillf Danton's message of "Fri, 28 Oct 2016 18:18:34 +0800") Message-ID: <871syx71gc.fsf@yhuang-dev.intel.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=ascii Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hillf Danton writes: > On Friday, October 28, 2016 1:56 PM Huang, Ying wrote: >> @@ -2016,10 +2021,12 @@ int page_trans_huge_mapcount(struct page *page, int *total_mapcount) >> /* Racy check whether the huge page can be split */ >> bool can_split_huge_page(struct page *page) >> { >> - int extra_pins = 0; >> + int extra_pins; >> >> /* Additional pins from radix tree */ >> - if (!PageAnon(page)) >> + if (PageAnon(page)) >> + extra_pins = PageSwapCache(page) ? HPAGE_PMD_NR : 0; >> + else >> extra_pins = HPAGE_PMD_NR; > > extra_pins is computed in this newly added helper. > >> return total_mapcount(page) == page_count(page) - extra_pins - 1; >> } >> @@ -2072,7 +2079,7 @@ int split_huge_page_to_list(struct page *page, struct list_head *list) >> ret = -EBUSY; >> goto out; >> } >> - extra_pins = 0; >> + extra_pins = PageSwapCache(head) ? HPAGE_PMD_NR : 0; > > It is also computed at the call site, so can we fold them into one? Sounds reasonable. I will add another argument to can_split_huge_page() to return extra_pins, so we can avoid duplicated code and calculation. Best Regards, Huang, Ying >> mapping = NULL; >> anon_vma_lock_write(anon_vma); >> } else { >> -- >> 2.9.3