From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ed1-f45.google.com (mail-ed1-f45.google.com [209.85.208.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CEB7E1D54FA for ; Tue, 12 May 2026 14:49:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=209.85.208.45 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778597363; cv=pass; b=t6QeylHOxkr9fViEf7OE4JDW5CZANtJ1iYCt0AD401SvI+xTzqaY+k1qWxx48VtF6JIz1iN13tpWCN5Kq3QhKYK+N1bYh/bWAiuylwHouxS40RYHrLc3ODHuA9CjazInn63pt3t/Lnh3ggGuPFhJUI+M76Gm04YEf54ms0ApePo= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778597363; c=relaxed/simple; bh=2RmbmMCZ33TuuII4wRWk86PcnWvE3msSig3I+wv4KS0=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=YDvEzl5ry5bZTBa5JXP2y2eMTW4ehz92HTjYQrH0Pvg2CyZ+F6MgEx5J5fdwoZ/KXqdn4II1o8ZLIoJIUeOdfsZrNbskWS4/A+ON1tHScfmiiXoMbrCE1NiZzs5ksnk/c4VRheWXp37emvbE9x/LviBFafjRgxXQPOBxLIYhXkk= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=qmwyoDa6; arc=pass smtp.client-ip=209.85.208.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="qmwyoDa6" Received: by mail-ed1-f45.google.com with SMTP id 4fb4d7f45d1cf-67c1e0229acso8703143a12.1 for ; Tue, 12 May 2026 07:49:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1778597360; cv=none; d=google.com; s=arc-20240605; b=Ryl/KnkfYYMg2/JHEDmlwDcxn4sL7x8+ZFUnJzvY8QBcSHzbytq3+yGmvd81Ar8W1R Rxg5Gv/9eTI7nLmgxPMcSV6sVSfB9FzzpXpqB9u+UNPxarlsfpOqdrd3NOLsP29ByoCm v/iLcneE+8xEX6leAnjiBnVUN0v3sunfqUeQ/LbxTBDXRS9jz6nOhNkCEccHWhxGn+r/ mkYETXTJcL2q19hIMeyDkdMbh64oGG156sVFaE75EszU0t45kN7XodZLjuO8TMILqxos jFufV3GxgvDYYTHe0c5PH7RetXk1hfe7VpQgoWIQbt1lZg0UygfBbYeoe9xs5gUf2KoS fRBQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=B9eMKwfG9wGO309ZVEQXdjdoVqLMWRmUPakAKUCaz6k=; fh=Aa72pXGi9hkh3Z4yO+JaoVC8ClBE0hBvzDWYKIlgWUk=; b=INrGE/r/gYQZICk++C4ePP/Kq5aphg9oXXvXHLCGyLlUlJ3O600FbNJEupo6G8uBpf K8QNGRPAZUOA4MxBbYHpZ9a7chm6a1xgXDEB/nYdVCVjWAhN0ShPX0THABT7Oy12zeys 9vLnwQDjvVrHHprjBv5tHSkfsr5p3IYNEdYf9u3GETx3JrhfCryRqF/i3zK2xmjqlsto 4i1Lbq+4GTrDg4B8sA8XV59LdiLZh/Lvnh7qiBxu8Qwk/9klnvH6HIKwsS5bXpI706eZ d1MVfrNFFP27CYjqgOEquNeW6eAlWCP+BQMqksCPBTiu6K0wkMRBE9iQwA+0RYqUiT4z +0lw==; darn=vger.kernel.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778597360; x=1779202160; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=B9eMKwfG9wGO309ZVEQXdjdoVqLMWRmUPakAKUCaz6k=; b=qmwyoDa6nJ81e7s71CDw9PToKnDQIYsxL0pzqUnXUk4iUMrAU8T74SG8IHbFUNde2j 0PBkdkPQZYbIaEGsjFJ6HR31lfIVpUeomVMlSsfvjqXj/gfglX1I96QoHUjIU/u1xOTP qj9GVwad7TVdgD45Vp558LCHCdeGeIs3S9TSvxz2OSw37gdOGWIGn3A9l4aDThvzk0DB loCnfJH/ZO0x5gH30l0XEWep7FOWstK/zJ6Lr4Bp5vBvGEcvptFTWrQyPu7RZy6y9lO+ MbwletGIf2jO2O9xxc3pL1T6UhbRnihNzhNyE7J9RCNxCwer0o25MDxm6FaNqeSEMhU2 4bQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778597360; x=1779202160; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=B9eMKwfG9wGO309ZVEQXdjdoVqLMWRmUPakAKUCaz6k=; b=tN90iX+9tAi1pCZtcQS2hfh344xYaUVUgJEzQV4RY5qo7V3hy226FJlOUIu2okA4BN LLVx7Pax/16yuVKOsBhxiraXETXVDO/vq8ZvG54mFPfnnp2hEBp3ojLE/IckyoUbNNz7 eZVTNzizIXKJOrNfxptw16/IxH0rT80uRKXDgmovSx+YyvewHrAnGLblsDp9zLzoZdpJ FyMU5k+nSfx6OSWBHNwEOZbnsagAMb4ciwgSQWlL6gEC2pNKS6vXik6XoRwqs/DQqmC/ sexkvCT4QFF7Loakm2YIWzP4VwWaK7eyOe8ZuiZAAicAdhYBP4dLLCRhqAa3DFo1bmGp e/sg== X-Forwarded-Encrypted: i=1; AFNElJ+PwUGX/28+IXhMUzP7OT8U1YQcaqWmZxVMDexyGp6Hh3sYTWVVNruAmuXWhEcfT9dRPoAAcHJfXcKEeH0=@vger.kernel.org X-Gm-Message-State: AOJu0Yz4MQcX9sIKl13l13vhSXCgrlbQc1G4c9Qk8enbo8tUU1OPg3SR VFtnMrMaoUHOJMQkuO0GL+Tffh/imvOWzKkUyJWLMuO4WVwcTsl3ETPc3+ZwpmsASpJn7WJ9qu0 aCfqvXthtUrR4WdWlS8vFTEOOyX27oxw= X-Gm-Gg: Acq92OEV1Q4kakthAf+//jtpNAKZDpvzDLN8PIO0NHj6qISLyllsg229eSYvPvugLcG gewj1rmX78p68lz+2nTZ0oBcrlaP2/ovSsFgzJqHlEJLXgVUVhelteB7yHKOaFb+wkhw9CiShJ7 MqcSfoKcFTfzW5WVY/mbfezZ9nxdCXfi+H0zL63gbFNQB9YgclfqXN/2vZ2hTQl5ZyPbqmkXR3Q ttRgHqoHJYzoV65wqJMTOsljKVQ9tuUouc9Z1xYW79qMNcwXPIQRjLMajlpVJ92Ja/3C5PhY7yn 5foPP8mtFOUKXOoPuzraZTDQvSM6lHCSMmHDp6IX X-Received: by 2002:a05:6402:2355:b0:672:be92:e913 with SMTP id 4fb4d7f45d1cf-680cf83c072mr2060165a12.17.1778597359924; Tue, 12 May 2026 07:49:19 -0700 (PDT) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20260421-swap-table-p4-v3-0-2f23759a76bc@tencent.com> <20260421-swap-table-p4-v3-2-2f23759a76bc@tencent.com> In-Reply-To: From: Kairui Song Date: Tue, 12 May 2026 22:48:43 +0800 X-Gm-Features: AVHnY4JdtaVoMXwP_A9u3LZ_KiSSDXJ3HTWun5ui6FrfOFhsETe7YmM2uJ8JsU4 Message-ID: Subject: Re: [PATCH v3 02/12] mm, swap: move common swap cache operations into standalone helpers To: Chris Li Cc: linux-mm@kvack.org, Andrew Morton , David Hildenbrand , Zi Yan , Baolin Wang , Barry Song , Hugh Dickins , Kemeng Shi , Nhat Pham , Baoquan He , Johannes Weiner , Youngjun Park , Chengming Zhou , Roman Gushchin , Shakeel Butt , Muchun Song , Qi Zheng , linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, Yosry Ahmed , Lorenzo Stoakes , Dev Jain , Lance Yang , Michal Hocko , Michal Hocko , Suren Baghdasaryan , Axel Rasmussen Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, May 6, 2026 at 10:46=E2=80=AFPM Chris Li wrote: > > On Tue, Apr 21, 2026 at 8:16=E2=80=AFAM Kairui Song via B4 Relay > wrote: > > > > From: Kairui Song > > > > Move a few swap cache checking, adding, and deletion operations > > into standalone helpers to be used later. And while at it, add > > proper kernel doc. > > > > No feature or behavior change. > > > > Signed-off-by: Kairui Song > > Acked-by: Chris Li > > > > --- > > mm/swap_state.c | 141 ++++++++++++++++++++++++++++++++++++++----------= -------- > > 1 file changed, 95 insertions(+), 46 deletions(-) > > > > diff --git a/mm/swap_state.c b/mm/swap_state.c > > index 204a9499d50c..3da285a891b2 100644 > > --- a/mm/swap_state.c > > +++ b/mm/swap_state.c > > @@ -137,8 +137,42 @@ void *swap_cache_get_shadow(swp_entry_t entry) > > return NULL; > > } > > > > -void __swap_cache_add_folio(struct swap_cluster_info *ci, > > - struct folio *folio, swp_entry_t entry) > > +/** > > + * __swap_cache_add_check - Check if a range is suitable for adding a = folio. > > + * @ci: The locked swap cluster. > > + * @ci_off: Range start offset. > > + * @nr: Number of slots to check. > > + * @shadow: Returns the shadow value if one exists in the range. > > + * > > + * Check if all slots covered by given range have a swap count >=3D 1. > > + * Retrieves the shadow if there is one. > > + * > > + * Context: Caller must lock the cluster. > > + */ > > +static int __swap_cache_add_check(struct swap_cluster_info *ci, > > + unsigned int ci_off, unsigned int nr, > > + void **shadow) > > +{ > > + unsigned int ci_end =3D ci_off + nr; > > + unsigned long old_tb; > > + > > Nitpick: Can add lockdep_assert_held(&ci->lock); > > Can check ci_end < SWAPFILE_CLUSTER and bail out on error. Ack. > > > + if (unlikely(!ci->table)) > > + return -ENOENT; > > + do { > > + old_tb =3D __swap_table_get(ci, ci_off); > > + if (unlikely(swp_tb_is_folio(old_tb))) > > + return -EEXIST; > > + if (unlikely(!__swp_tb_get_count(old_tb))) > > + return -ENOENT; > > + if (swp_tb_is_shadow(old_tb)) > > + *shadow =3D swp_tb_to_shadow(old_tb); > > Nitpick: You can create a local variable for the shadow and assign it > at the end. Because it is a pointer, the compiler can't optimize the > store away. This part will be reworked very soon but using a local variable here is good for an intermediate commit. > Chris Thanks.