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 05254C47DA9 for ; Tue, 30 Jan 2024 20:13:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4B4F96B0071; Tue, 30 Jan 2024 15:13:45 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 464EF6B0081; Tue, 30 Jan 2024 15:13:45 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 32CBB6B0082; Tue, 30 Jan 2024 15:13:45 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 248AE6B0071 for ; Tue, 30 Jan 2024 15:13:45 -0500 (EST) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 3C8F840C82 for ; Tue, 30 Jan 2024 20:13:44 +0000 (UTC) X-FDA: 81737077968.08.8E80AFE Received: from mail-il1-f176.google.com (mail-il1-f176.google.com [209.85.166.176]) by imf23.hostedemail.com (Postfix) with ESMTP id 77AA614000A for ; Tue, 30 Jan 2024 20:13:42 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="bufcKZ/2"; spf=pass (imf23.hostedemail.com: domain of nphamcs@gmail.com designates 209.85.166.176 as permitted sender) smtp.mailfrom=nphamcs@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1706645622; 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=murDIWEfCo9QZrXW4m/LQRV4x+SlYtEqXTSBad8rO5w=; b=Z4Kc4UGJmLAnVGx71NB/4QAV31lQ2yBzKrH5FWCRwA7K1F/BvKWjpoFNDFi5FmcO4ASKxQ UKfPhWCRQXICxrBgxFiCqS6MjBUbIUjVD91m0uQdz7B/MibEUknpqZeKLcWrTI/fl6JzMP iTBMcmX9B8CfVQUTuhM4wLgd9vu8ubg= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1706645622; a=rsa-sha256; cv=none; b=tnYBDcxkM12zkBju549KJlF4a8tM4OnuSV/kN5ZDjohGrRsQMdGdUo+Usbao9V5aKMgVU4 Q4VGm39YHEwe4rmC2eZzwub1ZsyVxbsEyYQ6Ekvf2NrJHlgHn8/J77CaNmVOpkdUatzKvT At1eE22DodjqRsSan83upmV9Wv4Ym6M= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="bufcKZ/2"; spf=pass (imf23.hostedemail.com: domain of nphamcs@gmail.com designates 209.85.166.176 as permitted sender) smtp.mailfrom=nphamcs@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-il1-f176.google.com with SMTP id e9e14a558f8ab-3637fb0bd6cso6360005ab.0 for ; Tue, 30 Jan 2024 12:13:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706645621; x=1707250421; darn=kvack.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=murDIWEfCo9QZrXW4m/LQRV4x+SlYtEqXTSBad8rO5w=; b=bufcKZ/2HeU9WzejidBEfN+q1Br/wPQTBzjunnc9+P9lxc3a7Sh1s5p1SZ7vCvxZEq iZbv2mrXMTfooEfrFHnfcRSGNdOD6i+vEn6s6aBWxonWlyN0yQH8/cD7T/EBLTMhRIdV JLbznADE/xgfl530fcaU1b0HUa897JP9x91i/92OzZI+49QUfQ4XtcoxW2qQ0sNumfVG BmofSN1OvkVrMv9Bn//9iAvDpyQ+Y/VlGwB8P/XsfTd9DT5MXG5G8s0f2EziTGrnOUy0 FIKs+paFmFJAOFeybNTS5uf/OxEyTkLRYBHokCN2kYoQ5/1rq4/lENGy//tQRaOrdXBo BIsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706645621; x=1707250421; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=murDIWEfCo9QZrXW4m/LQRV4x+SlYtEqXTSBad8rO5w=; b=EUjZY8DUWGSnoKXnCZf7juLs8XmbROEC7RnulyV5LVF+geaaXijK89YlXawRE4V8wt hvXnVKadlS+L/snvMs4y/trXlFVVMaJv8a8OTrsZRgXKkURo9l1q+wlaDxpQoLPndGc4 MHs1gdMNcmbYAw38wVMCnvrpSidEIWSZOwd0BGz2x0+qtTA54augRyaofdpq4gwZIFes slnel7KuG5tkjDWRDgGVyN9Bmc8EBd3fxtOMlOgkNcdxG9MHZ5keiVlArFg9kQXES2yj DdHiUW+kRbVCd1fqOma3uZxIceZukqgJ0reKcVXCMvh0DQpW8dmSMip4+I8qVArkmOCz sN3g== X-Gm-Message-State: AOJu0YwaKpMnB7eBt4O3pb4UHz4a4J1qgAcqUHRxYF+DoLv3rrKXuAoJ sUgLF0EaJ5+FsE/J1HMV1QiFF3thPZW9QQp/SuPe4DSnBnaXxaYMy1494lsvUd8jr6xP7raDbzj P01Qky61WNMjHd9PB1So0kg97q6c= X-Google-Smtp-Source: AGHT+IF+1pNKvoyrCfmz2jzRqvEDj0SFxKd3dTixSNzUx3YTLsSFIVYKknwsA4bXHwqHWByXlew0hlnnQJnamdvX4dc= X-Received: by 2002:a92:ce4b:0:b0:363:8263:6a9a with SMTP id a11-20020a92ce4b000000b0036382636a9amr5278441ilr.12.1706645621443; Tue, 30 Jan 2024 12:13:41 -0800 (PST) MIME-Version: 1.0 References: <20240130014208.565554-1-hannes@cmpxchg.org> <20240130014208.565554-12-hannes@cmpxchg.org> In-Reply-To: <20240130014208.565554-12-hannes@cmpxchg.org> From: Nhat Pham Date: Tue, 30 Jan 2024 12:13:30 -0800 Message-ID: Subject: Re: [PATCH 11/20] mm: zswap: function ordering: pool refcounting To: Johannes Weiner Cc: Andrew Morton , Yosry Ahmed , Chengming Zhou , linux-mm@kvack.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Stat-Signature: 186c8q566fo5ebt5g8wrh7g1sgbzqscb X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 77AA614000A X-Rspam-User: X-HE-Tag: 1706645622-752823 X-HE-Meta: U2FsdGVkX19bi/+CM9hRodlF7BGWdLJcU6TRjvJPeu5NQ1Rpc1Htxe378cyssp5tnlnvSyJ5FpVFKhxw0QJSw2r66ulb/YBPJ0BFWNDh6vSht5j5KfseP9CfuLxE5qnSO9mF0vyQNlwEi3GrARyYL4UreVMQJMdfvFkw7c8sFh//Zm35cKY2475TrJwHfIvM0PvHDgUAtH6fdDGkpKgmBWMYNWCXEsCFRDQew9MVBAkxvHrVjvE+FaH3lkHx+OddlLjt1fJ2tw1EiVx8kX6vviDku0SWuOmuGODp0vDauBEvrrCag5EUYg+vOzGl4iZ6HaxIHEGDuqCK0rLMEXKXf/t64rq4Ffhw0X2OlcKHVi84079MOMqtB3D8n1aBmRsCCRU1xViI23D5VweqqMB2t06VkUqCTwG5hViu2YTwj2rnRZMXHccj+bGPna7z4WZOvnRi1P/aQe1NTxRAslb4x3fws2/gXsvPNJQ5RjsLNOxhuSS+4+Y2tbeuu1dINLOBtdQN7ubkf9OReKDZKdE3qwf0nJSylTPKA2VMVPcfxFaG47j6npJs+zGEnfH/x9cEI2v3TvX2OrwjADhuF/q/9AeQ4N8Xe+MujtFPGfD/kaumS5EOjmWRd7ix8Q72w3aySyx+YZmjKky8VyTWxRaY9mWzN2khllz9TFFmrphKnT9+JVD1CrjlNuhhUQJIiF8LF0lHpkcQwaKDCPNlL9EKWGev+1EEFZCc3K0eqohHF9eCeedgi8PHNB7oK845hOsV+FCYXetd4I16MfozngoVzKEnnqjrfFPglcQeWUsxttHDS3wAVjjbXdeZRA9UOGrKnD0dM7SqfjVzW21YokQaqbb4wYbvZNAzFuMbDbQUElJvT5fOwvCfXGpdNnZdevfpTXXaWdrvIycb++Ywq9zOqQsUZuw3mrFX0Ykqkj/suV+DdC0PEO9w+7d7ZS96m953ckjWPpG/Dn7xZ61wcRe NJwaucqZ wtunBRfUI7FPi2XzL204b8lD9iNKq/9RetCKWxs6bhsdgWCgUHX1/F+K2gLxafzeZ0Mk58Gf7zlv9MLjfcmWiK2t9DKklNZWQAmGuVSh7jUFg1dESJkEDlceWR19b9ZS7cL30s538x/FtPBJXs7S3IjHSKS8G/4Xp5QCX2aIV6VPKtwjzlsS3QVw08bz7DwtarH9w3r2oAzTCsdsOQOdNEe1NSGErHjJBEwv9qZNuTChsuWzw5BjSjgs3gwetTIgcdt1Vv6AYiyLadqcbCtFgb2xeICLMFvS8MoUCZjMXpQDw1LsoQkI7l7F2PGC2SkzTjAJNg7Nlmckg5Nk6B2uPH/6xuoSdpobJDM0EetPcFDSoyklh/9qVG+1KzsknqLLzA1GBJCxQNp8pFM5OpmzPk4OCtUE9J8Wz+y/O 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 Mon, Jan 29, 2024 at 5:42=E2=80=AFPM Johannes Weiner wrote: > > Move pool refcounting functions into the pool section. First the > destroy functions, then the get and put which uses them. > > __zswap_pool_empty() has an upward reference to the global > zswap_pools, to sanity check it's not the currently active pool that's > being freed. That gets the forward decl for zswap_pool_cuyrrent(). nit: zswap_pool_cuyrrent() -> zswap_pool_current() :-) Also, would it make sense to move zswap_pool_current() above __zswap_pool_empty() to get rid of the forward declaration? I guess it's now grouped with current_get() etc. - those don't seem to use the empty check, so maybe they can also go above __zswap_pool_empty()? > > This puts the get and put function above all callers, so kill the > forward decls as well. > > Signed-off-by: Johannes Weiner > --- > mm/zswap.c | 94 +++++++++++++++++++++++++++--------------------------- > 1 file changed, 47 insertions(+), 47 deletions(-) > > diff --git a/mm/zswap.c b/mm/zswap.c > index 805d9a35f633..33775f2224b7 100644 > --- a/mm/zswap.c > +++ b/mm/zswap.c > @@ -278,8 +278,6 @@ static inline struct zswap_tree *swap_zswap_tree(swp_= entry_t swp) > > static int zswap_writeback_entry(struct zswap_entry *entry, > swp_entry_t swpentry); > -static int zswap_pool_get(struct zswap_pool *pool); > -static void zswap_pool_put(struct zswap_pool *pool); > > static bool zswap_is_full(void) > { > @@ -472,6 +470,53 @@ static void zswap_pool_destroy(struct zswap_pool *po= ol) > kfree(pool); > } > > +static void __zswap_pool_release(struct work_struct *work) > +{ > + struct zswap_pool *pool =3D container_of(work, typeof(*pool), > + release_work); > + > + synchronize_rcu(); > + > + /* nobody should have been able to get a kref... */ > + WARN_ON(kref_get_unless_zero(&pool->kref)); > + > + /* pool is now off zswap_pools list and has no references. */ > + zswap_pool_destroy(pool); > +} > + > +static struct zswap_pool *zswap_pool_current(void); > + > +static void __zswap_pool_empty(struct kref *kref) > +{ > + struct zswap_pool *pool; > + > + pool =3D container_of(kref, typeof(*pool), kref); > + > + spin_lock(&zswap_pools_lock); > + > + WARN_ON(pool =3D=3D zswap_pool_current()); > + > + list_del_rcu(&pool->list); > + > + INIT_WORK(&pool->release_work, __zswap_pool_release); > + schedule_work(&pool->release_work); > + > + spin_unlock(&zswap_pools_lock); > +} > + > +static int __must_check zswap_pool_get(struct zswap_pool *pool) > +{ > + if (!pool) > + return 0; > + > + return kref_get_unless_zero(&pool->kref); > +} > + > +static void zswap_pool_put(struct zswap_pool *pool) > +{ > + kref_put(&pool->kref, __zswap_pool_empty); > +} > + > /* should be called under RCU */ > #ifdef CONFIG_MEMCG > static inline struct mem_cgroup *mem_cgroup_from_entry(struct zswap_entr= y *entry) > @@ -1122,51 +1167,6 @@ static void shrink_worker(struct work_struct *w) > zswap_pool_put(pool); > } > > -static int __must_check zswap_pool_get(struct zswap_pool *pool) > -{ > - if (!pool) > - return 0; > - > - return kref_get_unless_zero(&pool->kref); > -} > - > -static void __zswap_pool_release(struct work_struct *work) > -{ > - struct zswap_pool *pool =3D container_of(work, typeof(*pool), > - release_work); > - > - synchronize_rcu(); > - > - /* nobody should have been able to get a kref... */ > - WARN_ON(kref_get_unless_zero(&pool->kref)); > - > - /* pool is now off zswap_pools list and has no references. */ > - zswap_pool_destroy(pool); > -} > - > -static void __zswap_pool_empty(struct kref *kref) > -{ > - struct zswap_pool *pool; > - > - pool =3D container_of(kref, typeof(*pool), kref); > - > - spin_lock(&zswap_pools_lock); > - > - WARN_ON(pool =3D=3D zswap_pool_current()); > - > - list_del_rcu(&pool->list); > - > - INIT_WORK(&pool->release_work, __zswap_pool_release); > - schedule_work(&pool->release_work); > - > - spin_unlock(&zswap_pools_lock); > -} > - > -static void zswap_pool_put(struct zswap_pool *pool) > -{ > - kref_put(&pool->kref, __zswap_pool_empty); > -} > - > /********************************* > * param callbacks > **********************************/ > -- > 2.43.0 >