From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2D7F6C021B8 for ; Tue, 4 Mar 2025 03:51:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3C0186B0083; Mon, 3 Mar 2025 22:51:07 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 36EE16B0085; Mon, 3 Mar 2025 22:51:07 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 25DB16B0088; Mon, 3 Mar 2025 22:51:07 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 06CBB6B0083 for ; Mon, 3 Mar 2025 22:51:07 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 8A192B74D5 for ; Tue, 4 Mar 2025 03:51:06 +0000 (UTC) X-FDA: 83182492932.09.B3E287F Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) by imf04.hostedemail.com (Postfix) with ESMTP id CFCFA4000A for ; Tue, 4 Mar 2025 03:51:03 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf04.hostedemail.com: domain of tujinjiang@huawei.com designates 45.249.212.190 as permitted sender) smtp.mailfrom=tujinjiang@huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741060264; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=oae9gDjAOmLY3k4Q3uuLlEthclThzu6gtbPwpYsQkn0=; b=gFrp1J35yt09l4kDWNrT5wEJ+YWVKSl4HiPnOruM44spFH4+N0pboFJKGqOLpInLPLbdMA nrVrDX3KF4Zqqou2uBig4tmVBLY1FajE7ncABy0njaF2GKn0BgRmWSXvanYI1AtdKQfzwb iK0IbQbDHoVYKaNhz2fyNM1eAYbeSWQ= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf04.hostedemail.com: domain of tujinjiang@huawei.com designates 45.249.212.190 as permitted sender) smtp.mailfrom=tujinjiang@huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741060264; a=rsa-sha256; cv=none; b=OjpQ8uX2qroZp0T2nz5oLYH35ZU78qR8q9qLLoeCv8MJyoCb4OWpQau9SmI4VoyxPGfJnX Be/pnQKzQ767/3Xxb3MrYGy8ivu3FOwRsODA0VU+3L2E+UNBh7FqjKEiNTgQp7IGD9YVNz NDPi09AkZi6lDuPHh8FS4SyxABmoaXA= Received: from mail.maildlp.com (unknown [172.19.162.112]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4Z6M7D29bPz2Dkkx; Tue, 4 Mar 2025 11:46:48 +0800 (CST) Received: from kwepemo200002.china.huawei.com (unknown [7.202.195.209]) by mail.maildlp.com (Postfix) with ESMTPS id 4D1D11402CC; Tue, 4 Mar 2025 11:50:59 +0800 (CST) Received: from [10.174.179.13] (10.174.179.13) by kwepemo200002.china.huawei.com (7.202.195.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Tue, 4 Mar 2025 11:50:58 +0800 Message-ID: Date: Tue, 4 Mar 2025 11:50:57 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: [PATCH] mm/hugetlb: fix surplus pages in dissolve_free_huge_page() To: David Hildenbrand , , , CC: , , References: <20250303060920.2886263-1-tujinjiang@huawei.com> <7e3e8f34-cb61-4702-87c2-486803c5957e@redhat.com> From: Jinjiang Tu In-Reply-To: <7e3e8f34-cb61-4702-87c2-486803c5957e@redhat.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.174.179.13] X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) To kwepemo200002.china.huawei.com (7.202.195.209) X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: CFCFA4000A X-Stat-Signature: 9x85fnn5ayousiywe43fq7yapspbdqxt X-HE-Tag: 1741060263-966285 X-HE-Meta: U2FsdGVkX1+lSaI3f3zpm7kbHt/6yMWJNDDzzbbCn3OuCZpknRLQHUw7pttemVymBKl0kZ8k994mnZ6RMYYyEMJySn3XYp66hRlDIG+PaC7TyBbjMKd0yU8pAhgxlXZwp3my1KyTeqsrCRMujsGMPa5ZNPHlYR8/8EhH/gngb3nFQTvjiig4JVT7fjdIn/ILcaYWIp4GVW2czPHWENm8ES+h9F8MOvX3VOpnxBh07biMBXbPcIxOiUa3G2YkqlnYr70NMftBZ55AfxvGso4uGW2kpRJ4rD3Gh81KNEXGWB8rBCPQpvRkfRufYYhTfQjabzuCyatqvB+VRTSV92i67A7/N/25Gev+aJopkgkKAE4P8UGd7L7k01sqZZRhlXwx5mcZGhKWtYo83EGyECX39WdWF3vsFY9Qt1w8zqVokQSXV7ahFYtJE1mzxs0jBbH+g2xogthQBurJrZAu+9alqqRrItX65vYSvU3nvIE3GMONHdggnhcVs+j4yclYd6OlSbbMgBka2FseD/09bv4lJYKfFFNeF+VGAJQfPv4nb/pCef86Ks8qZgYWUHfhaM5mrniw3LD4OjmfRP9F3YbJwEzMZ6ftVnEBMDxAoMeET6DPqP40r4ql5HkvyENzDqxJcivDIvzXrBWXx+5t4T40Zkacg9ydaeUDEbXi/bBjz3+L2qCidtAc+MCik4Q73iB5qnx+TXUagNSjiasUURx5Qn09WELf/R8/tsV8KltQ/DA0hdOMjxXwRKKSg6ZaO/5PtrAQ3P8Im6ciRuTyDO5I7sF7iqp71ESUz1nkPPCak6QvxfF07I5+ZOaKDG3JYBeBsr7JKo62f9izceNFLL6P1Hz2OKYjemiPW6OiDjE7eJ3menIToY/Ojyf8diizWGwCH2VjC1g8U3cxZOLDwFO6CFg4sT5GRjk1RXAtWyXHvAKg7OXikoJ4CduQrT5FglSMlFOA5BCRawNzh7NMbr6 NN+ecxtU DtqgfAU8NldUsHB7WKJsjV/bOCET2Fgq9I/axJopUKYFa9D6RNBUbbXng6gFOCbFwX9E9TfnWTRMkooQ7Pb+MCXSrGnqmh257apZFKUt14Ub+s/+RevXlo1WLsl7Rsng6uTFdIfAUQF2gq9nEmnhWHq3O6TT05U0fiN0S6CNHICCIYlYGPcKzLBnc0lSUufR6hkOxZ2pGTaq2zFA= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: 在 2025/3/3 21:45, David Hildenbrand 写道: >> --- a/mm/hugetlb.c >> +++ b/mm/hugetlb.c >> @@ -2135,6 +2135,8 @@ int dissolve_free_hugetlb_folio(struct folio >> *folio) >>         if (!folio_ref_count(folio)) { >>           struct hstate *h = folio_hstate(folio); >> +        bool adjust_surplus = false; >> + >>           if (!available_huge_pages(h)) >>               goto out; >>   @@ -2157,7 +2159,9 @@ int dissolve_free_hugetlb_folio(struct folio >> *folio) >>               goto retry; >>           } >>   -        remove_hugetlb_folio(h, folio, false); >> +        if (h->surplus_huge_pages_node[folio_nid(folio)]) >> +            adjust_surplus = true; > > This change looks good to me > >> +        remove_hugetlb_folio(h, folio, adjust_surplus); >>           h->max_huge_pages--; >>           spin_unlock_irq(&hugetlb_lock); >>   @@ -2177,7 +2181,7 @@ int dissolve_free_hugetlb_folio(struct folio >> *folio) >>               rc = hugetlb_vmemmap_restore_folio(h, folio); >>               if (rc) { >>                   spin_lock_irq(&hugetlb_lock); >> -                add_hugetlb_folio(h, folio, false); >> +                add_hugetlb_folio(h, folio, adjust_surplus); > > I'm not quite sure here, though. We dropped the hugetlb_lock, can't > some weird concurrent action result in us not having to adjust surplus > page anymore? In this case, we will get a free surplus folio without reserved. The existing code has similar logic. In free_huge_folio(),when h->surplus_huge_pages_node[nid] != 0, update_and_free_hugetlb_folio->__update_and_free_hugetlb_folio may fail due tohugetlb_vmemmap_restore_folio() too, and will treat it as surplus folio.