From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010017.outbound.protection.outlook.com [52.101.56.17]) (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 500CE2931F9 for ; Mon, 3 Aug 2026 15:34:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.17 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785771285; cv=fail; b=Jy3AofuCk1IsGaImHxxaxKFzFOsDSxbO4QoVawMJDCEOT08iA79WeLzdCmmzC+EeLOKyqED7cna1nYo/IdiefKbyHUx0VR1KRkW1Ir/0pVzUlDRzc4PBvqEuX9N2Vwws8zZUY1ymk4pGBKHxRDtsA7YXeZomWnQYyKOTT00z9CI= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785771285; c=relaxed/simple; bh=6NctQHtV7Vd0S0OpPEnJHLbHHtJsM8twNsIJBuBmfkQ=; h=Content-Type:Date:Message-Id:Subject:Cc:To:From:References: In-Reply-To:MIME-Version; b=kWdLacn9QddDjKW72BqBHsSAyskxuC7XzyNMOEfF7ydqo7nCdY5r+dA0u9aMX2pRlZ7M6O0RBKTXrodltjIQN1iSHJMvns+nltDdMMi29mcJiIdS4Kmf97+KdVLPmaa5Thux0lbMNIORbx7h1SdJBH+vna6b5bVuS8ClPT4MW5s= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=Ts8X9Y7S; arc=fail smtp.client-ip=52.101.56.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="Ts8X9Y7S" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wEI/Mxb8+DCg5cmS0hna1VjEdcL/sj3/x4izPJvjyO3JbtG4FaaoY+dyreezDr6QQlpYAipWNN7ReM3hmmi4t0la7egpfxkkDG9MNMdgIWkAXf59RNnKWhfhMkRbSB4b80Kqe1egGS7+wt2h3NjTsqvCJReaQixpVsbxt20gACc+w22UHvyZTlrQOH8xc5wBoRenN1S4evoiuF2aW5JYzeijGWZaA9cQx56aa6iYZXxIH4GLzcsOnQeFuFci2ktSo04GyOZHzCkHT2tB46ttmwaBmbcjf+uc22a317dC6WJSy3LsSAsSgYXgbOc6mpOzvRLQfM81wxaprXLjxwChGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ivloSloBsPfVSxHQcNFVB1STj59t6hZ3rSk67HO8O54=; b=cgx9O7QgWaByDwKBC2V9S3jG5gohdCN3hzDkzaGaPk5GrfKNC9lOHq81MGPOC+LYjfxU5HAbvHnlACpXsyl4Ajzmz5+1gZCn85WAAozdpyr1ZLWRXPrOH94GrDkQHGC0FVdZq80kwZUKASJk5LQACttKE2hNQEWGIb9UTUvS8qGtZDE4xcddIMwi/MjqTQ5WYtQhOhn0zOIFmF5wUMCL9jVUzZKWIpegR6wpD1uZUVOwEsIloX1t80+dRQr2AWjjMKZ4C8OrMWFWhfV5l/lgVKRLvVgtFpyLDtWC0RHW+pSv4So6UshtSJoKRvqcJ1eM+9MplvHZSiI87mjmbwDVVw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ivloSloBsPfVSxHQcNFVB1STj59t6hZ3rSk67HO8O54=; b=Ts8X9Y7S++w0upZcdMrEussGHlQMCBsFGc4H4Kvy5kyZSo7MT77pd/u/wAnGhgt/mJaNmWWemZA/yEJSYyMlp0bStcMzkk3qiU5EynWjq62kDEh0q6+TcWWZHVr/JsQdkl/vMKkGimUGAC+G+g4rdwf5ACaw8SXD7T0gM2cM96jCgQMoxeMYZrOqd283/6QzyCejdXMjJrCAUoykn8XBJlqtOrMPsk13c9lN18QoZN6ntkTGjA2fm+EK9Dd7kp3vhn/aCk83M94bNofDfj60nrM8WEEYKZj7L6rYT9pcb0PrAIu+pAZ1cpZEJPwHKN3M3WHqUXlYm2NrAWh9QYI2Ug== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from IA0PR12MB8374.namprd12.prod.outlook.com (2603:10b6:208:40e::7) by CHAPR12MB999224.namprd12.prod.outlook.com (2603:10b6:610:302::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.270.18; Mon, 3 Aug 2026 15:34:37 +0000 Received: from IA0PR12MB8374.namprd12.prod.outlook.com ([fe80::d85f:4c87:ae84:3f16]) by IA0PR12MB8374.namprd12.prod.outlook.com ([fe80::d85f:4c87:ae84:3f16%5]) with mapi id 15.21.0270.017; Mon, 3 Aug 2026 15:34:37 +0000 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Date: Mon, 03 Aug 2026 11:34:35 -0400 Message-Id: Subject: Re: [PATCH RFC 01/14] mm/zsmalloc: replace PG_private with pointer comparison Cc: "David Hildenbrand" , "Matthew Wilcox (Oracle)" , "Andrew Morton" , "Muchun Song" , "Lorenzo Stoakes" , "Liam R. Howlett" , "Vlastimil Babka" , "Mike Rapoport" , "Suren Baghdasaryan" , "Michal Hocko" , "Baolin Wang" , "Nico Pache" , "Ryan Roberts" , "Dev Jain" , "Barry Song" , "Lance Yang" , "Usama Arif" , "Gregory Price" , "Ying Huang" , "Alistair Popple" , "Qi Zheng" , "Shakeel Butt" , "Kairui Song" , , , "Minchan Kim" , "Sergey Senozhatsky" To: "Johannes Weiner" From: "Zi Yan" X-Mailer: aerc 0.21.0 References: <20260731-remove-pg_private-v1-0-142c97ba3562@nvidia.com> <20260731-remove-pg_private-v1-1-142c97ba3562@nvidia.com> In-Reply-To: X-ClientProxiedBy: MN2PR20CA0038.namprd20.prod.outlook.com (2603:10b6:208:235::7) To IA0PR12MB8374.namprd12.prod.outlook.com (2603:10b6:208:40e::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: IA0PR12MB8374:EE_|CHAPR12MB999224:EE_ X-MS-Office365-Filtering-Correlation-Id: 944a8050-9975-42b5-802e-08def174b9c5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|7416014|1800799024|366016|56012099006|4143699003|11063799006|5023799004|10067099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: mkWuVfgZmIk4bf7Kyv02TdjWybujH9kag5c96OyaWQtiwSw+lskNadeysybtVqMf+0I4InoL/KvlFeBubL+9797RzGKsahbIjgPfHo7s1xcWsg4QA9Be4GOgDT50nCvoQ+7/HGhQOhBlDTvuYyIXDPQajCAjqprJONtisrTJ1lGpkwynM81v7NJ6RgSKuvsxLPBi3vv5f0m3BiQdJFGqfX5lHs76nKqhNFRI9M3snyBEYNY+VS4hcPdJWDInAcf1WHXAJcqtdlg/4+c///CK00IFIPmuFpwuHah6oiI6myVBfpiVUVoXe8z1wPKW7XCcohBGK/s95nBzHO1BLrKky1rs/15JakjcGhu+HqhUe+FKJsydYxOEU7XFn11RDFPizgeFLErT2d9+jrKg75biqxKuydggCYK0AW8v4fT/E52qrydyAr6xl7ZVN+9rH10pafJRhtqJCbDOoZOMmZG3AU1MwlQpmuj7OhiaawfZnMcIczevSNyu73GbF9bqdvX2xRB+oA7xKkZlAnXTNKYBbOgZSq85hqwBut7NqPZE1obu7iqDjynmaPnEMzG9oXjEaBtVanHlf6uGpbjIBlir5p9+3Nhn0xqd5E06ebqYQHdTPEec/kZQMdOL1TTR5mnAFQhK5D9X4Czxh6YBO3BxSBZc0TFQdsyaxe4UHJJbZhk= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:IA0PR12MB8374.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(7416014)(1800799024)(366016)(56012099006)(4143699003)(11063799006)(5023799004)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TDNQN2x2eGF5bzB0TWt3L1BVZCtrbXdaRjZ6cURyVXgyam9memF0ZmFVcGJM?= =?utf-8?B?clV5Q3h5ZS8yZ3Fwd3pIZUdNSmF4UkNNTk9RaHIrY3h0NlFBWHNJTlpyblJt?= =?utf-8?B?TzlndFBzNlpBSHNJb2RGM1poOXVYZDRGR2RxYzgvcVZkQ0F4azNXRDNFWllN?= =?utf-8?B?d2VSQkNqK1NrWWlEa3E0Qk5VOS9WTVZNcGVRZUFFVEg5OXJHYWc2ays1Y1Bq?= =?utf-8?B?S0xtWEszcVh0VkpoYlVhVzlyb0NMeFpVbERwVW0wZG9TMWt4QitqMUpQNzdy?= =?utf-8?B?YXZWV2dsY1BHOGFQWkViRTYwN09Oa0YwU2c5MzJwTFZkSFNKUzk1SG9XZEw0?= =?utf-8?B?emdEMlVWSktZaFFwQm9UNDZ5aXZzSVMrNEloby9vaCszUUtTTkNiQS9MVVo4?= =?utf-8?B?UVYvS0gzeTM0Vk93Y1puTGRzR09UTU9tM3BIZmtNRjMvYWR6cEQrQ21Wdjdi?= =?utf-8?B?eHVFQWIxZnZuUWswNjFPY0tvT0Yzc1FUVHdVV3hoM3ZxZHdmT1BrTFJ3WmtM?= =?utf-8?B?dmYzMFBPbmd6N252QklYNWdpYU1CczVrWTFnaWh5QWdoMmFPME5KNVJ0L0JZ?= =?utf-8?B?ZW5OeUdFVDZQN25vZC9xMjNrK0NZK3lNMkJyajdsL2dMNlpsUmJNK3FCc1BD?= =?utf-8?B?QnM4cnloVGpCeTc1SkQ3SkgzTEU5R3dYN1lSV3dmVzZ6RkR0UCtFcmVLdXdv?= =?utf-8?B?WEpucGRObFVNMjV5TnNMUWpoY3B3OTZrcmp3T3FUMXBkM0RYZFJFL0tFOStk?= =?utf-8?B?aTM1RjBtTFMrL0p5L0JZU1dGY2pOU21QcUtxQWxVVmFRU3pVNnVQb1hmSGRa?= =?utf-8?B?b2R3SThBa2JDVTVZKytpUHh3clFqMmRLUDZnbElpS25JRzFqUHFFUUZPNzRh?= =?utf-8?B?Rmttck1tSHhuc0ZBc0k1OGZJakJpemFzNkJORVZVTy9yYkJLZis2VlJPOWYx?= =?utf-8?B?d2FYZ05LVzBPT05Hb0dLLzZ0VnFHUVFMOTNYeUwwanhpS0UvNm1OcFZhL3dE?= =?utf-8?B?Y0VxVXM1a1hZTHU5dmUzVjBaRjJYMkJjMCtOQVNBbGh3SllQU0tQWWE1L0xw?= =?utf-8?B?eDlTVUEzQUx3RytGb3ZTY0dteHlTUUhQSWkveEdpYTFsTWFIVmF6MGxDc2hx?= =?utf-8?B?T09EUHhHS1VVMGFSRUFvbFNTL21PVlNBaEljYnVnUmwzMnhTbVpOTm5EUktn?= =?utf-8?B?clN3THlLQVlNM1c0aGErWGtJVlhPcnBERDZ2V1BGVWxPK1M5NGlzOXVoZ01U?= =?utf-8?B?ZFhmdnBzd2h4Q1pkYXMwNHJJSmJLaFRsTWQwV2tuUmhPSXphZW9TdHRaQVFM?= =?utf-8?B?a1dvM0c5TkFBeGhqdFVheFZtZjRYY0lBcWVvTmZ2cGY0c0FTUjNwWFkvSEVW?= =?utf-8?B?VkRyNGNqWG1aRTFFOTEwUldLdWlManlpVjFZSEpGUVd2dW14dlV1N1o0eFE0?= =?utf-8?B?OHlLcmk0b3puZTh5ekVNMlpkMVJ5Q2hDT09zOHpLQnYwMnF2bUtFMVBtYzds?= =?utf-8?B?dmh3Z0xVUTBoTEV2K3BIZzVQSzVsTzlkdmRNakhSRGhabzh5azh1ak9TcGlu?= =?utf-8?B?cmE1UTdUT2FoZzgwTS9mdUVwczkrUVdlTFlubjVzK0x5dGkyN3k5MFgxOCtG?= =?utf-8?B?UVpZUkpBamk0Y0lhNTFUWnRwT2t5M25NUW5Zb0dhQWFjK3VKcTAwQi96QkM0?= =?utf-8?B?YVdsb0plblBTT21KTDZibFhJSGNaQU1zYk5OYmdPbE04N1EyOXFOL2p4TnBz?= =?utf-8?B?dFhDVE5oTi93cE93TFdSVWJaVFZ0MnRnNUVTZWFIM0hPamdpUnB5M3hQSVBw?= =?utf-8?B?Wmh5NlVPQUtza25SWE1IZmVSRTUyM2VoTEN5WjNaRTNyeE5rbTN1bURUaEtx?= =?utf-8?B?Z040aExoN1dFNXJheFBYS3kvNDFEOHp3VVY2eExNZ0NHUjN0OWNQTS9BL1lL?= =?utf-8?B?MU1hZWNNY1pxNTBHV3NuMXJmVVhuMk9NMkZsVHFweCtlQkNvaUpuY1N0K1RJ?= =?utf-8?B?QUs0K1h4WFlUMk1xWUo0WXFQZHQ3MUNMUXQ4bURQMmlUckU2ck84WjFKY2xY?= =?utf-8?B?eEdyQ1dyeWZTOEJydEE2bGE5UVdEbnRnU1htb2RFU1JPa3hLQndiWXlGSzdo?= =?utf-8?B?WnhDVHIycmZET0dvZGlMN3dqeVhMY2V2ajBwK01KTnk5RzE5Uk13TElYRU9G?= =?utf-8?B?cDQ0SGJWYkZVYXJicHJBSzBTdTg2R3BidXhSZHVDNTBudWg2MmFvcURQcE03?= =?utf-8?B?SjZKbmZJRE5UazVnZk80SUphb3BLVFMxeHZwVGp6MytWK05kSHpyZjBQOUxS?= =?utf-8?Q?VIcSye4DmLMWvgz0p8?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 944a8050-9975-42b5-802e-08def174b9c5 X-MS-Exchange-CrossTenant-AuthSource: IA0PR12MB8374.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Aug 2026 15:34:37.0468 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: QPomLv+30xcv97Yrj50aHMlsNg/1iLo5BhJYGGxrMHx6+RNn3BUBAxq5LfMHa2G0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CHAPR12MB999224 On Mon Aug 3, 2026 at 11:04 AM EDT, Johannes Weiner wrote: > On Fri, Jul 31, 2026 at 10:13:24PM -0400, Zi Yan wrote: >> zsmalloc uses PG_private to indicate first zpdesc in the zspage chain. >> Replace it with zpdesc->zspage->first_zpdesc =3D=3D zpdesc. The check, >> is_first_zpdesc(), is only used in VM_BUG_ON(), so performance impact >> should be negligible. >>=20 >> It prepares for a future commit that remove PG_private. >>=20 >> No functional change intended. >>=20 >> Assisted-by: Claude:claude-opus-4-8 >> Assisted-by: Codex:gpt-5 >> Signed-off-by: Zi Yan >> To: Minchan Kim >> To: Sergey Senozhatsky >> To: Andrew Morton >> Cc: linux-mm@kvack.org >> Cc: linux-kernel@vger.kernel.org >> --- >> mm/zpdesc.h | 2 +- >> mm/zsmalloc.c | 15 +++------------ >> 2 files changed, 4 insertions(+), 13 deletions(-) >>=20 >> diff --git a/mm/zpdesc.h b/mm/zpdesc.h >> index b8258dc78548d..4fd81c2e80769 100644 >> --- a/mm/zpdesc.h >> +++ b/mm/zpdesc.h >> @@ -26,8 +26,8 @@ >> * with memcg_data. >> * >> * Page flags used: >> - * * PG_private identifies the first component page. >> * * PG_locked is used by page migration code. >> + * The first component page has zpdesc->zspage->first_zpdesc =3D=3D zpd= esc >> */ >> struct zpdesc { >> unsigned long flags; >> diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c >> index 8204b76f78308..e8ef227624efa 100644 >> --- a/mm/zsmalloc.c >> +++ b/mm/zsmalloc.c >> @@ -290,11 +290,6 @@ struct zs_pool { >> atomic_t compaction_in_progress; >> }; >> =20 >> -static inline void zpdesc_set_first(struct zpdesc *zpdesc) >> -{ >> - SetPagePrivate(zpdesc_page(zpdesc)); >> -} >> - >> static inline void zpdesc_inc_zone_page_state(struct zpdesc *zpdesc) >> { >> inc_zone_page_state(zpdesc_page(zpdesc), NR_ZSPAGES); >> @@ -478,7 +473,7 @@ static void record_obj(unsigned long handle, unsigne= d long obj) >> =20 >> static inline bool __maybe_unused is_first_zpdesc(struct zpdesc *zpdesc= ) >> { >> - return PagePrivate(zpdesc_page(zpdesc)); >> + return zpdesc->zspage->first_zpdesc =3D=3D zpdesc; >> } > > There are two checks: get_first_zpdesc() and obj_allocated(). > > static struct zpdesc *get_first_zpdesc(struct zspage *zspage) > { > struct zpdesc *first_zpdesc =3D zspage->first_zpdesc; > > VM_BUG_ON_PAGE(is_first_zpdesc(first_zpdesc), zpdesc_page(first_zpdesc))= ; > return first_zpdesc; > } > > If you expand the helper, this seems kind of pointless now: > > first_zpdesc =3D zspage->first_zpdesc; > VM_BUG_ON_PAGE(first_zpdesc !=3D first_zpdesc->zspage->first_zpdesc, ...= ); > > Mayyybe it could make sense to assert first_zpdesc->zspage !=3D > zspage. But that's a separate issue that the previous check didn't Usama has the same comment about this. > necessarily catch. And might not be worth checking, considering how > trivial create_page_chain() is. > > In any case, it doesn't seem worth keeping the check as-is. > > And with one caller remaining, you could delete the helper and inline > that expression into the check in obj_allocated(). What it does now is > self-explanatory; it doesn't need another name like that PagePrivate() > check before did. How about the version below? Basically, I made is_first_zpdesc() more straightforward for backpointer checking and first_zpdesc checking. 1. get_first_zpdesc() needs the backpointer check; the first_zpdesc check i= s meaningless, since the assignment is done above. 2. obj_allocated() needs the first_zpdesc check; the backpointer check is meaningless, since the zspage is from get_zspage(). Both conditions are needed for is_first_zpdesc(). diff --git a/mm/zpdesc.h b/mm/zpdesc.h index b8258dc78548d..4fd81c2e80769 100644 --- a/mm/zpdesc.h +++ b/mm/zpdesc.h @@ -26,8 +26,8 @@ * with memcg_data. * * Page flags used: - * * PG_private identifies the first component page. * * PG_locked is used by page migration code. + * The first component page has zpdesc->zspage->first_zpdesc =3D=3D zpdesc */ struct zpdesc { unsigned long flags; diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 8204b76f78308..d89253dc6dd40 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -290,11 +290,6 @@ struct zs_pool { atomic_t compaction_in_progress; }; =20 -static inline void zpdesc_set_first(struct zpdesc *zpdesc) -{ - SetPagePrivate(zpdesc_page(zpdesc)); -} - static inline void zpdesc_inc_zone_page_state(struct zpdesc *zpdesc) { inc_zone_page_state(zpdesc_page(zpdesc), NR_ZSPAGES); @@ -476,9 +471,10 @@ static void record_obj(unsigned long handle, unsigned = long obj) WRITE_ONCE(*(unsigned long *)handle, obj); } =20 -static inline bool __maybe_unused is_first_zpdesc(struct zpdesc *zpdesc) +static inline bool __maybe_unused is_first_zpdesc(struct zpdesc *zpdesc, + struct zspage *zspage) { - return PagePrivate(zpdesc_page(zpdesc)); + return zpdesc->zspage =3D=3D zspage && zspage->first_zpdesc =3D=3D zpdesc= ; } =20 /* Protected by class->lock */ @@ -496,7 +492,7 @@ static struct zpdesc *get_first_zpdesc(struct zspage *z= spage) { struct zpdesc *first_zpdesc =3D zspage->first_zpdesc; =20 - VM_BUG_ON_PAGE(!is_first_zpdesc(first_zpdesc), zpdesc_page(first_zpdesc))= ; + VM_WARN_ON_ONCE_PAGE(!is_first_zpdesc(first_zpdesc, zspage), zpdesc_page(= first_zpdesc)); return first_zpdesc; } =20 @@ -833,7 +829,7 @@ static inline bool obj_allocated(struct zpdesc *zpdesc,= void *obj, struct zspage *zspage =3D get_zspage(zpdesc); =20 if (unlikely(ZsHugePage(zspage))) { - VM_BUG_ON_PAGE(!is_first_zpdesc(zpdesc), zpdesc_page(zpdesc)); + VM_WARN_ON_ONCE_PAGE(!is_first_zpdesc(zpdesc, zspage), zpdesc_page(zpdes= c)); handle =3D zpdesc->handle; } else handle =3D *(unsigned long *)obj; @@ -848,9 +844,6 @@ static inline bool obj_allocated(struct zpdesc *zpdesc,= void *obj, =20 static void reset_zpdesc(struct zpdesc *zpdesc) { - struct page *page =3D zpdesc_page(zpdesc); - - ClearPagePrivate(page); zpdesc->zspage =3D NULL; zpdesc->next =3D NULL; /* PageZsmalloc is sticky until the page is freed to the buddy. */ @@ -1001,8 +994,8 @@ static void create_page_chain(struct size_class *class= , struct zspage *zspage, * 1. all pages are linked together using zpdesc->next * 2. each sub-page point to zspage using zpdesc->zspage * - * we set PG_private to identify the first zpdesc (i.e. no other zpdesc - * has this flag set). + * The first zpdesc has its zspage->first_zpdesc set to itself, no + * other zpdesc has this set. */ for (i =3D 0; i < nr_zpdescs; i++) { zpdesc =3D zpdescs[i]; @@ -1010,7 +1003,6 @@ static void create_page_chain(struct size_class *clas= s, struct zspage *zspage, zpdesc->next =3D NULL; if (i =3D=3D 0) { zspage->first_zpdesc =3D zpdesc; - zpdesc_set_first(zpdesc); if (unlikely(class->objs_per_zspage =3D=3D 1 && class->pages_per_zspage =3D=3D 1)) SetZsHugePage(zspage); --=20 Best Regards, Yan, Zi