From nobody Sat Jul 25 01:35:28 2026 Received: from smtpbgbr1.qq.com (smtpbgbr1.qq.com [54.207.19.206]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BDCCB2DA76A for ; Tue, 21 Jul 2026 03:53:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.207.19.206 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784606011; cv=none; b=Nm5GmGKEZtDub8CVbQVxV7VCc3RMCj3X0AM2uWILjhZ2dKnZKnXf37aEwEtbP+dvVktSbnPuUkViwhxYM4U27a30ReklBn+vuFJ+269Tu/G50+ec5LQW+eeBXkfwMsPAcvldqHOfyLubS5qwdDfNq5BFyWzfALuJaL+hM8ugXqE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784606011; c=relaxed/simple; bh=5FGsswA/LgocxG09GXrEl7vGOWr82tv8cLfi+5jBMKE=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=qIox5FxpeE5jn48NQ9RbuAE1DByJ1B9ocS/ksnFqv8uKzbLpCN2iCdN+OajyFl53DNpvXD+UU0T1w581fCKhhVp/LbLe+KdmrwLVaJs/syyLjyH/YNxpNfSnHBoCLJu+ZvEGE87k190NkLyVjbJ62k0HeFOT5fCtSPdqy8PoN28= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com; spf=pass smtp.mailfrom=uniontech.com; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b=OFBM8Ll1; arc=none smtp.client-ip=54.207.19.206 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=uniontech.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b="OFBM8Ll1" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uniontech.com; s=onoh2408; t=1784605948; bh=zY79sr8kjVeHPbjSxuo3LSPqqajUZP8hWgccVp8Sv18=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=OFBM8Ll1JDeuoEIf6hZZOflZhhpQHuGjUF84bfWqT89JJssvnaVXBGlahLBtY+tWl RQtQiauj+by8q3fCJVcK9TsU0PyhDM85sxdZzVXq5K8YudU28b+HEeij4eb7myeYWu yHLIc30So1bQLMlxzON98VcgQ8a8QIO6Lg7pzvIA= X-QQ-mid: esmtpgz15t1784605931t9189992a X-QQ-Originating-IP: aUunXqQ0UPlQn8AHkHeYf9BotVgzzkUO5DceQIxvYzw= Received: from uniontech.com ( [113.57.152.160]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 21 Jul 2026 11:52:09 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 1 X-BIZMAIL-ID: 2443382836857113774 EX-QQ-RecipientCnt: 8 From: Yichong Chen To: Muchun Song , Oscar Salvador Cc: Andrew Morton , Joshua Hahn , David Hildenbrand , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Yichong Chen Subject: [PATCH v2] hugetlb: evaluate subpool free state while locked Date: Tue, 21 Jul 2026 11:52:07 +0800 Message-Id: <20260721035207.1437935-1-chenyichong@uniontech.com> X-Mailer: git-send-email 2.20.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-QQ-SENDSIZE: 520 Feedback-ID: esmtpgz:uniontech.com:qybglogicsvrgz:qybglogicsvrgz3a-0 X-QQ-XMAILINFO: NDxI9psdf3YVKQxzh+pLbeJcw4N5/iO+ftLCj4XefDB7p/DbUHhJXy+b pM2iV1IlB5ix1X3K53MNYsp0ILfUWEB1hCTzXxGF9ibqEnimirucD26PX8nm+XRqo1nEigz EpMo+2sve32o8Y6xoWfN42821gX821yE3cRq59zjCeVKx/6TFzRm1NPRrJbguZwdTCEDk4d 8vxe0BII/BDX5jMjpjjvP02wzhg+2l64kxzk5MbPLgMrh+GmxbtMt4VOGLSBnpegoX0zpZU LsM9HTzTRO6dDVXTulrIzgSYZsjFotd4wh8ErOAmu5NUIW0FcmC771q9H1iS6tnP09nOyJ6 SYHloRZOFTvOKfmptm7/4oGC2nrLMoVHvZJmWEB9UuGfRPqxskz8kMCKTD6a01fsJupQLaw YtX+Sz7cha7X4okYRMhjiojo+LnHISV0KSrLMdg2xUNBcdbMfB5Q714KhbOlC9Zqclrv8MM qv5/MERlUgGd1bT0obvia890w5LQAb2xuRzPLjvwO9pSQJgJN8FPjComIhJ9Tmn5MxmJ4fr NekMQdkBnP/4CtJvFF0WTb748FjWokqTru6saHTFrwazoMjzr3/jTIafeXDRKflLR29tQ/a WeUyDTp08A0Nj1/+Oo4gqzjO2kSt3zVdM/BC0rNy4NjFkchrAiLFqTgwyAkor4X3pIM2gJb dxF1SZaJVfrB3OfCiiD1rbZjP5r9sTD1Y9JRG7vmuje/JjJGL09iYWmcCMRE2oa3ARq2oeC kC1kF6dEXi1YDu8TFyo/CnyVGrvt9G0s6L2vW0zHb2Rj1ZI0gJBBkV9ZpNk95O3DApS/NXF IXQngi7kYbDsdxJsgE60QWVRPplHWnscYNP1+D8rHC/A5Wkep8zHzFRVjZfPppC0Mz+ngAx KSIi0GkLD8V3TFwJux2USgxELuWcZ6DFKO4/UTyfctmUgs06+eHYE2DYvC+TRfbEItjPZTA YpmLsRpiFhGxXSFea9SC02LuZzaxgVeITCbu/Zohjli0t4TcmhAf/bvugy6tpm+SY+N2TRT /9h3GJ7VuXWpRGOCv8 X-QQ-XMRINFO: OD9hHCdaPRBwH5bRRRw8tsiH4UAatJqXfg== X-QQ-RECHKSPAM: 0 Content-Type: text/plain; charset="utf-8" unlock_or_release_subpool() drops spool->lock before calling subpool_is_free(). However, subpool_is_free() reads fields that are updated under spool->lock, including count, used_hpages and rsv_hpages. Keep the free-state evaluation under the same lock that protects those fields. The reservation accounting and kfree() calls still happen after dropping spool->lock. Reviewed-by: Joshua Hahn Signed-off-by: Yichong Chen Reviewed-by: Jane Chu --- v2: - Reword the changelog based on Joshua's observation. - Drop the Fixes tag because this is not known to cause a user-visible bug. - Add Joshua's Reviewed-by. mm/hugetlb.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mm/hugetlb.c b/mm/hugetlb.c index e319c6a00555..46ab702c0fc0 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -140,12 +140,14 @@ static inline bool subpool_is_free(struct hugepage_su= bpool *spool) static inline void unlock_or_release_subpool(struct hugepage_subpool *spoo= l, unsigned long irq_flags) { - spin_unlock_irqrestore(&spool->lock, irq_flags); + bool free_subpool =3D subpool_is_free(spool); =20 /* If no pages are used, and no other handles to the subpool * remain, give up any reservations based on minimum size and * free the subpool */ - if (subpool_is_free(spool)) { + spin_unlock_irqrestore(&spool->lock, irq_flags); + + if (free_subpool) { if (spool->min_hpages !=3D -1) hugetlb_acct_memory(spool->hstate, -spool->min_hpages); --=20 2.51.0