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 78E94C54E67 for ; Wed, 27 Mar 2024 02:25:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 04EEB6B0088; Tue, 26 Mar 2024 22:25:42 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id F417D6B008A; Tue, 26 Mar 2024 22:25:41 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E2FDB6B0092; Tue, 26 Mar 2024 22:25:41 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id D35396B0088 for ; Tue, 26 Mar 2024 22:25:41 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id B43E980573 for ; Wed, 27 Mar 2024 02:25:41 +0000 (UTC) X-FDA: 81941228082.09.1D4410F Received: from out-182.mta1.migadu.com (out-182.mta1.migadu.com [95.215.58.182]) by imf20.hostedemail.com (Postfix) with ESMTP id E97E81C000D for ; Wed, 27 Mar 2024 02:25:39 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=B6ELc9Rf; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf20.hostedemail.com: domain of chengming.zhou@linux.dev designates 95.215.58.182 as permitted sender) smtp.mailfrom=chengming.zhou@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1711506340; 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:dkim-signature; bh=toVz9Slq6rIwBWxbkYIDUn9vUvSsS1ey1uAF2j5dJmk=; b=496AEbRa101veiwn5s5Agsj8tOVjdmWHHRbhkGCLD2CQmXBfDQhg9X7SKCLLRci7rhrq94 bj2+BnAvvanPPW43ZxxjD96hVIkduLTEwkLlzB/EHzzjte7WDlfoW7z/BXQofGl3ITNdWM Kx69bH2oU0JQ+LrvZOzagEdHtlmj94c= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=B6ELc9Rf; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf20.hostedemail.com: domain of chengming.zhou@linux.dev designates 95.215.58.182 as permitted sender) smtp.mailfrom=chengming.zhou@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1711506340; a=rsa-sha256; cv=none; b=23qBlyMoIw0UIXds3SW92iHmLgC4y9yKkmkPWb0dfR9d89ll8Cc+IXnbdj/WPOSlIxp5k4 Yfly7XvcexbKMKfNW7jHSdhW2M/Jrp/uX/czMldElTLxUIzTEkOtsiyTNdFFt2sBWRbCzH usELzR/Ufqj9r9zZlkwQ6gzCCwKDSd0= Message-ID: <5e394253-4f01-4172-998e-bbf3d82de6b9@linux.dev> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1711506338; h=from:from: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=toVz9Slq6rIwBWxbkYIDUn9vUvSsS1ey1uAF2j5dJmk=; b=B6ELc9RfvCchRRhzKH81eaisSD9A1eUgkJm7YGdpCuPmUBD6IpKVJNJ6ZXM9pmT5dQVWrJ n+kSomt7yclc3Gm7S9HOnf3KMyF0YfgitxJ6nsi9PK2gpc0fqdh+x/WC6Th9/a2mk3wpHy mxsKUvSIfuje7Qw7XBj9lOapPgNbzXk= Date: Wed, 27 Mar 2024 10:25:22 +0800 MIME-Version: 1.0 Subject: Re: [RFC PATCH 2/9] mm: zswap: refactor storing to the tree out of zswap_store() Content-Language: en-US To: Yosry Ahmed , Andrew Morton Cc: Johannes Weiner , Nhat Pham , linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <20240325235018.2028408-1-yosryahmed@google.com> <20240325235018.2028408-3-yosryahmed@google.com> X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Chengming Zhou In-Reply-To: <20240325235018.2028408-3-yosryahmed@google.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Stat-Signature: nr7cg38wideai87n9giey8fmtbiy5rfn X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: E97E81C000D X-HE-Tag: 1711506339-739548 X-HE-Meta: U2FsdGVkX1/Qe/oRnPJv1deBOpsXhUPAd+wk2VlFatDgLlQgnf/MCDnKFoNdhV6/oivZjvSXAm+vaHL1amVvP+oaK72BgZzw1l7AdlQ5qa6T5Nlg+QLOo0Aey0ZPE5DrdAGogZi+F0p7SzO4pSe5SDVLrwhJRrD0+0m9prt3iq8BKyCdzhouUuB1A7WDB5Pqx/gRSKW9L2vLKSQrQXB5mff12KZ6raa5otrzvk8sBs9ne95B/8S7IwjGWz82iIuf3QFHFDJTR6iSUgvEqCuXvOI/Ugdq43EuBktPcrVsWWDMMNNUkL1FXCQPRTZGVk8/afnb+qRyDW86XCfe5HHVBUVs6at0LWw4fl6vrF+JOMSxWYMGPsXL9JEWzJ7XGFBNVM7NIxPFM8nCt6YOWj/FcuMC2tXop+RwQro6qfAPQmMMPGY9ONykJvxjRrFppbK4xEx8K1JoaoGd4NgrhJCc94uYEGdOazAK/M2ogWQM/aMloLzwRCyxet1tyCQjmdVCP/xiivYPRA8QU6EnYU3XsIm6z9ZqfF2QtaP9Db/pRwZAJrbaPqUU8cZLfTM1u3ffrEwBv2vaZZc4h2siGMqUPq92OW1qHymTmJT9LazGu66fQRm145r88jyt/eONgl4TNnw4axzfYFpA0sdGAE1p9nLTte4ze7Hy5TzWvjkUdBHRPZDVii0a1QPu0PWnmWhDc2NdErrCXW5CQsTDfwEfkxv/cwO9HX8Sx8AzCNHhk5RGdbmbZZk+wgfiG9+838V9yN53/8UXSbEQXeSEQJkBhkgsFqa5TouBQ8qjVpybfead1zyTvUSSQOLWzz1DKiT3gUnFwex/UBARExEgM4CavvaBCrOUssSGuWZAiQKY+fbgB+M9O8vnt1AhgO715/Sr8ke3i0ieYNaICoWMfjx/EUIook9QxyyujaxldMebBXYZNr1KKkPTUrjteIewEn8Q7oPMEzMST1XBWeiv2ZM KKqIiybU 87rLW5guXP6J5Cpjo8E/LvRYbFnIwsKLhZuZlNxqFlcWrzhcKBtFhzHsqvAwN0M+dXPKC/QqpAxG20zVmZodv3P2OOn+SW+v1T7QXMMphJViYNgyZoXVBCEQYfxEdHnrRpXKF4WyGI5p8n08xYQqfEmjVdx5UEOsIfaIieEqD4577P/Tm+R9vGh/75py9vJ1cubh1 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: On 2024/3/26 07:50, Yosry Ahmed wrote: > Refactor the code that attempts storing to the xarray, handling erros, > and freeing stale entries into a helper. This will be reused in a > following patch to free other types of tree elements as well. > > Signed-off-by: Yosry Ahmed > --- > mm/zswap.c | 42 ++++++++++++++++++++++++++---------------- > 1 file changed, 26 insertions(+), 16 deletions(-) > > diff --git a/mm/zswap.c b/mm/zswap.c > index 1cf3ab4b22e64..ff1975afb7e3d 100644 > --- a/mm/zswap.c > +++ b/mm/zswap.c > @@ -827,6 +827,30 @@ static void zswap_entry_free(struct zswap_entry *entry) > atomic_dec(&zswap_stored_pages); > } > > +/********************************* > +* zswap tree functions > +**********************************/ > +static int zswap_tree_store(struct xarray *tree, pgoff_t offset, void *new) > +{ > + void *old; > + int err; > + > + old = xa_store(tree, offset, new, GFP_KERNEL); > + err = xa_is_err(old); Seems to use xa_err() to return errno, xa_is_err() just return a bool. > + if (err) { > + WARN_ONCE(err != -ENOMEM, "unexpected xarray error: %d\n", err); > + zswap_reject_alloc_fail++; > + } else if (old) { > + /* > + * We may have had an existing entry that became stale when > + * the folio was redirtied and now the new version is being > + * swapped out. Get rid of the old. > + */ > + zswap_entry_free(old); > + } > + return err; > +} > + > /********************************* > * compressed storage functions > **********************************/ > @@ -1396,10 +1420,10 @@ bool zswap_store(struct folio *folio) > swp_entry_t swp = folio->swap; > pgoff_t offset = swp_offset(swp); > struct xarray *tree = swap_zswap_tree(swp); > - struct zswap_entry *entry, *old; > struct obj_cgroup *objcg = NULL; > struct mem_cgroup *memcg = NULL; > unsigned long max_pages, cur_pages; > + struct zswap_entry *entry; > > VM_WARN_ON_ONCE(!folio_test_locked(folio)); > VM_WARN_ON_ONCE(!folio_test_swapcache(folio)); > @@ -1485,22 +1509,8 @@ bool zswap_store(struct folio *folio) > entry->swpentry = swp; > entry->objcg = objcg; > > - old = xa_store(tree, offset, entry, GFP_KERNEL); > - if (xa_is_err(old)) { > - int err = xa_err(old); > - > - WARN_ONCE(err != -ENOMEM, "unexpected xarray error: %d\n", err); > - zswap_reject_alloc_fail++; > + if (zswap_tree_store(tree, offset, entry)) > goto store_failed; > - } > - > - /* > - * We may have had an existing entry that became stale when > - * the folio was redirtied and now the new version is being > - * swapped out. Get rid of the old. > - */ > - if (old) > - zswap_entry_free(old); > > if (objcg) { > obj_cgroup_charge_zswap(objcg, entry->length);