From patchwork Mon Jul 24 09:43:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323641 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 0F872C001DE for ; Mon, 24 Jul 2023 09:45:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6869B900003; Mon, 24 Jul 2023 05:45:23 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 637A86B0075; Mon, 24 Jul 2023 05:45:23 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 43C0B900003; Mon, 24 Jul 2023 05:45:23 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 31F806B0071 for ; Mon, 24 Jul 2023 05:45:23 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id C9B8414098B for ; Mon, 24 Jul 2023 09:45:22 +0000 (UTC) X-FDA: 81046022484.30.5027397 Received: from mail-pg1-f171.google.com (mail-pg1-f171.google.com [209.85.215.171]) by imf06.hostedemail.com (Postfix) with ESMTP id 84AB1180016 for ; Mon, 24 Jul 2023 09:45:20 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="VdTlZzB/"; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf06.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.171 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690191920; a=rsa-sha256; cv=none; b=q5SXfOnOx2/Rq4DMRcAOTig4vUZPFrkVIUL1UJV7WYOVHMqklmMRfyogDJCqkbISRilGnp sY6B0j+3fkHrdYZ6t5EAhOnU/0ImLoBIntBkvpepaO+41PoNbHEahYl7u9tGZ7LDjG65F6 Kl5X/wXSzIkEoxXC3YQxfx2f3N5R+l4= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="VdTlZzB/"; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf06.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.171 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690191920; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=0X7TTaSazj3dc5TZWcWlx26plk8VSh9DX3kWilrzg5Y=; b=PNzp5ApLygMcZzi/sszSB6lT6Dyc5YqPSmV/bF/Zp6nE/vNwzXz35NzzXocfRGYzL2MY53 QmDlKArpkxPNuV6ZKv4+94FGfm6R8FMIpWlT55Lu0b1ZUqucL4K79yLkPPFEXrahdjmnzt emWnNFTN525TM5OrttvqtzRkEkyJQLY= Received: by mail-pg1-f171.google.com with SMTP id 41be03b00d2f7-51f64817809so327321a12.1 for ; Mon, 24 Jul 2023 02:45:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690191919; x=1690796719; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0X7TTaSazj3dc5TZWcWlx26plk8VSh9DX3kWilrzg5Y=; b=VdTlZzB/jt/y63TJbbmnBK+5js3Ai/LddYK/vf13ARBhQSvnt0Hz2diGL3wfF6OnsP HxxDWYPxoFkC0iZxGk8IY7vRHxLpbhyIfaiEp9BIvngC76U3HdqMoZH3/YRNTL1V5vwe zO+Lz0eD4BVRbZ0IURus60XLrJDuKKqH936iw0mnlXu7MzNaeNUma2I2myQc8agKXgfl pbjJR+enxdiTLIrLQ8gqeStuTN/SAtbTDq+XP0ykolWIfc4CpfxMqclaF5ZnKSjILwlK awFJhJScJGP43MZKBZYQI4RAePrYxQgrIX/vx1eVt9xbVs4P5Bpbtfztjp3BWrG5XYSj sW5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690191919; x=1690796719; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0X7TTaSazj3dc5TZWcWlx26plk8VSh9DX3kWilrzg5Y=; b=cH2eo6kh90yKEWXsPyONABF/czkjq1F0nrHPIwq0aiCHHJZDyXRtfEPyPHcp8qqxvl sPST6HdbFrsDywe0L0NdOxR2Lpizle9fVno3zZeebHE6LdyjlBoXqWGTT0tfBktaFuO4 m6/ffGvZ+/OPkEC9mYZgxG5tYdZjzqVFQJsoHvZW/o+TEh7UVB43QkvHeliVsYVeJzYc O1mZDRGrIQRx/vA4Bq1OLraNAIBLldTTUGHPP5XKlNGN6CJwv/1xvmsJujep4P0QDRvw BM4vSyeX+E54gTRZx6RqlI+sHfI5IIukQ6AHCVfm/PfMsPuhaAEvo0DUnR3UDb4Bzew1 DCzA== X-Gm-Message-State: ABy/qLbzx0+veua0L7LLCCWjASwL17CWb67x6QElCiGdgUm15lIg2Mqf o3xNQEFLDG2JPnNZijaJMFdeXw== X-Google-Smtp-Source: APBJJlFPznU2Mz9DpyvvZilnZbWNmGsS/vZbyZ4WeV3OjyfgEZ+ZkP4Oi24D+44zfnF1qq2REK47wg== X-Received: by 2002:a17:902:e849:b0:1b8:35fa:cdcc with SMTP id t9-20020a170902e84900b001b835facdccmr12687528plg.5.1690191918908; Mon, 24 Jul 2023 02:45:18 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.45.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:45:18 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 01/47] mm: vmscan: move shrinker-related code into a separate file Date: Mon, 24 Jul 2023 17:43:08 +0800 Message-Id: <20230724094354.90817-2-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 84AB1180016 X-Stat-Signature: enukdkq1ouoi1anp3c9cqyzqynias7mf X-HE-Tag: 1690191920-721888 X-HE-Meta: U2FsdGVkX1+tWwYagLy5yqroAOH/10cYx12gdpzj2DSQ9JL2CW8NT1N8ZeY5mMJlAwBNJpGowgp6eNuywjRLP7aWOj/zvcUNABgOHn1QYF50AChBhxaibEKAjREQnnarxpY9rvjKOhLNfV8XAETGFfIyNoUNtvF8vFt7K/7PzgOzdQHzifJORd89zDUAQSE9XGYcBFeVc71pp9I2NZryS05+1UucTpNnPf3gzTHao8AMy/whBW/l755SJq9n4muIzO2WSa5c/OSwdNxRgKs2HysSm2kK1rzaOY9oJR7UzkYqd5OXh8BHPW48c2GjvtpP/AnWSxz5QWf7/IpM2pSKRPEdnYbkfUkr0Ldiqnhabd9PPfVE2YbWQD1WaK9azDKNBgkEi+/uDS0+pSDYYJDrWI+uWogq6EDECCqOqvORt4KrXW1CDHJn14MT3LnpIiaWYjscHhnjd9kvngCW5TkAxeOfFGHC8XHaieZq5B237masK0iB4XJ1KKEXYIttsOAEggii6tPf3W4iY8KYHG25752YDfNY1q7FJ5oPShlqwVt6dlGrU8UpcRcNxoeH76lcCBuEt7fIWoBIk8ADfTLSppsa0L5YtAyWT/AYWwhrQHMSTiH1w9uNJXvJ6rs7+eOdCYTZoVTIYDT6sjx8YVGjHMF1FTuROdVNgGGGd0oxAF7mRcR/S+3i4kalaVYoBdZmFVyrJyLnJrTH0MBk0C550OBIYkunnJnc4czMeWE8HxOuARkYkeXZyO6vvLuISs1KeED4EOhStieu6gI9b8U6ohC4ZsvRVlaTdY7EYS0RY/WtMcgZh06YBYuAtV4jgV3+IQIA4t88hVjb+KjCRJJs5JeHcq82W6nOwPu3+ltiYiwQmcdAVpaaRYTHDMKvdIdJ0sgvWiMrDdZqnU5slthKSoGh4aKl/lOP//bX22YQiYbxP0XFdg4Dju96B8Dplso1ZzvvycUlQjA7chhQzUD FyCva3GB r2wtrZ5Kxy6Z0sSgJe9NZ2Up0BMbd/+gk6bWNiQROd7AWJQ/zlY4eCqff6RRNbNwh1O5sLrBLrL4Av0QKdSCQJygP0Lm6T9xOCJwMWxCHJhk0vvnAsO7Nz7hvtHEcAK04h3krVQiXuV7tjS01505Xjt2GahZZGgiXPYKWTBCuVXP2PyyOYtBwpekyQT/9Mvwa55vnIO6eIzqY7VBShfrnacVcSUCnVWCwsdMxFEPyIpw7Mz/yKDmLeZvDU4EyxFDUwf/u2oJbgBN4MHI9TwoeejpHSkLQJLVsMl5ypNEW32nq2w1KFEVOelhcSukR6PfLWx7DTKIUNexyuGpLkk8yQdd0EaLWRvNI5V4H3MNnq1ycut9RbwbcXQwizFPQax9rFlRw95SAK7L7P/JwtlPTlZMfA+Xqn3CeIHlK 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: The mm/vmscan.c file is too large, so separate the shrinker-related code from it into a separate file. No functional changes. Signed-off-by: Qi Zheng --- include/linux/shrinker.h | 3 + mm/Makefile | 4 +- mm/shrinker.c | 707 +++++++++++++++++++++++++++++++++++++++ mm/vmscan.c | 701 -------------------------------------- 4 files changed, 712 insertions(+), 703 deletions(-) create mode 100644 mm/shrinker.c diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index 224293b2dd06..961cb84e51f5 100644 --- a/include/linux/shrinker.h +++ b/include/linux/shrinker.h @@ -96,6 +96,9 @@ struct shrinker { */ #define SHRINKER_NONSLAB (1 << 3) +unsigned long shrink_slab(gfp_t gfp_mask, int nid, struct mem_cgroup *memcg, + int priority); + extern int __printf(2, 3) prealloc_shrinker(struct shrinker *shrinker, const char *fmt, ...); extern void register_shrinker_prepared(struct shrinker *shrinker); diff --git a/mm/Makefile b/mm/Makefile index 678530a07326..891899186608 100644 --- a/mm/Makefile +++ b/mm/Makefile @@ -48,8 +48,8 @@ endif obj-y := filemap.o mempool.o oom_kill.o fadvise.o \ maccess.o page-writeback.o folio-compat.o \ - readahead.o swap.o truncate.o vmscan.o shmem.o \ - util.o mmzone.o vmstat.o backing-dev.o \ + readahead.o swap.o truncate.o vmscan.o shrinker.o \ + shmem.o util.o mmzone.o vmstat.o backing-dev.o \ mm_init.o percpu.o slab_common.o \ compaction.o show_mem.o\ interval_tree.o list_lru.o workingset.o \ diff --git a/mm/shrinker.c b/mm/shrinker.c new file mode 100644 index 000000000000..0a32ef42f2a7 --- /dev/null +++ b/mm/shrinker.c @@ -0,0 +1,707 @@ +// SPDX-License-Identifier: GPL-2.0 +#include +#include +#include +#include + +LIST_HEAD(shrinker_list); +DECLARE_RWSEM(shrinker_rwsem); + +#ifdef CONFIG_MEMCG +static int shrinker_nr_max; + +/* The shrinker_info is expanded in a batch of BITS_PER_LONG */ +static inline int shrinker_map_size(int nr_items) +{ + return (DIV_ROUND_UP(nr_items, BITS_PER_LONG) * sizeof(unsigned long)); +} + +static inline int shrinker_defer_size(int nr_items) +{ + return (round_up(nr_items, BITS_PER_LONG) * sizeof(atomic_long_t)); +} + +void free_shrinker_info(struct mem_cgroup *memcg) +{ + struct mem_cgroup_per_node *pn; + struct shrinker_info *info; + int nid; + + for_each_node(nid) { + pn = memcg->nodeinfo[nid]; + info = rcu_dereference_protected(pn->shrinker_info, true); + kvfree(info); + rcu_assign_pointer(pn->shrinker_info, NULL); + } +} + +int alloc_shrinker_info(struct mem_cgroup *memcg) +{ + struct shrinker_info *info; + int nid, size, ret = 0; + int map_size, defer_size = 0; + + down_write(&shrinker_rwsem); + map_size = shrinker_map_size(shrinker_nr_max); + defer_size = shrinker_defer_size(shrinker_nr_max); + size = map_size + defer_size; + for_each_node(nid) { + info = kvzalloc_node(sizeof(*info) + size, GFP_KERNEL, nid); + if (!info) { + free_shrinker_info(memcg); + ret = -ENOMEM; + break; + } + info->nr_deferred = (atomic_long_t *)(info + 1); + info->map = (void *)info->nr_deferred + defer_size; + info->map_nr_max = shrinker_nr_max; + rcu_assign_pointer(memcg->nodeinfo[nid]->shrinker_info, info); + } + up_write(&shrinker_rwsem); + + return ret; +} + +static struct shrinker_info *shrinker_info_protected(struct mem_cgroup *memcg, + int nid) +{ + return rcu_dereference_protected(memcg->nodeinfo[nid]->shrinker_info, + lockdep_is_held(&shrinker_rwsem)); +} + +static int expand_one_shrinker_info(struct mem_cgroup *memcg, + int map_size, int defer_size, + int old_map_size, int old_defer_size, + int new_nr_max) +{ + struct shrinker_info *new, *old; + struct mem_cgroup_per_node *pn; + int nid; + int size = map_size + defer_size; + + for_each_node(nid) { + pn = memcg->nodeinfo[nid]; + old = shrinker_info_protected(memcg, nid); + /* Not yet online memcg */ + if (!old) + return 0; + + /* Already expanded this shrinker_info */ + if (new_nr_max <= old->map_nr_max) + continue; + + new = kvmalloc_node(sizeof(*new) + size, GFP_KERNEL, nid); + if (!new) + return -ENOMEM; + + new->nr_deferred = (atomic_long_t *)(new + 1); + new->map = (void *)new->nr_deferred + defer_size; + new->map_nr_max = new_nr_max; + + /* map: set all old bits, clear all new bits */ + memset(new->map, (int)0xff, old_map_size); + memset((void *)new->map + old_map_size, 0, map_size - old_map_size); + /* nr_deferred: copy old values, clear all new values */ + memcpy(new->nr_deferred, old->nr_deferred, old_defer_size); + memset((void *)new->nr_deferred + old_defer_size, 0, + defer_size - old_defer_size); + + rcu_assign_pointer(pn->shrinker_info, new); + kvfree_rcu(old, rcu); + } + + return 0; +} + +static int expand_shrinker_info(int new_id) +{ + int ret = 0; + int new_nr_max = round_up(new_id + 1, BITS_PER_LONG); + int map_size, defer_size = 0; + int old_map_size, old_defer_size = 0; + struct mem_cgroup *memcg; + + if (!root_mem_cgroup) + goto out; + + lockdep_assert_held(&shrinker_rwsem); + + map_size = shrinker_map_size(new_nr_max); + defer_size = shrinker_defer_size(new_nr_max); + old_map_size = shrinker_map_size(shrinker_nr_max); + old_defer_size = shrinker_defer_size(shrinker_nr_max); + + memcg = mem_cgroup_iter(NULL, NULL, NULL); + do { + ret = expand_one_shrinker_info(memcg, map_size, defer_size, + old_map_size, old_defer_size, + new_nr_max); + if (ret) { + mem_cgroup_iter_break(NULL, memcg); + goto out; + } + } while ((memcg = mem_cgroup_iter(NULL, memcg, NULL)) != NULL); +out: + if (!ret) + shrinker_nr_max = new_nr_max; + + return ret; +} + +void set_shrinker_bit(struct mem_cgroup *memcg, int nid, int shrinker_id) +{ + if (shrinker_id >= 0 && memcg && !mem_cgroup_is_root(memcg)) { + struct shrinker_info *info; + + rcu_read_lock(); + info = rcu_dereference(memcg->nodeinfo[nid]->shrinker_info); + if (!WARN_ON_ONCE(shrinker_id >= info->map_nr_max)) { + /* Pairs with smp mb in shrink_slab() */ + smp_mb__before_atomic(); + set_bit(shrinker_id, info->map); + } + rcu_read_unlock(); + } +} + +static DEFINE_IDR(shrinker_idr); + +static int prealloc_memcg_shrinker(struct shrinker *shrinker) +{ + int id, ret = -ENOMEM; + + if (mem_cgroup_disabled()) + return -ENOSYS; + + down_write(&shrinker_rwsem); + /* This may call shrinker, so it must use down_read_trylock() */ + id = idr_alloc(&shrinker_idr, shrinker, 0, 0, GFP_KERNEL); + if (id < 0) + goto unlock; + + if (id >= shrinker_nr_max) { + if (expand_shrinker_info(id)) { + idr_remove(&shrinker_idr, id); + goto unlock; + } + } + shrinker->id = id; + ret = 0; +unlock: + up_write(&shrinker_rwsem); + return ret; +} + +static void unregister_memcg_shrinker(struct shrinker *shrinker) +{ + int id = shrinker->id; + + BUG_ON(id < 0); + + lockdep_assert_held(&shrinker_rwsem); + + idr_remove(&shrinker_idr, id); +} + +static long xchg_nr_deferred_memcg(int nid, struct shrinker *shrinker, + struct mem_cgroup *memcg) +{ + struct shrinker_info *info; + + info = shrinker_info_protected(memcg, nid); + return atomic_long_xchg(&info->nr_deferred[shrinker->id], 0); +} + +static long add_nr_deferred_memcg(long nr, int nid, struct shrinker *shrinker, + struct mem_cgroup *memcg) +{ + struct shrinker_info *info; + + info = shrinker_info_protected(memcg, nid); + return atomic_long_add_return(nr, &info->nr_deferred[shrinker->id]); +} + +void reparent_shrinker_deferred(struct mem_cgroup *memcg) +{ + int i, nid; + long nr; + struct mem_cgroup *parent; + struct shrinker_info *child_info, *parent_info; + + parent = parent_mem_cgroup(memcg); + if (!parent) + parent = root_mem_cgroup; + + /* Prevent from concurrent shrinker_info expand */ + down_read(&shrinker_rwsem); + for_each_node(nid) { + child_info = shrinker_info_protected(memcg, nid); + parent_info = shrinker_info_protected(parent, nid); + for (i = 0; i < child_info->map_nr_max; i++) { + nr = atomic_long_read(&child_info->nr_deferred[i]); + atomic_long_add(nr, &parent_info->nr_deferred[i]); + } + } + up_read(&shrinker_rwsem); +} +#else +static int prealloc_memcg_shrinker(struct shrinker *shrinker) +{ + return -ENOSYS; +} + +static void unregister_memcg_shrinker(struct shrinker *shrinker) +{ +} + +static long xchg_nr_deferred_memcg(int nid, struct shrinker *shrinker, + struct mem_cgroup *memcg) +{ + return 0; +} + +static long add_nr_deferred_memcg(long nr, int nid, struct shrinker *shrinker, + struct mem_cgroup *memcg) +{ + return 0; +} +#endif /* CONFIG_MEMCG */ + +static long xchg_nr_deferred(struct shrinker *shrinker, + struct shrink_control *sc) +{ + int nid = sc->nid; + + if (!(shrinker->flags & SHRINKER_NUMA_AWARE)) + nid = 0; + + if (sc->memcg && + (shrinker->flags & SHRINKER_MEMCG_AWARE)) + return xchg_nr_deferred_memcg(nid, shrinker, + sc->memcg); + + return atomic_long_xchg(&shrinker->nr_deferred[nid], 0); +} + + +static long add_nr_deferred(long nr, struct shrinker *shrinker, + struct shrink_control *sc) +{ + int nid = sc->nid; + + if (!(shrinker->flags & SHRINKER_NUMA_AWARE)) + nid = 0; + + if (sc->memcg && + (shrinker->flags & SHRINKER_MEMCG_AWARE)) + return add_nr_deferred_memcg(nr, nid, shrinker, + sc->memcg); + + return atomic_long_add_return(nr, &shrinker->nr_deferred[nid]); +} + +#define SHRINK_BATCH 128 + +static unsigned long do_shrink_slab(struct shrink_control *shrinkctl, + struct shrinker *shrinker, int priority) +{ + unsigned long freed = 0; + unsigned long long delta; + long total_scan; + long freeable; + long nr; + long new_nr; + long batch_size = shrinker->batch ? shrinker->batch + : SHRINK_BATCH; + long scanned = 0, next_deferred; + + freeable = shrinker->count_objects(shrinker, shrinkctl); + if (freeable == 0 || freeable == SHRINK_EMPTY) + return freeable; + + /* + * copy the current shrinker scan count into a local variable + * and zero it so that other concurrent shrinker invocations + * don't also do this scanning work. + */ + nr = xchg_nr_deferred(shrinker, shrinkctl); + + if (shrinker->seeks) { + delta = freeable >> priority; + delta *= 4; + do_div(delta, shrinker->seeks); + } else { + /* + * These objects don't require any IO to create. Trim + * them aggressively under memory pressure to keep + * them from causing refetches in the IO caches. + */ + delta = freeable / 2; + } + + total_scan = nr >> priority; + total_scan += delta; + total_scan = min(total_scan, (2 * freeable)); + + trace_mm_shrink_slab_start(shrinker, shrinkctl, nr, + freeable, delta, total_scan, priority); + + /* + * Normally, we should not scan less than batch_size objects in one + * pass to avoid too frequent shrinker calls, but if the slab has less + * than batch_size objects in total and we are really tight on memory, + * we will try to reclaim all available objects, otherwise we can end + * up failing allocations although there are plenty of reclaimable + * objects spread over several slabs with usage less than the + * batch_size. + * + * We detect the "tight on memory" situations by looking at the total + * number of objects we want to scan (total_scan). If it is greater + * than the total number of objects on slab (freeable), we must be + * scanning at high prio and therefore should try to reclaim as much as + * possible. + */ + while (total_scan >= batch_size || + total_scan >= freeable) { + unsigned long ret; + unsigned long nr_to_scan = min(batch_size, total_scan); + + shrinkctl->nr_to_scan = nr_to_scan; + shrinkctl->nr_scanned = nr_to_scan; + ret = shrinker->scan_objects(shrinker, shrinkctl); + if (ret == SHRINK_STOP) + break; + freed += ret; + + count_vm_events(SLABS_SCANNED, shrinkctl->nr_scanned); + total_scan -= shrinkctl->nr_scanned; + scanned += shrinkctl->nr_scanned; + + cond_resched(); + } + + /* + * The deferred work is increased by any new work (delta) that wasn't + * done, decreased by old deferred work that was done now. + * + * And it is capped to two times of the freeable items. + */ + next_deferred = max_t(long, (nr + delta - scanned), 0); + next_deferred = min(next_deferred, (2 * freeable)); + + /* + * move the unused scan count back into the shrinker in a + * manner that handles concurrent updates. + */ + new_nr = add_nr_deferred(next_deferred, shrinker, shrinkctl); + + trace_mm_shrink_slab_end(shrinker, shrinkctl->nid, freed, nr, new_nr, total_scan); + return freed; +} + +#ifdef CONFIG_MEMCG +static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, + struct mem_cgroup *memcg, int priority) +{ + struct shrinker_info *info; + unsigned long ret, freed = 0; + int i; + + if (!mem_cgroup_online(memcg)) + return 0; + + if (!down_read_trylock(&shrinker_rwsem)) + return 0; + + info = shrinker_info_protected(memcg, nid); + if (unlikely(!info)) + goto unlock; + + for_each_set_bit(i, info->map, info->map_nr_max) { + struct shrink_control sc = { + .gfp_mask = gfp_mask, + .nid = nid, + .memcg = memcg, + }; + struct shrinker *shrinker; + + shrinker = idr_find(&shrinker_idr, i); + if (unlikely(!shrinker || !(shrinker->flags & SHRINKER_REGISTERED))) { + if (!shrinker) + clear_bit(i, info->map); + continue; + } + + /* Call non-slab shrinkers even though kmem is disabled */ + if (!memcg_kmem_online() && + !(shrinker->flags & SHRINKER_NONSLAB)) + continue; + + ret = do_shrink_slab(&sc, shrinker, priority); + if (ret == SHRINK_EMPTY) { + clear_bit(i, info->map); + /* + * After the shrinker reported that it had no objects to + * free, but before we cleared the corresponding bit in + * the memcg shrinker map, a new object might have been + * added. To make sure, we have the bit set in this + * case, we invoke the shrinker one more time and reset + * the bit if it reports that it is not empty anymore. + * The memory barrier here pairs with the barrier in + * set_shrinker_bit(): + * + * list_lru_add() shrink_slab_memcg() + * list_add_tail() clear_bit() + * + * set_bit() do_shrink_slab() + */ + smp_mb__after_atomic(); + ret = do_shrink_slab(&sc, shrinker, priority); + if (ret == SHRINK_EMPTY) + ret = 0; + else + set_shrinker_bit(memcg, nid, i); + } + freed += ret; + + if (rwsem_is_contended(&shrinker_rwsem)) { + freed = freed ? : 1; + break; + } + } +unlock: + up_read(&shrinker_rwsem); + return freed; +} +#else /* !CONFIG_MEMCG */ +static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, + struct mem_cgroup *memcg, int priority) +{ + return 0; +} +#endif /* CONFIG_MEMCG */ + +/** + * shrink_slab - shrink slab caches + * @gfp_mask: allocation context + * @nid: node whose slab caches to target + * @memcg: memory cgroup whose slab caches to target + * @priority: the reclaim priority + * + * Call the shrink functions to age shrinkable caches. + * + * @nid is passed along to shrinkers with SHRINKER_NUMA_AWARE set, + * unaware shrinkers will receive a node id of 0 instead. + * + * @memcg specifies the memory cgroup to target. Unaware shrinkers + * are called only if it is the root cgroup. + * + * @priority is sc->priority, we take the number of objects and >> by priority + * in order to get the scan target. + * + * Returns the number of reclaimed slab objects. + */ +unsigned long shrink_slab(gfp_t gfp_mask, int nid, struct mem_cgroup *memcg, + int priority) +{ + unsigned long ret, freed = 0; + struct shrinker *shrinker; + + /* + * The root memcg might be allocated even though memcg is disabled + * via "cgroup_disable=memory" boot parameter. This could make + * mem_cgroup_is_root() return false, then just run memcg slab + * shrink, but skip global shrink. This may result in premature + * oom. + */ + if (!mem_cgroup_disabled() && !mem_cgroup_is_root(memcg)) + return shrink_slab_memcg(gfp_mask, nid, memcg, priority); + + if (!down_read_trylock(&shrinker_rwsem)) + goto out; + + list_for_each_entry(shrinker, &shrinker_list, list) { + struct shrink_control sc = { + .gfp_mask = gfp_mask, + .nid = nid, + .memcg = memcg, + }; + + ret = do_shrink_slab(&sc, shrinker, priority); + if (ret == SHRINK_EMPTY) + ret = 0; + freed += ret; + /* + * Bail out if someone want to register a new shrinker to + * prevent the registration from being stalled for long periods + * by parallel ongoing shrinking. + */ + if (rwsem_is_contended(&shrinker_rwsem)) { + freed = freed ? : 1; + break; + } + } + + up_read(&shrinker_rwsem); +out: + cond_resched(); + return freed; +} + +/* + * Add a shrinker callback to be called from the vm. + */ +static int __prealloc_shrinker(struct shrinker *shrinker) +{ + unsigned int size; + int err; + + if (shrinker->flags & SHRINKER_MEMCG_AWARE) { + err = prealloc_memcg_shrinker(shrinker); + if (err != -ENOSYS) + return err; + + shrinker->flags &= ~SHRINKER_MEMCG_AWARE; + } + + size = sizeof(*shrinker->nr_deferred); + if (shrinker->flags & SHRINKER_NUMA_AWARE) + size *= nr_node_ids; + + shrinker->nr_deferred = kzalloc(size, GFP_KERNEL); + if (!shrinker->nr_deferred) + return -ENOMEM; + + return 0; +} + +#ifdef CONFIG_SHRINKER_DEBUG +int prealloc_shrinker(struct shrinker *shrinker, const char *fmt, ...) +{ + va_list ap; + int err; + + va_start(ap, fmt); + shrinker->name = kvasprintf_const(GFP_KERNEL, fmt, ap); + va_end(ap); + if (!shrinker->name) + return -ENOMEM; + + err = __prealloc_shrinker(shrinker); + if (err) { + kfree_const(shrinker->name); + shrinker->name = NULL; + } + + return err; +} +#else +int prealloc_shrinker(struct shrinker *shrinker, const char *fmt, ...) +{ + return __prealloc_shrinker(shrinker); +} +#endif + +void free_prealloced_shrinker(struct shrinker *shrinker) +{ +#ifdef CONFIG_SHRINKER_DEBUG + kfree_const(shrinker->name); + shrinker->name = NULL; +#endif + if (shrinker->flags & SHRINKER_MEMCG_AWARE) { + down_write(&shrinker_rwsem); + unregister_memcg_shrinker(shrinker); + up_write(&shrinker_rwsem); + return; + } + + kfree(shrinker->nr_deferred); + shrinker->nr_deferred = NULL; +} + +void register_shrinker_prepared(struct shrinker *shrinker) +{ + down_write(&shrinker_rwsem); + list_add_tail(&shrinker->list, &shrinker_list); + shrinker->flags |= SHRINKER_REGISTERED; + shrinker_debugfs_add(shrinker); + up_write(&shrinker_rwsem); +} + +static int __register_shrinker(struct shrinker *shrinker) +{ + int err = __prealloc_shrinker(shrinker); + + if (err) + return err; + register_shrinker_prepared(shrinker); + return 0; +} + +#ifdef CONFIG_SHRINKER_DEBUG +int register_shrinker(struct shrinker *shrinker, const char *fmt, ...) +{ + va_list ap; + int err; + + va_start(ap, fmt); + shrinker->name = kvasprintf_const(GFP_KERNEL, fmt, ap); + va_end(ap); + if (!shrinker->name) + return -ENOMEM; + + err = __register_shrinker(shrinker); + if (err) { + kfree_const(shrinker->name); + shrinker->name = NULL; + } + return err; +} +#else +int register_shrinker(struct shrinker *shrinker, const char *fmt, ...) +{ + return __register_shrinker(shrinker); +} +#endif +EXPORT_SYMBOL(register_shrinker); + +/* + * Remove one + */ +void unregister_shrinker(struct shrinker *shrinker) +{ + struct dentry *debugfs_entry; + int debugfs_id; + + if (!(shrinker->flags & SHRINKER_REGISTERED)) + return; + + down_write(&shrinker_rwsem); + list_del(&shrinker->list); + shrinker->flags &= ~SHRINKER_REGISTERED; + if (shrinker->flags & SHRINKER_MEMCG_AWARE) + unregister_memcg_shrinker(shrinker); + debugfs_entry = shrinker_debugfs_detach(shrinker, &debugfs_id); + up_write(&shrinker_rwsem); + + shrinker_debugfs_remove(debugfs_entry, debugfs_id); + + kfree(shrinker->nr_deferred); + shrinker->nr_deferred = NULL; +} +EXPORT_SYMBOL(unregister_shrinker); + +/** + * synchronize_shrinkers - Wait for all running shrinkers to complete. + * + * This is equivalent to calling unregister_shrink() and register_shrinker(), + * but atomically and with less overhead. This is useful to guarantee that all + * shrinker invocations have seen an update, before freeing memory, similar to + * rcu. + */ +void synchronize_shrinkers(void) +{ + down_write(&shrinker_rwsem); + up_write(&shrinker_rwsem); +} +EXPORT_SYMBOL(synchronize_shrinkers); diff --git a/mm/vmscan.c b/mm/vmscan.c index 4039620d30fe..07bc58af6f26 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -35,7 +35,6 @@ #include #include #include -#include #include #include #include @@ -188,246 +187,7 @@ struct scan_control { */ int vm_swappiness = 60; -LIST_HEAD(shrinker_list); -DECLARE_RWSEM(shrinker_rwsem); - #ifdef CONFIG_MEMCG -static int shrinker_nr_max; - -/* The shrinker_info is expanded in a batch of BITS_PER_LONG */ -static inline int shrinker_map_size(int nr_items) -{ - return (DIV_ROUND_UP(nr_items, BITS_PER_LONG) * sizeof(unsigned long)); -} - -static inline int shrinker_defer_size(int nr_items) -{ - return (round_up(nr_items, BITS_PER_LONG) * sizeof(atomic_long_t)); -} - -static struct shrinker_info *shrinker_info_protected(struct mem_cgroup *memcg, - int nid) -{ - return rcu_dereference_protected(memcg->nodeinfo[nid]->shrinker_info, - lockdep_is_held(&shrinker_rwsem)); -} - -static int expand_one_shrinker_info(struct mem_cgroup *memcg, - int map_size, int defer_size, - int old_map_size, int old_defer_size, - int new_nr_max) -{ - struct shrinker_info *new, *old; - struct mem_cgroup_per_node *pn; - int nid; - int size = map_size + defer_size; - - for_each_node(nid) { - pn = memcg->nodeinfo[nid]; - old = shrinker_info_protected(memcg, nid); - /* Not yet online memcg */ - if (!old) - return 0; - - /* Already expanded this shrinker_info */ - if (new_nr_max <= old->map_nr_max) - continue; - - new = kvmalloc_node(sizeof(*new) + size, GFP_KERNEL, nid); - if (!new) - return -ENOMEM; - - new->nr_deferred = (atomic_long_t *)(new + 1); - new->map = (void *)new->nr_deferred + defer_size; - new->map_nr_max = new_nr_max; - - /* map: set all old bits, clear all new bits */ - memset(new->map, (int)0xff, old_map_size); - memset((void *)new->map + old_map_size, 0, map_size - old_map_size); - /* nr_deferred: copy old values, clear all new values */ - memcpy(new->nr_deferred, old->nr_deferred, old_defer_size); - memset((void *)new->nr_deferred + old_defer_size, 0, - defer_size - old_defer_size); - - rcu_assign_pointer(pn->shrinker_info, new); - kvfree_rcu(old, rcu); - } - - return 0; -} - -void free_shrinker_info(struct mem_cgroup *memcg) -{ - struct mem_cgroup_per_node *pn; - struct shrinker_info *info; - int nid; - - for_each_node(nid) { - pn = memcg->nodeinfo[nid]; - info = rcu_dereference_protected(pn->shrinker_info, true); - kvfree(info); - rcu_assign_pointer(pn->shrinker_info, NULL); - } -} - -int alloc_shrinker_info(struct mem_cgroup *memcg) -{ - struct shrinker_info *info; - int nid, size, ret = 0; - int map_size, defer_size = 0; - - down_write(&shrinker_rwsem); - map_size = shrinker_map_size(shrinker_nr_max); - defer_size = shrinker_defer_size(shrinker_nr_max); - size = map_size + defer_size; - for_each_node(nid) { - info = kvzalloc_node(sizeof(*info) + size, GFP_KERNEL, nid); - if (!info) { - free_shrinker_info(memcg); - ret = -ENOMEM; - break; - } - info->nr_deferred = (atomic_long_t *)(info + 1); - info->map = (void *)info->nr_deferred + defer_size; - info->map_nr_max = shrinker_nr_max; - rcu_assign_pointer(memcg->nodeinfo[nid]->shrinker_info, info); - } - up_write(&shrinker_rwsem); - - return ret; -} - -static int expand_shrinker_info(int new_id) -{ - int ret = 0; - int new_nr_max = round_up(new_id + 1, BITS_PER_LONG); - int map_size, defer_size = 0; - int old_map_size, old_defer_size = 0; - struct mem_cgroup *memcg; - - if (!root_mem_cgroup) - goto out; - - lockdep_assert_held(&shrinker_rwsem); - - map_size = shrinker_map_size(new_nr_max); - defer_size = shrinker_defer_size(new_nr_max); - old_map_size = shrinker_map_size(shrinker_nr_max); - old_defer_size = shrinker_defer_size(shrinker_nr_max); - - memcg = mem_cgroup_iter(NULL, NULL, NULL); - do { - ret = expand_one_shrinker_info(memcg, map_size, defer_size, - old_map_size, old_defer_size, - new_nr_max); - if (ret) { - mem_cgroup_iter_break(NULL, memcg); - goto out; - } - } while ((memcg = mem_cgroup_iter(NULL, memcg, NULL)) != NULL); -out: - if (!ret) - shrinker_nr_max = new_nr_max; - - return ret; -} - -void set_shrinker_bit(struct mem_cgroup *memcg, int nid, int shrinker_id) -{ - if (shrinker_id >= 0 && memcg && !mem_cgroup_is_root(memcg)) { - struct shrinker_info *info; - - rcu_read_lock(); - info = rcu_dereference(memcg->nodeinfo[nid]->shrinker_info); - if (!WARN_ON_ONCE(shrinker_id >= info->map_nr_max)) { - /* Pairs with smp mb in shrink_slab() */ - smp_mb__before_atomic(); - set_bit(shrinker_id, info->map); - } - rcu_read_unlock(); - } -} - -static DEFINE_IDR(shrinker_idr); - -static int prealloc_memcg_shrinker(struct shrinker *shrinker) -{ - int id, ret = -ENOMEM; - - if (mem_cgroup_disabled()) - return -ENOSYS; - - down_write(&shrinker_rwsem); - /* This may call shrinker, so it must use down_read_trylock() */ - id = idr_alloc(&shrinker_idr, shrinker, 0, 0, GFP_KERNEL); - if (id < 0) - goto unlock; - - if (id >= shrinker_nr_max) { - if (expand_shrinker_info(id)) { - idr_remove(&shrinker_idr, id); - goto unlock; - } - } - shrinker->id = id; - ret = 0; -unlock: - up_write(&shrinker_rwsem); - return ret; -} - -static void unregister_memcg_shrinker(struct shrinker *shrinker) -{ - int id = shrinker->id; - - BUG_ON(id < 0); - - lockdep_assert_held(&shrinker_rwsem); - - idr_remove(&shrinker_idr, id); -} - -static long xchg_nr_deferred_memcg(int nid, struct shrinker *shrinker, - struct mem_cgroup *memcg) -{ - struct shrinker_info *info; - - info = shrinker_info_protected(memcg, nid); - return atomic_long_xchg(&info->nr_deferred[shrinker->id], 0); -} - -static long add_nr_deferred_memcg(long nr, int nid, struct shrinker *shrinker, - struct mem_cgroup *memcg) -{ - struct shrinker_info *info; - - info = shrinker_info_protected(memcg, nid); - return atomic_long_add_return(nr, &info->nr_deferred[shrinker->id]); -} - -void reparent_shrinker_deferred(struct mem_cgroup *memcg) -{ - int i, nid; - long nr; - struct mem_cgroup *parent; - struct shrinker_info *child_info, *parent_info; - - parent = parent_mem_cgroup(memcg); - if (!parent) - parent = root_mem_cgroup; - - /* Prevent from concurrent shrinker_info expand */ - down_read(&shrinker_rwsem); - for_each_node(nid) { - child_info = shrinker_info_protected(memcg, nid); - parent_info = shrinker_info_protected(parent, nid); - for (i = 0; i < child_info->map_nr_max; i++) { - nr = atomic_long_read(&child_info->nr_deferred[i]); - atomic_long_add(nr, &parent_info->nr_deferred[i]); - } - } - up_read(&shrinker_rwsem); -} /* Returns true for reclaim through cgroup limits or cgroup interfaces. */ static bool cgroup_reclaim(struct scan_control *sc) @@ -468,27 +228,6 @@ static bool writeback_throttling_sane(struct scan_control *sc) return false; } #else -static int prealloc_memcg_shrinker(struct shrinker *shrinker) -{ - return -ENOSYS; -} - -static void unregister_memcg_shrinker(struct shrinker *shrinker) -{ -} - -static long xchg_nr_deferred_memcg(int nid, struct shrinker *shrinker, - struct mem_cgroup *memcg) -{ - return 0; -} - -static long add_nr_deferred_memcg(long nr, int nid, struct shrinker *shrinker, - struct mem_cgroup *memcg) -{ - return 0; -} - static bool cgroup_reclaim(struct scan_control *sc) { return false; @@ -557,39 +296,6 @@ static void flush_reclaim_state(struct scan_control *sc) } } -static long xchg_nr_deferred(struct shrinker *shrinker, - struct shrink_control *sc) -{ - int nid = sc->nid; - - if (!(shrinker->flags & SHRINKER_NUMA_AWARE)) - nid = 0; - - if (sc->memcg && - (shrinker->flags & SHRINKER_MEMCG_AWARE)) - return xchg_nr_deferred_memcg(nid, shrinker, - sc->memcg); - - return atomic_long_xchg(&shrinker->nr_deferred[nid], 0); -} - - -static long add_nr_deferred(long nr, struct shrinker *shrinker, - struct shrink_control *sc) -{ - int nid = sc->nid; - - if (!(shrinker->flags & SHRINKER_NUMA_AWARE)) - nid = 0; - - if (sc->memcg && - (shrinker->flags & SHRINKER_MEMCG_AWARE)) - return add_nr_deferred_memcg(nr, nid, shrinker, - sc->memcg); - - return atomic_long_add_return(nr, &shrinker->nr_deferred[nid]); -} - static bool can_demote(int nid, struct scan_control *sc) { if (!numa_demotion_enabled) @@ -671,413 +377,6 @@ static unsigned long lruvec_lru_size(struct lruvec *lruvec, enum lru_list lru, return size; } -/* - * Add a shrinker callback to be called from the vm. - */ -static int __prealloc_shrinker(struct shrinker *shrinker) -{ - unsigned int size; - int err; - - if (shrinker->flags & SHRINKER_MEMCG_AWARE) { - err = prealloc_memcg_shrinker(shrinker); - if (err != -ENOSYS) - return err; - - shrinker->flags &= ~SHRINKER_MEMCG_AWARE; - } - - size = sizeof(*shrinker->nr_deferred); - if (shrinker->flags & SHRINKER_NUMA_AWARE) - size *= nr_node_ids; - - shrinker->nr_deferred = kzalloc(size, GFP_KERNEL); - if (!shrinker->nr_deferred) - return -ENOMEM; - - return 0; -} - -#ifdef CONFIG_SHRINKER_DEBUG -int prealloc_shrinker(struct shrinker *shrinker, const char *fmt, ...) -{ - va_list ap; - int err; - - va_start(ap, fmt); - shrinker->name = kvasprintf_const(GFP_KERNEL, fmt, ap); - va_end(ap); - if (!shrinker->name) - return -ENOMEM; - - err = __prealloc_shrinker(shrinker); - if (err) { - kfree_const(shrinker->name); - shrinker->name = NULL; - } - - return err; -} -#else -int prealloc_shrinker(struct shrinker *shrinker, const char *fmt, ...) -{ - return __prealloc_shrinker(shrinker); -} -#endif - -void free_prealloced_shrinker(struct shrinker *shrinker) -{ -#ifdef CONFIG_SHRINKER_DEBUG - kfree_const(shrinker->name); - shrinker->name = NULL; -#endif - if (shrinker->flags & SHRINKER_MEMCG_AWARE) { - down_write(&shrinker_rwsem); - unregister_memcg_shrinker(shrinker); - up_write(&shrinker_rwsem); - return; - } - - kfree(shrinker->nr_deferred); - shrinker->nr_deferred = NULL; -} - -void register_shrinker_prepared(struct shrinker *shrinker) -{ - down_write(&shrinker_rwsem); - list_add_tail(&shrinker->list, &shrinker_list); - shrinker->flags |= SHRINKER_REGISTERED; - shrinker_debugfs_add(shrinker); - up_write(&shrinker_rwsem); -} - -static int __register_shrinker(struct shrinker *shrinker) -{ - int err = __prealloc_shrinker(shrinker); - - if (err) - return err; - register_shrinker_prepared(shrinker); - return 0; -} - -#ifdef CONFIG_SHRINKER_DEBUG -int register_shrinker(struct shrinker *shrinker, const char *fmt, ...) -{ - va_list ap; - int err; - - va_start(ap, fmt); - shrinker->name = kvasprintf_const(GFP_KERNEL, fmt, ap); - va_end(ap); - if (!shrinker->name) - return -ENOMEM; - - err = __register_shrinker(shrinker); - if (err) { - kfree_const(shrinker->name); - shrinker->name = NULL; - } - return err; -} -#else -int register_shrinker(struct shrinker *shrinker, const char *fmt, ...) -{ - return __register_shrinker(shrinker); -} -#endif -EXPORT_SYMBOL(register_shrinker); - -/* - * Remove one - */ -void unregister_shrinker(struct shrinker *shrinker) -{ - struct dentry *debugfs_entry; - int debugfs_id; - - if (!(shrinker->flags & SHRINKER_REGISTERED)) - return; - - down_write(&shrinker_rwsem); - list_del(&shrinker->list); - shrinker->flags &= ~SHRINKER_REGISTERED; - if (shrinker->flags & SHRINKER_MEMCG_AWARE) - unregister_memcg_shrinker(shrinker); - debugfs_entry = shrinker_debugfs_detach(shrinker, &debugfs_id); - up_write(&shrinker_rwsem); - - shrinker_debugfs_remove(debugfs_entry, debugfs_id); - - kfree(shrinker->nr_deferred); - shrinker->nr_deferred = NULL; -} -EXPORT_SYMBOL(unregister_shrinker); - -/** - * synchronize_shrinkers - Wait for all running shrinkers to complete. - * - * This is equivalent to calling unregister_shrink() and register_shrinker(), - * but atomically and with less overhead. This is useful to guarantee that all - * shrinker invocations have seen an update, before freeing memory, similar to - * rcu. - */ -void synchronize_shrinkers(void) -{ - down_write(&shrinker_rwsem); - up_write(&shrinker_rwsem); -} -EXPORT_SYMBOL(synchronize_shrinkers); - -#define SHRINK_BATCH 128 - -static unsigned long do_shrink_slab(struct shrink_control *shrinkctl, - struct shrinker *shrinker, int priority) -{ - unsigned long freed = 0; - unsigned long long delta; - long total_scan; - long freeable; - long nr; - long new_nr; - long batch_size = shrinker->batch ? shrinker->batch - : SHRINK_BATCH; - long scanned = 0, next_deferred; - - freeable = shrinker->count_objects(shrinker, shrinkctl); - if (freeable == 0 || freeable == SHRINK_EMPTY) - return freeable; - - /* - * copy the current shrinker scan count into a local variable - * and zero it so that other concurrent shrinker invocations - * don't also do this scanning work. - */ - nr = xchg_nr_deferred(shrinker, shrinkctl); - - if (shrinker->seeks) { - delta = freeable >> priority; - delta *= 4; - do_div(delta, shrinker->seeks); - } else { - /* - * These objects don't require any IO to create. Trim - * them aggressively under memory pressure to keep - * them from causing refetches in the IO caches. - */ - delta = freeable / 2; - } - - total_scan = nr >> priority; - total_scan += delta; - total_scan = min(total_scan, (2 * freeable)); - - trace_mm_shrink_slab_start(shrinker, shrinkctl, nr, - freeable, delta, total_scan, priority); - - /* - * Normally, we should not scan less than batch_size objects in one - * pass to avoid too frequent shrinker calls, but if the slab has less - * than batch_size objects in total and we are really tight on memory, - * we will try to reclaim all available objects, otherwise we can end - * up failing allocations although there are plenty of reclaimable - * objects spread over several slabs with usage less than the - * batch_size. - * - * We detect the "tight on memory" situations by looking at the total - * number of objects we want to scan (total_scan). If it is greater - * than the total number of objects on slab (freeable), we must be - * scanning at high prio and therefore should try to reclaim as much as - * possible. - */ - while (total_scan >= batch_size || - total_scan >= freeable) { - unsigned long ret; - unsigned long nr_to_scan = min(batch_size, total_scan); - - shrinkctl->nr_to_scan = nr_to_scan; - shrinkctl->nr_scanned = nr_to_scan; - ret = shrinker->scan_objects(shrinker, shrinkctl); - if (ret == SHRINK_STOP) - break; - freed += ret; - - count_vm_events(SLABS_SCANNED, shrinkctl->nr_scanned); - total_scan -= shrinkctl->nr_scanned; - scanned += shrinkctl->nr_scanned; - - cond_resched(); - } - - /* - * The deferred work is increased by any new work (delta) that wasn't - * done, decreased by old deferred work that was done now. - * - * And it is capped to two times of the freeable items. - */ - next_deferred = max_t(long, (nr + delta - scanned), 0); - next_deferred = min(next_deferred, (2 * freeable)); - - /* - * move the unused scan count back into the shrinker in a - * manner that handles concurrent updates. - */ - new_nr = add_nr_deferred(next_deferred, shrinker, shrinkctl); - - trace_mm_shrink_slab_end(shrinker, shrinkctl->nid, freed, nr, new_nr, total_scan); - return freed; -} - -#ifdef CONFIG_MEMCG -static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, - struct mem_cgroup *memcg, int priority) -{ - struct shrinker_info *info; - unsigned long ret, freed = 0; - int i; - - if (!mem_cgroup_online(memcg)) - return 0; - - if (!down_read_trylock(&shrinker_rwsem)) - return 0; - - info = shrinker_info_protected(memcg, nid); - if (unlikely(!info)) - goto unlock; - - for_each_set_bit(i, info->map, info->map_nr_max) { - struct shrink_control sc = { - .gfp_mask = gfp_mask, - .nid = nid, - .memcg = memcg, - }; - struct shrinker *shrinker; - - shrinker = idr_find(&shrinker_idr, i); - if (unlikely(!shrinker || !(shrinker->flags & SHRINKER_REGISTERED))) { - if (!shrinker) - clear_bit(i, info->map); - continue; - } - - /* Call non-slab shrinkers even though kmem is disabled */ - if (!memcg_kmem_online() && - !(shrinker->flags & SHRINKER_NONSLAB)) - continue; - - ret = do_shrink_slab(&sc, shrinker, priority); - if (ret == SHRINK_EMPTY) { - clear_bit(i, info->map); - /* - * After the shrinker reported that it had no objects to - * free, but before we cleared the corresponding bit in - * the memcg shrinker map, a new object might have been - * added. To make sure, we have the bit set in this - * case, we invoke the shrinker one more time and reset - * the bit if it reports that it is not empty anymore. - * The memory barrier here pairs with the barrier in - * set_shrinker_bit(): - * - * list_lru_add() shrink_slab_memcg() - * list_add_tail() clear_bit() - * - * set_bit() do_shrink_slab() - */ - smp_mb__after_atomic(); - ret = do_shrink_slab(&sc, shrinker, priority); - if (ret == SHRINK_EMPTY) - ret = 0; - else - set_shrinker_bit(memcg, nid, i); - } - freed += ret; - - if (rwsem_is_contended(&shrinker_rwsem)) { - freed = freed ? : 1; - break; - } - } -unlock: - up_read(&shrinker_rwsem); - return freed; -} -#else /* CONFIG_MEMCG */ -static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, - struct mem_cgroup *memcg, int priority) -{ - return 0; -} -#endif /* CONFIG_MEMCG */ - -/** - * shrink_slab - shrink slab caches - * @gfp_mask: allocation context - * @nid: node whose slab caches to target - * @memcg: memory cgroup whose slab caches to target - * @priority: the reclaim priority - * - * Call the shrink functions to age shrinkable caches. - * - * @nid is passed along to shrinkers with SHRINKER_NUMA_AWARE set, - * unaware shrinkers will receive a node id of 0 instead. - * - * @memcg specifies the memory cgroup to target. Unaware shrinkers - * are called only if it is the root cgroup. - * - * @priority is sc->priority, we take the number of objects and >> by priority - * in order to get the scan target. - * - * Returns the number of reclaimed slab objects. - */ -static unsigned long shrink_slab(gfp_t gfp_mask, int nid, - struct mem_cgroup *memcg, - int priority) -{ - unsigned long ret, freed = 0; - struct shrinker *shrinker; - - /* - * The root memcg might be allocated even though memcg is disabled - * via "cgroup_disable=memory" boot parameter. This could make - * mem_cgroup_is_root() return false, then just run memcg slab - * shrink, but skip global shrink. This may result in premature - * oom. - */ - if (!mem_cgroup_disabled() && !mem_cgroup_is_root(memcg)) - return shrink_slab_memcg(gfp_mask, nid, memcg, priority); - - if (!down_read_trylock(&shrinker_rwsem)) - goto out; - - list_for_each_entry(shrinker, &shrinker_list, list) { - struct shrink_control sc = { - .gfp_mask = gfp_mask, - .nid = nid, - .memcg = memcg, - }; - - ret = do_shrink_slab(&sc, shrinker, priority); - if (ret == SHRINK_EMPTY) - ret = 0; - freed += ret; - /* - * Bail out if someone want to register a new shrinker to - * prevent the registration from being stalled for long periods - * by parallel ongoing shrinking. - */ - if (rwsem_is_contended(&shrinker_rwsem)) { - freed = freed ? : 1; - break; - } - } - - up_read(&shrinker_rwsem); -out: - cond_resched(); - return freed; -} - static unsigned long drop_slab_node(int nid) { unsigned long freed = 0; From patchwork Mon Jul 24 09:43:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323642 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 9F430C04FDF for ; Mon, 24 Jul 2023 09:45:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 32C6E280001; Mon, 24 Jul 2023 05:45:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2DB4E6B0075; Mon, 24 Jul 2023 05:45:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1A75E280001; Mon, 24 Jul 2023 05:45:34 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 0CBE76B0071 for ; Mon, 24 Jul 2023 05:45:34 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id CE93080843 for ; Mon, 24 Jul 2023 09:45:33 +0000 (UTC) X-FDA: 81046022946.07.9A4B779 Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) by imf04.hostedemail.com (Postfix) with ESMTP id EC7BB40011 for ; Mon, 24 Jul 2023 09:45:31 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=DyvUb16i; spf=pass (imf04.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.210.178 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690191932; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ewD/GNBDsb9emQZc+crYJJhL9Ok7DRtPygkZmojk224=; b=lon+v8DoQRgQfDlrpcg3SfbbjfoBBTmsZ5wBLTCrub/7w9cwZbAUGs+cBdKe39+ytPvv+n KGuFB0LRp51VlJ/uuciK6NYh60g60VmYeXKwkerXQPdvJx6M7/05/qMhHFt8ApUA8VJQ3U 6qz4sGlt5lfZ/3XDIFTQw+DabATM7aw= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=DyvUb16i; spf=pass (imf04.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.210.178 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690191932; a=rsa-sha256; cv=none; b=Hi12Dy7Enme85xFyVzYWcZv8wPLTwfKEV3KnMdb4NeTgJx/Bg9dMJIpp8Y/FmFsODClDzZ TjOs1xx/s+j8HlfKHuJTlCBVmrdDw8ni1JAFJsfmd+/z8H8KmZC/I8B2KNYqK/2cKkG1p9 vj4I84AcGYQNGdY3Zc/AckhkQLcmqak= Received: by mail-pf1-f178.google.com with SMTP id d2e1a72fcca58-6864c144897so1022439b3a.1 for ; Mon, 24 Jul 2023 02:45:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690191931; x=1690796731; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ewD/GNBDsb9emQZc+crYJJhL9Ok7DRtPygkZmojk224=; b=DyvUb16iFXGbECeKR4Jj5b9Aqu7GqNXEePNkHat23I7b1VL4ke9XL7AFF21PJI8D03 dadzrjq6WC5mtymsIwcgysKxt2IeQhVQYSg0yzEciG/3J3jMvvonWrabgIjT5cyrH4U0 K1NmdQ2LZEMZR3X0ctjhZi8pkjfdY6FiANez7gH72dxDBt7t+C7AalBczQoExmv/leVd sjx5yitsqqA/ZPm80lkfCIhjuAfvEuRwNIJ4RlVw9F2GYFjyskW1Ygf/DVx+iz0W5Dlm 41zeCUlShQCZl1UPIlyRzbY5fG4LbR2jBKDZp6zvisQp1bayYn113SLSSif4m+cEaf+t mhLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690191931; x=1690796731; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ewD/GNBDsb9emQZc+crYJJhL9Ok7DRtPygkZmojk224=; b=blwW8AZYZS/Rcgjiul3mjzZmtXnc7UMbJHiYbFAqjsjjs7T9PCXoAeBeml/Gflb0IZ w4dcuJJGu65cAp9GhRlBsGmPrczltvtT6xDd5LN4DeQBbmNAnYxn8XjkX8fyY58/w6MA iWO4nsAIc8Dfl3oHQNCC0imgeqWDXSd0WoK7qdak46NhIiNT2kWQb5tmZfJ5lb0ERlrq ejJZuKSKi+j9i3+QRt8A8sP04eOugNg3mscWn5LxmupcBZVHUCvz7P181TNRaTCTPsrr SmETRZv11q2WELvDl01/gNlLbapgbmK+OGJ81aqu/3Px1YsSxVdQtbch3+NRHHqEwChf 4uIA== X-Gm-Message-State: ABy/qLZwV1JCacfWvhgOmUvCfo4nLn1UL3puz7N09geSFwMyHL8nQQ6K iEP7jiSJNf39yteoAdXuvZN+2Q== X-Google-Smtp-Source: APBJJlF4hVHTEAcnrryQeIsWufK3e63a7rX2g1OMpnBMufUIHv2BcOagu97Dc7evIwstimu7xBX17w== X-Received: by 2002:a17:902:e849:b0:1b8:35fa:cdcc with SMTP id t9-20020a170902e84900b001b835facdccmr12688015plg.5.1690191930816; Mon, 24 Jul 2023 02:45:30 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.45.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:45:30 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 02/47] mm: shrinker: remove redundant shrinker_rwsem in debugfs operations Date: Mon, 24 Jul 2023 17:43:09 +0800 Message-Id: <20230724094354.90817-3-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: EC7BB40011 X-Rspam-User: X-Stat-Signature: ghz9a44z14ftpeqojxwq6kb9ezomqfek X-Rspamd-Server: rspam01 X-HE-Tag: 1690191931-544678 X-HE-Meta: U2FsdGVkX196S+uLTd4B7HAu0scwmpgWnydul2h1Jwz05S2CM65cxtvL8Y2FKgc8bHlcLslmZugqgsH7sT1ULGkTN8qGH752WPxywG9iW8q6rlr+tVPltaQZ94W0vek0FMBx2BLn5hI6bmaaT4dPbkfWkECmFhMIU/zme5HEiyAnQwH9bSWfJSQXTMacqvvXflCjAlfoWYOT/YepHoCsSbD5YiE6OdvQdJ8TRMHKWiObcuoftlAsZ1pKhIz5UqaISg1AY032VH6xf+ddDd4cTHOcTP3shtwdts6/y6ZwbJQwdRRy8jgdxEL5Iyas9j2F8CUEiCqA8Hf82YAio6enK9sR2TDlvWT6Zd/SZermrmMGsXegh5H9Ky5X1gl01wW/qpc4+OdYftDpJ8RiRPBvD8A36iyP1ZnoDKapLmFyhtrxCGljLt9YQP/tCkx6sNvYnF9P53kY1DYM37p5DCnJ3jAGnFv1bpc4DbqtKGnfMCKf3eEfyg63tT/BmLT/7zwb7Kji/Ll6hxCJPMn4z0d+x4hziwZrFe8zy/I6en6XJwVscEgXgXQRbaEJM8XQjEKIcPPDs1EkLgVAsyPJhx0nADUFJvXp1FGh7wz2ltdQyZ/0Cv/j80ZjT11igwR9M0wzr4DChy3FaUUH063ereSFKGk1eNv+JTkVzYr/JQScTvyeJvXDOSbY3vDy6ke+9X8QBaEgvOAoZCNF8m+HFkITSRN5eg27ASB/V439FegZ6aY2m+yxFkQYlkNbrOfc3Xvi+BAcqB0Mqaon7TD6uVCKSQ8AQw0odlcGNbU46Bw+uGySbbhedScnGU84BF32En7Rp1qVtNydA0GbUpTJoDBcBlhH4f6suOOivzDSa2Xy7UhrfMYHdjZx6eMgSoXOH+GXm4wPK1EQtTbHyfSq0r920UhB572RttH7CxBZhfKCRIafug/5nmD4g9WKVkr9waQ/16IpJs9eBGH9eW//6sY zhIMVAb2 HQ1QoETewkQRY0JCxWMo5oiQq0kT3aiQzMjffTVcYUQgJAncVS/7DDGHH0rJ9cZ3w2kCkIpIJlaMg21aB3LgwhFu4/5otLPe5PZSntUIJf51l/dPEh/UD5nEMzhRx6Yhqs+XDHz0BeeNOFVa00OLxx+yaQDEabYLypEwftNFNKWVYDhMzYqNV6EjRpjovh6gfiPhSnb/JMjk7mEJ9UkzWpLYJdznVVR8PjEjS96/ezhOxqIAqfQflo724GF5/vX1SrC8DJzSl9quW5tXQ+pIceqMiKQSKiL1AxuCZIMbfpIxaf1e1f+bEYqSOqQ7zEQuRLzIQTmGrTmseotKojZmWPMczZfHWTLHTtdVd8gyAgX5HUQwK4k0vQNJG7ilzY+/VDtiBoO0i3FjX/MjmH2gf1RB/RisBUDMe1nvVDhQGfZzvpeT8r5Vu588lPQguuzLVev6i44b64My3EiLzgOtu6ik3Dw== 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: The debugfs_remove_recursive() will wait for debugfs_file_put() to return, so the shrinker will not be freed when doing debugfs operations (such as shrinker_debugfs_count_show() and shrinker_debugfs_scan_write()), so there is no need to hold shrinker_rwsem during debugfs operations. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- mm/shrinker_debug.c | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/mm/shrinker_debug.c b/mm/shrinker_debug.c index 3ab53fad8876..f1becfd45853 100644 --- a/mm/shrinker_debug.c +++ b/mm/shrinker_debug.c @@ -55,11 +55,6 @@ static int shrinker_debugfs_count_show(struct seq_file *m, void *v) if (!count_per_node) return -ENOMEM; - ret = down_read_killable(&shrinker_rwsem); - if (ret) { - kfree(count_per_node); - return ret; - } rcu_read_lock(); memcg_aware = shrinker->flags & SHRINKER_MEMCG_AWARE; @@ -92,7 +87,6 @@ static int shrinker_debugfs_count_show(struct seq_file *m, void *v) } while ((memcg = mem_cgroup_iter(NULL, memcg, NULL)) != NULL); rcu_read_unlock(); - up_read(&shrinker_rwsem); kfree(count_per_node); return ret; @@ -117,7 +111,6 @@ static ssize_t shrinker_debugfs_scan_write(struct file *file, struct mem_cgroup *memcg = NULL; int nid; char kbuf[72]; - ssize_t ret; read_len = size < (sizeof(kbuf) - 1) ? size : (sizeof(kbuf) - 1); if (copy_from_user(kbuf, buf, read_len)) @@ -146,12 +139,6 @@ static ssize_t shrinker_debugfs_scan_write(struct file *file, return -EINVAL; } - ret = down_read_killable(&shrinker_rwsem); - if (ret) { - mem_cgroup_put(memcg); - return ret; - } - sc.nid = nid; sc.memcg = memcg; sc.nr_to_scan = nr_to_scan; @@ -159,7 +146,6 @@ static ssize_t shrinker_debugfs_scan_write(struct file *file, shrinker->scan_objects(shrinker, &sc); - up_read(&shrinker_rwsem); mem_cgroup_put(memcg); return size; From patchwork Mon Jul 24 09:43:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323643 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 BDA25C04A94 for ; Mon, 24 Jul 2023 09:45:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 575796B0071; Mon, 24 Jul 2023 05:45:46 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 525E2280003; Mon, 24 Jul 2023 05:45:46 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3C65F280002; Mon, 24 Jul 2023 05:45:46 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 30CDA6B0071 for ; Mon, 24 Jul 2023 05:45:46 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 021B41C98CD for ; Mon, 24 Jul 2023 09:45:45 +0000 (UTC) X-FDA: 81046023492.13.4C42948 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) by imf06.hostedemail.com (Postfix) with ESMTP id 28CB8180016 for ; Mon, 24 Jul 2023 09:45:43 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=bsUNhBCX; spf=pass (imf06.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690191944; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=DaxJS65ntPERL7le+nmtmDDoPHIKL7Svp/IgETL6ZeE=; b=rLMwMvjHFwDn0/OjIVKDrbycWwpofJ+byz9T4++JRBoDx1h/1WD4tN2QP03YzUDCCBd93Y Kv8xOWIO4MIM8kuVkPV9zPbJaifz5N/rWa4Pq2ZNLvUAaU4A9/j/mVfHiFh2/CQpT5qxGU 1qpGcdBmnqin5t+BC811lwAArTNrsZY= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690191944; a=rsa-sha256; cv=none; b=KpGP6f0iZmgcCii8XgokWT1g/ZtAK5IBWJZvDzdWy0yGXansGXHVRHXFFPvmCXXWRMSYtQ KD5X2dXYNuocsqiEbWfwNe42g0Gbf4siPVD0AJkApvtjpRdP9KxsxLPd1Xp++USU2kJXV0 UyhBeM/G21PimRcAaVM7RZ0eSPwW4a0= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=bsUNhBCX; spf=pass (imf06.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-1bb91c20602so2225635ad.0 for ; Mon, 24 Jul 2023 02:45:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690191943; x=1690796743; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=DaxJS65ntPERL7le+nmtmDDoPHIKL7Svp/IgETL6ZeE=; b=bsUNhBCXwNUzkDR0ZBYGRWY6QU8jf6SXW0GNGt2FOx6GMmf4JYDUwOhZCN0a9aNwPh pTka7+wy4J6SiQlycedqXCWLDNsWz3aJioSMhFKKX+Cimy7bU+oF7hjqxyvShR8A2yEG Bu7LESrzTJZCH9TPtc2I9FzALspZlYdCLyw0Gn9itfPl/wiIrNjf25JL50bsQdJ04tcL SlbyOamKluDXUz4pmzuKSCdYj+rqtmnfikA7iqukCNA9GBpbd9F7GXY8//WwnDt8lif7 VBbsqb4LU2WF81b1loSTallposIksCkIrM7zY2O8grvdOy/OC2xy9l8uFRAuNMFBjkRJ /Eug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690191943; x=1690796743; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DaxJS65ntPERL7le+nmtmDDoPHIKL7Svp/IgETL6ZeE=; b=dGPaCYe5rjv7ApcuwKbSmYTqIPXXN9hALQ+5nn4vuNDZ6wnwxrRWzPaAsi6OHymmPp 1de9CWQTKQ3RIG4NSc14gDfTHiA2OW2BHIEBKaVKStsS1dcO25QLVHC88m98F2QlUhIg uZx1duEEDsTgelL+Ow0c0r/Q24Z+Q55ZfmYk0cdc3pbZFbBEW1MPQ0/1eupZy3Yd26xo 4C9cnu9nTdqRFNTYNhET5riu2fw84YzUd4jsYvDdxVKWPq/glZ3yc3yiOgeME2qXODbE I0H7y3mUtiCxW2x0+MubWulFQbv6oyEGIKu/EMAZrKVXs9jWJhOCEmSdlLxhLWOB2iKK M8Ww== X-Gm-Message-State: ABy/qLZK8mvto5aO9RhrGOuqAio8oOx7gcVG6B68hUkzOgd/lWY2m5jJ BFMTXuol/ke8GB/pdlrk2cafcw== X-Google-Smtp-Source: APBJJlGWwe+Wn5SAE9CC225imGBvK3oJNP2MQHqUiC6fnoUxBGqj3ofPftHC2Yw9p8SUIC56L+2IOQ== X-Received: by 2002:a17:903:2305:b0:1b8:b0c4:2e3d with SMTP id d5-20020a170903230500b001b8b0c42e3dmr12236473plh.4.1690191942806; Mon, 24 Jul 2023 02:45:42 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.45.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:45:42 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 03/47] mm: shrinker: add infrastructure for dynamically allocating shrinker Date: Mon, 24 Jul 2023 17:43:10 +0800 Message-Id: <20230724094354.90817-4-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Stat-Signature: ygpgd156c4mynd37ptr6t55cncbnda8g X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 28CB8180016 X-Rspam-User: X-HE-Tag: 1690191943-225158 X-HE-Meta: U2FsdGVkX1+fEmEtOKhzdXmFQAaiXPM7dbrFwcAF/FaFQeDWKlpSyeKngBND0jTL8YMN5pwGtUqmwBD/aG1zALzIhOIzBH67Lwy6Hj9LxsHEp6UWiOHXZ/U63d3NQGSJHq+K/v1wtw2KkG/ZTMkbXhEBOS9x07MPbrHJ+/rzZx/DTK4jS48147KWUphk6BUlGiYEM9zf3+TxfBwBBO9NsoAsl0nC3WVO+JjzeqlO0opSe1mhXvvPOD4FZLQfOFifTErbRP3S5GYAxV9JrGHd481FsEyVzd3YBFkzcl5whDP+6vikobTOsYjjUSjPalpNOs85rhYYPPY1vxScUpGJodob4iWXSV2X0nFQNdJ56KG/YuLqofdLhp/nD0fHvlUWTfayuX0KE0+HTWY32T11vYQTCCLhBpG/Rq4QwjdEs9vnBEmkzs+uZdw7fXMucUnR1/aTcNqMoEhzrpjEOFwhy8cN7nO6QAxTyKestxa9YR1imSk+ui3r3BkVcmodzOvm1ah9n0cIe7iYkzYS5QnQSKI55K3pTlqLS1CHKHFXlxWcHRu/xY4q5b8K02B1vOhYyMF1Q4O/MGhrdYQcAzrsJaFcThjTzpnJfkx0VRua0pF7y0hsJ7zh2D05i3u/66HTSx2VywVCiVp778ic7GIYcwbnKkWaSat28z3fU/KPfJFhKOotbyMZ6znN2cDaxh8C1/07U6h9SkKK/v711c8P7vucHLE+KItXQufVoZCI/P3yOi8BEsHqHJISonaLImVj9phUvoDlsADosTCrfBuKFpJSDtVFVAELZeX6w1MGJ3jDMe6Mz4vZAnvcorfsTPFdnaot5HtDrJ7sW7/jnr7sHX/+++TRENaQfEn/0sVLWmel+wqdQjWXZchLGG4vCejYnO07Skcv9ExkaTEKkxqUh9/6SBbx+1giYMiBT9gtuiZh9S+pdOOb076rD8V6Xed1t7rx0ZsTABXl9OrajWz ZWhhnlP/ +/325lE2nCC7aCC5/sBLxf6+eTvFO0CBjMOfaN735PrRjYy8C8uy2ns8gM9PgJiM8FWIsrfzqwcTaFPRYYBQ8GVRHCULnh0BMHjBiHOSmsxq6S5EBokvPjixAQQKCgJFxfKgP8W1xsu1n1DxvIxOHcQOLwhh47j4sIkbbeR0sfraog0xLbCM78BcgqTaRsTqf4wZkLHtrRV4aYzODOGj0NqLCBUFz0hKj5z9nWjjwHpttEelS1rH1gJ7HvUN76C2BGWw9CZduEATA8w7tt5SHLajie61ZtIfvUuNniz89IQuHocQSXEJX3Rh5lwzPsrlxGMc1wj9avCsfad7RxX6jrimsKjnpZFUlaLs18hOSnF3mKzAAw5SWofqhvqg5LdOwWrqqk2HT32aJ3fY5bFSfyTmCQve2gcgex2Z9 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: Currently, the shrinker instances can be divided into the following three types: a) global shrinker instance statically defined in the kernel, such as workingset_shadow_shrinker. b) global shrinker instance statically defined in the kernel modules, such as mmu_shrinker in x86. c) shrinker instance embedded in other structures. For case a, the memory of shrinker instance is never freed. For case b, the memory of shrinker instance will be freed after synchronize_rcu() when the module is unloaded. For case c, the memory of shrinker instance will be freed along with the structure it is embedded in. In preparation for implementing lockless slab shrink, we need to dynamically allocate those shrinker instances in case c, then the memory can be dynamically freed alone by calling kfree_rcu(). So this commit adds the following new APIs for dynamically allocating shrinker, and add a private_data field to struct shrinker to record and get the original embedded structure. 1. shrinker_alloc() Used to allocate shrinker instance itself and related memory, it will return a pointer to the shrinker instance on success and NULL on failure. 2. shrinker_free_non_registered() Used to destroy the non-registered shrinker instance. 3. shrinker_register() Used to register the shrinker instance, which is same as the current register_shrinker_prepared(). 4. shrinker_unregister() Used to unregister and free the shrinker instance. In order to simplify shrinker-related APIs and make shrinker more independent of other kernel mechanisms, subsequent submissions will use the above API to convert all shrinkers (including case a and b) to dynamically allocated, and then remove all existing APIs. This will also have another advantage mentioned by Dave Chinner: ``` The other advantage of this is that it will break all the existing out of tree code and third party modules using the old API and will no longer work with a kernel using lockless slab shrinkers. They need to break (both at the source and binary levels) to stop bad things from happening due to using uncoverted shrinkers in the new setup. ``` Signed-off-by: Qi Zheng --- include/linux/shrinker.h | 6 +++ mm/shrinker.c | 113 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index 961cb84e51f5..296f5e163861 100644 --- a/include/linux/shrinker.h +++ b/include/linux/shrinker.h @@ -70,6 +70,8 @@ struct shrinker { int seeks; /* seeks to recreate an obj */ unsigned flags; + void *private_data; + /* These are for internal use */ struct list_head list; #ifdef CONFIG_MEMCG @@ -98,6 +100,10 @@ struct shrinker { unsigned long shrink_slab(gfp_t gfp_mask, int nid, struct mem_cgroup *memcg, int priority); +struct shrinker *shrinker_alloc(unsigned int flags, const char *fmt, ...); +void shrinker_free_non_registered(struct shrinker *shrinker); +void shrinker_register(struct shrinker *shrinker); +void shrinker_unregister(struct shrinker *shrinker); extern int __printf(2, 3) prealloc_shrinker(struct shrinker *shrinker, const char *fmt, ...); diff --git a/mm/shrinker.c b/mm/shrinker.c index 0a32ef42f2a7..d820e4cc5806 100644 --- a/mm/shrinker.c +++ b/mm/shrinker.c @@ -548,6 +548,119 @@ unsigned long shrink_slab(gfp_t gfp_mask, int nid, struct mem_cgroup *memcg, return freed; } +struct shrinker *shrinker_alloc(unsigned int flags, const char *fmt, ...) +{ + struct shrinker *shrinker; + unsigned int size; + va_list __maybe_unused ap; + int err; + + shrinker = kzalloc(sizeof(struct shrinker), GFP_KERNEL); + if (!shrinker) + return NULL; + +#ifdef CONFIG_SHRINKER_DEBUG + va_start(ap, fmt); + shrinker->name = kvasprintf_const(GFP_KERNEL, fmt, ap); + va_end(ap); + if (!shrinker->name) + goto err_name; +#endif + shrinker->flags = flags; + + if (flags & SHRINKER_MEMCG_AWARE) { + err = prealloc_memcg_shrinker(shrinker); + if (err == -ENOSYS) + shrinker->flags &= ~SHRINKER_MEMCG_AWARE; + else if (err == 0) + goto done; + else + goto err_flags; + } + + /* + * The nr_deferred is available on per memcg level for memcg aware + * shrinkers, so only allocate nr_deferred in the following cases: + * - non memcg aware shrinkers + * - !CONFIG_MEMCG + * - memcg is disabled by kernel command line + */ + size = sizeof(*shrinker->nr_deferred); + if (flags & SHRINKER_NUMA_AWARE) + size *= nr_node_ids; + + shrinker->nr_deferred = kzalloc(size, GFP_KERNEL); + if (!shrinker->nr_deferred) + goto err_flags; + +done: + return shrinker; + +err_flags: +#ifdef CONFIG_SHRINKER_DEBUG + kfree_const(shrinker->name); + shrinker->name = NULL; +err_name: +#endif + kfree(shrinker); + return NULL; +} +EXPORT_SYMBOL(shrinker_alloc); + +void shrinker_free_non_registered(struct shrinker *shrinker) +{ +#ifdef CONFIG_SHRINKER_DEBUG + kfree_const(shrinker->name); + shrinker->name = NULL; +#endif + if (shrinker->flags & SHRINKER_MEMCG_AWARE) { + down_write(&shrinker_rwsem); + unregister_memcg_shrinker(shrinker); + up_write(&shrinker_rwsem); + } + + kfree(shrinker->nr_deferred); + shrinker->nr_deferred = NULL; + + kfree(shrinker); +} +EXPORT_SYMBOL(shrinker_free_non_registered); + +void shrinker_register(struct shrinker *shrinker) +{ + down_write(&shrinker_rwsem); + list_add_tail(&shrinker->list, &shrinker_list); + shrinker->flags |= SHRINKER_REGISTERED; + shrinker_debugfs_add(shrinker); + up_write(&shrinker_rwsem); +} +EXPORT_SYMBOL(shrinker_register); + +void shrinker_unregister(struct shrinker *shrinker) +{ + struct dentry *debugfs_entry; + int debugfs_id; + + if (!shrinker || !(shrinker->flags & SHRINKER_REGISTERED)) + return; + + down_write(&shrinker_rwsem); + list_del(&shrinker->list); + shrinker->flags &= ~SHRINKER_REGISTERED; + if (shrinker->flags & SHRINKER_MEMCG_AWARE) + unregister_memcg_shrinker(shrinker); + debugfs_entry = shrinker_debugfs_detach(shrinker, &debugfs_id); + up_write(&shrinker_rwsem); + + shrinker_debugfs_remove(debugfs_entry, debugfs_id); + + kfree(shrinker->nr_deferred); + shrinker->nr_deferred = NULL; + + kfree(shrinker); +} +EXPORT_SYMBOL(shrinker_unregister); + /* * Add a shrinker callback to be called from the vm. */ From patchwork Mon Jul 24 09:43:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323644 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 853CBC0015E for ; Mon, 24 Jul 2023 09:45:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 241B7280002; Mon, 24 Jul 2023 05:45:58 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1F15D6B0078; Mon, 24 Jul 2023 05:45:58 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0B9A8280002; Mon, 24 Jul 2023 05:45:58 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id F35666B0075 for ; Mon, 24 Jul 2023 05:45:57 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id B48468099E for ; Mon, 24 Jul 2023 09:45:57 +0000 (UTC) X-FDA: 81046023954.02.944B90D Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) by imf25.hostedemail.com (Postfix) with ESMTP id DED0AA000A for ; Mon, 24 Jul 2023 09:45:55 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=IZCH5tV1; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf25.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.174 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690191956; a=rsa-sha256; cv=none; b=D+9P1dCysquWM0Gw18yPXnG1YoTHGRy9x6hEMLEcSsSzgOPJlyyKR7liLlcDTcYkVbyEoR R794J4l3H/wM/kJiSMPcLwwTUx8WtxLsWIhCEUN+2jCrIKSgx61oJD1u5A8RWHU31q2m1W 1ugR7OQA3SrnwHvIUKyVS9PxaoemFd8= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=IZCH5tV1; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf25.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.174 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690191956; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=jmPwAlPL0TnDBmalzCzATtOPmfxfqu3Q+7XaFZclAtg=; b=UvKXj0feM4RsLy0PJuBYiXYoFZtAssbvY97Pr5igsfDt9OUtOPoAXftcDVPQcpXh8DzDz6 KXSmPg4RWzvfmNG/1FOeV3ZsZ+WJ5Yzg0DWWzKqXA5FkQbtxasRuW9SZmoKNa/WacZ/Ynn 5v0YmqACIbguEg1RcQpiFYWvMjHNuWc= Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-1b867f9198dso8893435ad.0 for ; Mon, 24 Jul 2023 02:45:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690191955; x=1690796755; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jmPwAlPL0TnDBmalzCzATtOPmfxfqu3Q+7XaFZclAtg=; b=IZCH5tV1VdvhB0RXcuG+SL+gg1mEbPZMQJz8qUY1fWCpYBfjAR72/AnWbcPpstjQLI aFpv+l8Q67Kc3iJwSzziW/zZbsYehvkdZbQbXx8X8jR6oJCUrIFV8Qzo50G/FYmT9t2/ w6ZN7N+ZviCRVJxyy+bucuBxrS6SRhon2EIiX0i15H4OrDXIvK+dChrAy0pj6MjsuwdC 6yiqEWuw0/0mdj0SNL2xTjIsK+WXPpE1gw9KgQ4WCUpGSoFe6rXH0GXBficEqbQlrShV wc7SdQklmSH69kiwU3dxFC6F0qOnJE6NuoEe6VBjJkE5shAIs2KVw9Ha+vCxjUcFWX2y lSHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690191955; x=1690796755; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jmPwAlPL0TnDBmalzCzATtOPmfxfqu3Q+7XaFZclAtg=; b=Qk0fgxkCdNSIO3hODUUOI+RJtsrG9uqAfaUhMwoeXT3ma6mgjtNroYXyOr8LyFWR1h kxf6BCI06ThxKvY6K4CCvn9uy0Uhd115QtZ7wWcr5ZRheBPnebsbJsvHGwaf0r0tpn3/ 5p20wTnxlrfEWZeJQsjP4Zx0f95bX25GzPtzEve9MV+Eq08BES/qiCwMl8NzkUN5gK8Z WGmCbmgp/71cDeL3Pg8BKOnUs3u32QdUzbtsgzjbFWVZMg0xRQt6C6GAo5fG7G9kRwao QS3LoWR1VRVIY5mD82+A1j1H7PRXY38ZtSxxqApD6OrrUzUV+VFnAiAmphGgvPpVfWQv CeWw== X-Gm-Message-State: ABy/qLabMpe3g/gCklvLBZ7Uj1J5fY6Ep2v5cBDskYccsVTN/Lx3vLO/ iWGfNNBpxmre+SbYdcyY8simWg== X-Google-Smtp-Source: APBJJlHDY1qhgSa+H4mr70oj6h44PLP3QUTUzXb3MsGg4I77oDNLLFWrtOaIhBAmIAnOXFQDdEVBFw== X-Received: by 2002:a17:902:d4cb:b0:1b1:9272:55e2 with SMTP id o11-20020a170902d4cb00b001b1927255e2mr12365119plg.3.1690191954835; Mon, 24 Jul 2023 02:45:54 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.45.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:45:54 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 04/47] kvm: mmu: dynamically allocate the x86-mmu shrinker Date: Mon, 24 Jul 2023 17:43:11 +0800 Message-Id: <20230724094354.90817-5-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: DED0AA000A X-Stat-Signature: 3wyatneyp9k7aaih11cdahg4oh1oqxmf X-HE-Tag: 1690191955-94760 X-HE-Meta: U2FsdGVkX19iEQ0EyQzNc/2UUVBgy8thdef1slw+VOYONyxF3VgPZlrjMDRdJ8Tvg9yHCZrP5CHAj4gXadRrILLpKVBnQAAFuU15m4qZ0XP9sd7iCLTSUPSDqDoOF7EYNGVRcs5SbGCH1ZnHgFUvnNE3uKcM5iRu4c4cSgXpWWlW/blCJ8Q05MPspS7o7INqT86vKA07s77S+DJ8pSaIlbA3L7aFNZnyGSFMlidBjJZ4PwFHfIKQa0GHd0Ot1peLuPGnFj6iEm3ew5vwrqhwPyvnzSC91Qdfs9uByjNScV/x76xsNEM39hAGxiH3ijQbFRplcm13ryGUIA4HyCd6Ty2DxiaO1Ai6DW7kIMxwhnKf9WPPyzkGz0A1J6pg/7uEz9AWj5NB67sYTsjxsqngmvW1FNMPcAwZpzfPWQTnR4FG0W4Cka4eEWuGaGkLaMpNEzHFWYLoMOfjGTq3y2WcFCmg4DvEo4uaOAS+grBga3v9hVJ9BUMAUoOIT/4gzCkEfs68nt58+f/KjKH5qlmhTnqnCzEJCUFquXKvGnyX6/EHfB1ZTbhK7/U8i/WTJSitc8pdqZzJ1iLffgeGLAVDEhntGsBgUzc4xyJPpf6FiN3IxHXwD1vYycfZ7oPkD5ZLlFTp5vXCikwAGcYCF+9gyzDniGuoiGq+tFxWH52sovCgo7HZ8TxW4WO5V/s57CPlZ3QazE8UCTjMXzw7iDuPNvTjNl/U6Q88wYTp7XWoLm2BcH2VwLPQkk6osuv627WCl1VY3LiaKP6Etz/V4W9C4qeYVPokfwazz8mHfAlu+y6+w3wNTB/4hb9OUdb3gYyzEj+8/zUNG+hb5CTEaVcnUgkZ0vt2LN1SsApuwWXXfKcNYJBA1WRg2ewsKUTq64owIlpk9eP6OnWADIND+6FQ/Kl7SV9PECTBc8EQBo4c4TZdy3kcaWOaogZmKLCaupqI5jWglmGWCYxE987u3OA 9C0/AjuY WFFfvjPdsmAbxVjphZovdezUZChWWRMZAPT6vmSwnaKgffTn6LZKGS+gcsgj5M96u1jtY9TGlowHB39t1nzhxqaiSVy9gx+PlPeitIDnzDbgrMGjP1+ecDgfFcq60/rXHbkdm19yQYbamH1iTGlWc+KaBvywKfTxR1oAnXaE5PqbIy4CVw+BmQnDqJpe4kpDLwsA1YOJPlm9/S5YQ4eZ3aNk/GJNP36fH5zOD47RiKr5sOJAywDwQaM4uhUVIlXxbImXu9QO9URhMjWM2+9XZ4XT03XQILpxBjajfRcNJ2J/v7cSrxzbvopYx2XOGbq8YIIg77/7XAPPOoz4oL8+KWiGRUeovuJdcf9HuROKuFmh6bqIssFGU2+jORRyhJ+IUD67tatT3DECvSdxDssJhkDN7d10bPVrbPNyK 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: Use new APIs to dynamically allocate the x86-mmu shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- arch/x86/kvm/mmu/mmu.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index ec169f5c7dce..ab405e0a8954 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -6847,11 +6847,7 @@ static unsigned long mmu_shrink_count(struct shrinker *shrink, return percpu_counter_read_positive(&kvm_total_used_mmu_pages); } -static struct shrinker mmu_shrinker = { - .count_objects = mmu_shrink_count, - .scan_objects = mmu_shrink_scan, - .seeks = DEFAULT_SEEKS * 10, -}; +static struct shrinker *mmu_shrinker; static void mmu_destroy_caches(void) { @@ -6984,10 +6980,16 @@ int kvm_mmu_vendor_module_init(void) if (percpu_counter_init(&kvm_total_used_mmu_pages, 0, GFP_KERNEL)) goto out; - ret = register_shrinker(&mmu_shrinker, "x86-mmu"); - if (ret) + mmu_shrinker = shrinker_alloc(0, "x86-mmu"); + if (!mmu_shrinker) goto out_shrinker; + mmu_shrinker->count_objects = mmu_shrink_count; + mmu_shrinker->scan_objects = mmu_shrink_scan; + mmu_shrinker->seeks = DEFAULT_SEEKS * 10; + + shrinker_register(mmu_shrinker); + return 0; out_shrinker: @@ -7009,7 +7011,7 @@ void kvm_mmu_vendor_module_exit(void) { mmu_destroy_caches(); percpu_counter_destroy(&kvm_total_used_mmu_pages); - unregister_shrinker(&mmu_shrinker); + shrinker_unregister(mmu_shrinker); } /* From patchwork Mon Jul 24 09:43:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323645 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 88FBBC04FE2 for ; Mon, 24 Jul 2023 09:46:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0BB0A280003; Mon, 24 Jul 2023 05:46:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 06B5E6B0078; Mon, 24 Jul 2023 05:46:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E74F1280003; Mon, 24 Jul 2023 05:46:09 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id DB40D6B0075 for ; Mon, 24 Jul 2023 05:46:09 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id B3F511A0A13 for ; Mon, 24 Jul 2023 09:46:09 +0000 (UTC) X-FDA: 81046024458.25.3F195B6 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) by imf07.hostedemail.com (Postfix) with ESMTP id CB04F40028 for ; Mon, 24 Jul 2023 09:46:07 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=ZITiOrrW; spf=pass (imf07.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.178 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690191967; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=vu9DfqGDIkVtY7CS+mn/8y6VlhAfp+/Q2ofuaCWar5Q=; b=kydD5r8R37wYa+WaM97onkfnJQ7nZ0zaqgdV6rbwVgiEmQjl+eP1zIMF9qoKky0EEGo55f slTMUUDhPEMh3sR/xGs8frIshey0NO2V754tx33JUAEvWisKKJiB85B4oaCeqCXhxlVmjx rRLKm+kPcLRfXcDxtTgbRqsHA/v11Jc= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=ZITiOrrW; spf=pass (imf07.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.178 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690191967; a=rsa-sha256; cv=none; b=kZwf5pCl8uwpHTYRcUK1FP16p1paH8ZcN8of1LyF8pxkCtpk356aEe3boDodcI3Ep0ilpN oYp0ncCMKE524Md4Em6XBojaOF8zwZtRlMUUmxdS3MPjhlbTYotT5fV84skOAsH4lnQ17u 2KIhdDtZ/FhNQJvfH4FF1/PfeHN1wLM= Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-1b867f9198dso8893985ad.0 for ; Mon, 24 Jul 2023 02:46:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690191967; x=1690796767; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=vu9DfqGDIkVtY7CS+mn/8y6VlhAfp+/Q2ofuaCWar5Q=; b=ZITiOrrWh+FheWM3chZFCAM8bc3YrsEgqzfm5Am/axy3dDhyTEHWaCIE6CxJlUheOx RF45EA9aOXE5By7kx/OP7STghpSD/KEB/oF3GrXK+Myxe/+Fwg6k+PP3FURA3cxLYMYy QPmEGcQxgz/g2uZ3I+YFETVsDVpSfeGJ/6AYCWm2OW7IkIAxCPa+wrGdNlr2psYdQiso l4rMdXxvPMn1WtqWv/dfO7wx6DqTx5ztQcgxaNLtyw9DkIVWCy3gu8FnfH++DQ/RAVD5 IA2z6EzP9oeF3tWiBWkf5RokEJVb120E1SPLRv9Xx8rFVupecJKnGVj8I/3khxvVhjBZ QV2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690191967; x=1690796767; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vu9DfqGDIkVtY7CS+mn/8y6VlhAfp+/Q2ofuaCWar5Q=; b=KzKVepcPIxYamXe7OiGyR0lEQ4tuXRmBbu8qPaYrm5aqQrZ/6MvsUbT/k5JfPsose8 DDWedQzPF8+mmII1qZ7uwFvIFou06cJE24poWjvEYnEr7xOKJGUCt4qrQpSuZy69Qi6c 3DpgTJe8hVI++/eLBWHbFuu8mca1z7qf8de0seT+bgNXm0fDhHo8cTMnm8L/XoydGcOm opPgKLob1m2WJIXRPYEhYTz/Y+5BxyH3qMGIHEtVj8hUXljyos7/c6fZ3iAJxuxn5Kum stjZ+aDFE0TelCyFHiie+Ph/IuHCPGNfwE1vPqijfa44G5QDMrqHH4ogCey53JiiC4ls JPqQ== X-Gm-Message-State: ABy/qLYiqXKngarThBs6zXTct41ogpRJFakGdzSykQp8XChFc2qSzSBm R8XFnGIeXkhThVswwJj5z6haiQ== X-Google-Smtp-Source: APBJJlGrsdFKJ71ukJT79kDa1W+M4ztJszdSUa3mf2ArYfnWEb5YwD/wtpSbLXe4wEi7ibAUftTBwg== X-Received: by 2002:a17:902:ecd2:b0:1b8:b4f6:1327 with SMTP id a18-20020a170902ecd200b001b8b4f61327mr12288935plh.6.1690191966684; Mon, 24 Jul 2023 02:46:06 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.45.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:46:06 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 05/47] binder: dynamically allocate the android-binder shrinker Date: Mon, 24 Jul 2023 17:43:12 +0800 Message-Id: <20230724094354.90817-6-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: CB04F40028 X-Rspam-User: X-Stat-Signature: w3z5os5yd947rgnhnnkw8545cxrzz1zi X-Rspamd-Server: rspam01 X-HE-Tag: 1690191967-145429 X-HE-Meta: U2FsdGVkX1+9iH+OoconJlMosRBm0O5rYOM+5kWilHJ5MqA4b6QYBjgq/baIa0y3tEnPFLzeopVQUKyR/uQZjBBDFyZIS6onT9FcMm/CQeJa4vwDwQgt/TQ9Gil85/mZxt+Jbqmr/C85EEpiIokzsG22xMSJ2clkJ3EwQqTyj5lrtO9WtRS1PH/hVpX+EOY9hjc+dcY8TPw41/5eECv2hu3irUJWpwmrxvdB+3rO4oXN3HsXM3RWRLqhx84lZcow+Lu3f8uQ7cSt+khVS4aziTdHpYJLnm77Jxxf/SQOp/2apxKDAriLNwNJEz9UFkD5RTtQipOyHN43mAwNEW0qmmOgXtHEaPrXaYQNNI9UypmpNSEGiVmgKt1kLBi6O2fwrMzfcR34bnHOxW/ariyOF1QyK1rU+ccjlP4VzxxROascFPOXLM/VdQ3jpxY6lQ8xZ6hGXg7x+22N3WOTObRbTyfLIqChXcDmK+ZrSydCcEja7cG0yCGUkJN+CqxQ9xsIzvjHR0Rf1Byq+ABLlncR7asCGE1lpmZnIynbZDVMvscCm8YscqzyNu5n44aUGaguYZAtk8glUX/UPeKPo+7UwfcYW/LXMVP24wYw+oTxG3dUgrdQf9p/XxqitlEItmOKl8JW7q0Q6XPfmoSP88u2ITSqrO8zBB44LicQ0insFosRbmWeWCcScoxbtLkgyBbD02VEdBr4O6nwMUZfbuwuTbPuKhp2Hfr3IIdO4DlJpm+CsBWm1q2BO3gnxr+bKQ9YIqTPC5pB0Qnw9807Cb5ArR/SLs/ho58lJLbv6q+x2LJZoQj8J+cUf23TokaaI18XMsn4fbdPruw2hE14VY/IPgx6xe7Vw/rA/w/U1fq/37pwBh57P9BBN4mR1o2EIr+CNNROXyao4/MI5cyBa+xd7qK4x8oiGna6n+PsFGxcAQ/C0/iS7P/mXa4QLJbN2eVQHQDFBkFAXd0xo+q2kDH JjdOKSf+ q/gxf662r6M/7fwGyEuxCJ+PNnI8Lp7c9AGsFwl08rJc6JAY1wCaTgTsfr6OsBM5iKQUmRg8r5CmYp8jHC2Kd95UnUKlpZcmlKoBJwuuKfSQTz5O2QHE+88dQhytzEWBD6U+GNPcSKWsBpOf7+M1Ejh1/2bV6QhmvZngcuxz7Xl3RavBnbLpSGcteXtItZ/aZgJeHYOjdxU61E4oPg6Z5FI615nBvKzW1CZ2UIRqSP1QRexuHtHU548A+DIWjKhPtbmSsOJZ5rzkcSY15Q1kgOXz8jNYpDnUf0DzFmpoDMqUUIrKVGXSDFCTZg8i4kpAFK8E9HnnZiRA34jBwsI9I58m6gb/No0uFziSxVnejD51bAh/rncaEdje6+B7XbDdpe9Rl8+zi355JGtNA3PETFZctmbh/k6pU1MfA 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: Use new APIs to dynamically allocate the android-binder shrinker. Signed-off-by: Qi Zheng --- drivers/android/binder_alloc.c | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c index e3db8297095a..019981d65e1e 100644 --- a/drivers/android/binder_alloc.c +++ b/drivers/android/binder_alloc.c @@ -1053,11 +1053,7 @@ binder_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) NULL, sc->nr_to_scan); } -static struct shrinker binder_shrinker = { - .count_objects = binder_shrink_count, - .scan_objects = binder_shrink_scan, - .seeks = DEFAULT_SEEKS, -}; +static struct shrinker *binder_shrinker; /** * binder_alloc_init() - called by binder_open() for per-proc initialization @@ -1077,19 +1073,30 @@ void binder_alloc_init(struct binder_alloc *alloc) int binder_alloc_shrinker_init(void) { - int ret = list_lru_init(&binder_alloc_lru); + int ret; - if (ret == 0) { - ret = register_shrinker(&binder_shrinker, "android-binder"); - if (ret) - list_lru_destroy(&binder_alloc_lru); + ret = list_lru_init(&binder_alloc_lru); + if (ret) + return ret; + + binder_shrinker = shrinker_alloc(0, "android-binder"); + if (!binder_shrinker) { + list_lru_destroy(&binder_alloc_lru); + return -ENOMEM; } - return ret; + + binder_shrinker->count_objects = binder_shrink_count; + binder_shrinker->scan_objects = binder_shrink_scan; + binder_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(binder_shrinker); + + return 0; } void binder_alloc_shrinker_exit(void) { - unregister_shrinker(&binder_shrinker); + shrinker_unregister(binder_shrinker); list_lru_destroy(&binder_alloc_lru); } From patchwork Mon Jul 24 09:43:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323646 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 6DFF3C001DF for ; Mon, 24 Jul 2023 09:46:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0BBBF6B0075; Mon, 24 Jul 2023 05:46:22 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 06C7F280004; Mon, 24 Jul 2023 05:46:22 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E7730280001; Mon, 24 Jul 2023 05:46:21 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id DA6C56B0075 for ; Mon, 24 Jul 2023 05:46:21 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id ADB4CB1F8D for ; Mon, 24 Jul 2023 09:46:21 +0000 (UTC) X-FDA: 81046024962.16.95F0AB2 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) by imf29.hostedemail.com (Postfix) with ESMTP id B99D3120025 for ; Mon, 24 Jul 2023 09:46:19 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=dPg8Z+s3; spf=pass (imf29.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690191979; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=YJ34aDXYlHmjcWHNnO8BUtZL0Yf5ZszuCt3/FkcxObI=; b=u6cLOM6b5YQqdSH+PuXIL/9cQRyeBV/+3sbc+abbTEuOIRcRZGqV5Q7ELuXY+TMdP1FHS/ 1X5QdCm4oV8DA2Nm1xhsBtW9+WmjOHAr71dUL23PWy+xO2YxSGgUmoiwJ/4Is356646PyH GUfWFiJDPWR+DDbDDhFVCYaMlPxmni8= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690191979; a=rsa-sha256; cv=none; b=BfxeSFd1Dk2lAqAIdtj5dqMsni7kUHEVyqx84PRnL0sNB4DCOz/cQsKrzeAK3phOELhbV/ +t0ZsELpXiDMW3OAJTxlXIfy66KbNpV/dTweXbuAgPN2IRrO3RBFJzTwlovootH7+iyARS zGIbrs/OszHJJGnUosBtRF4IgyI+0W4= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=dPg8Z+s3; spf=pass (imf29.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-1bb85ed352bso2229795ad.0 for ; Mon, 24 Jul 2023 02:46:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690191978; x=1690796778; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YJ34aDXYlHmjcWHNnO8BUtZL0Yf5ZszuCt3/FkcxObI=; b=dPg8Z+s3aha2IvphpVKs8g7PSY6piop3d9NgPI5ubIDitgffw9A2UJF008ettaOzL2 E1tyNH7CPDs7txXWOfoA23V8TkeR2HnX04I7DoxtzP6sL4XEnTxiiEMAs0kV9Z/otM2W 0kOcjwbHjS6iULnGuX+LKfjLBZnKtzDuWFv8l1d9/Rkqg83rJ36ocDx6bY7GsC2wtJpk Mw6apkZAnLMNttQVQifEE+ksvX6HBpvA7k/G1tddocZPzT2wZK5koTXpHocOk7zUb799 2LPg0QZl2ME3q58o3tQeyyaY1BlYV7m8Ier04lnGoxRFxPK9Wx4EcovR5xvgXGZWDCe6 9eCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690191978; x=1690796778; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YJ34aDXYlHmjcWHNnO8BUtZL0Yf5ZszuCt3/FkcxObI=; b=eQvCqyKHKPVBYqzmo+QexPZDxbZsjnoZ+ZS0lA8FrjQ2XQcNys1iovNhqTL9jmm/6O 9f2QrlUp/NALTeQIesoHu6e+yJyDozY03t3aNm637zPdF+74kw5vR9wWA+94p2igOjZG /TeNVTW1W/dixafL2AvdUUrzvhaO1P5JmebCqxC069FFsLKyfWRYVrQjwpWjXNgwhR2t BzmSXprNMEMhIghW4xFVbcM37WyhmZx0RBHFW4SSPOFEFPvG0QKA6wVUaajUze3nuDW5 jZrKtkKzVpQGXW8V7sFg2ok/sQZRkOJBVYDFk6A08ia1MfYMpN8LMZh1vI8Yyr+dY1/G TRtw== X-Gm-Message-State: ABy/qLa161tr1PoZQd+tVfqPVRwN+lOqLgAcMKVESLI6FVZkpe0BKmu6 YlcXcoWQjVQoaFG6u0zEgn+Ukw== X-Google-Smtp-Source: APBJJlGS+SYk55mAAJOUNGx8fxUIn0OJAQvX8pDu/8/ugt1o28j6t6h3zVeppHUSF07Rw5MgS0vxBA== X-Received: by 2002:a17:902:d484:b0:1b8:a27d:f591 with SMTP id c4-20020a170902d48400b001b8a27df591mr12255719plg.5.1690191978640; Mon, 24 Jul 2023 02:46:18 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.46.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:46:18 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 06/47] drm/ttm: dynamically allocate the drm-ttm_pool shrinker Date: Mon, 24 Jul 2023 17:43:13 +0800 Message-Id: <20230724094354.90817-7-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: B99D3120025 X-Rspam-User: X-Stat-Signature: 4wnyeo95tex6o5ycgpwyjeirunqamgwy X-Rspamd-Server: rspam03 X-HE-Tag: 1690191979-368613 X-HE-Meta: U2FsdGVkX180cl2/vR4dHjpVn82rIms35l8DTgBgoAn328x6wGVydf004s7ZXH4PVJ2M1hmv+g7j6Rgo4ORdaEgNeFh3ECXcyvTp14Eo6AmVRAL3q1xBgnwiXXEJNBRdB5lqqEEdrF7ITN35QhGl61ecT+dCBZyCltqEIWeTzABOUa2ooxBPk8K5+PxeolpgDX/CMr/00M9RMCt1fNnrcd1v5PJTetX7Q4RvKXyMPHOJedowPlENRGhy6Qv6Mlru4zGiZXBhNB2H8MgFQnPzImX4nhscJqXMp7LXK/5Z/sMPdv5JxixvQPWdaDNEOECDjd0qnUHzE3u0jsSoCVoaXYctR7MFOiorT78wJCJLqmD0duU5u5Nq+C1Bnn8OnlZjXLoUqfdBApo5p+29HKJR9idWFPMcu4NMjkkMxntZxFwRk4ryi5J6Tl+7UMSUpeAkawTRTKMOu6FmYg20Xe6BpJvqPW74wiKhakLdswsTBLGOVFhySq1y4i2gMJ9kOpUJ7TClmPadAQI2dfOf3i6ftEzjJV/HoqwOOW1hVgFpswObjpSTMIML7lPl9JEYcbVkHdU32+HO5RGkLl6Abyr80FI5nE/jCfk5NNXvEOPOOhiL9X20MSZADQRQTs0kCVjrgZ53jwHnhrgR17ckcUynthQsJ5wJSvoUAhroD2bgmKKzs84LJ5MUnkgGJSXnGGY7fx5wcrGoQ/eViCfWJV9iEPG3GzaTtRW9zltODnE0wIbufXcCd02GCO2cq9wohANpdnA6OCv0l1fyP/m1+og/3dQfmVjV7Cky7bE85Q2plrPkswdq/nJVBDeHwnUeIs1B3wp9fG7F5beS0kSJbIFKGGqtqudZAERRbXziLhbrCfP79wa70FEcFFQr6I1UidOLoRG5VVC/yTBktN18ga/0hNlNz5exGOmcR0CWZ/6QP0sybzgVvrPCGAy9UJPcZ8Iu+6MYQOEe4YAdSi7jjE0 1sJyT8n7 7zHGBz23SMYc7DKpsjtxJ3N7HUaVCBPypc/+cQXc41xov8SHvH0xI/hM/wgCPm/GYLOReLJH3nlVRtUGRnmXG+iBBkZ8dMjRKzxlOcMhSLnLsOrkqHua6tYhm8D27zEnaK0u2Ku72RHCUC4YhDQRA4AQUn6hHU3Jt0n4Nt6UCKLU1O+EhT0kGBLaNmtdVRBKonBzN3T8Ejt0Vz+l0ZVIkKPH92dL/NGg7dXYVZZYLKlZ9LLkGW5ylOSzFHOgClIr/Avk7wV9t1zV8NfLoLrPZyomFcttArvz9D6v6LSdcgVrlPSUe+tf3oGE6KxEH4osyeqNevFmhosIxKVXtvor8fOEyKirS6acZWIWt9g8FwN86O9tq2gsFoFzQn53SRwSM4TJgQuOXJdCKCs6rlxOlYiZY2lIKviI0yE9WQ+xHdNYxV/0PADNVDG/PP/IwMT7xvJLYsNvaJ3Jcfw3ER2sGFDGgNw== 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: Use new APIs to dynamically allocate the drm-ttm_pool shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/gpu/drm/ttm/ttm_pool.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.c index cddb9151d20f..e1eb73d0b72a 100644 --- a/drivers/gpu/drm/ttm/ttm_pool.c +++ b/drivers/gpu/drm/ttm/ttm_pool.c @@ -73,7 +73,7 @@ static struct ttm_pool_type global_dma32_uncached[MAX_ORDER + 1]; static spinlock_t shrinker_lock; static struct list_head shrinker_list; -static struct shrinker mm_shrinker; +static struct shrinker *mm_shrinker; /* Allocate pages of size 1 << order with the given gfp_flags */ static struct page *ttm_pool_alloc_page(struct ttm_pool *pool, gfp_t gfp_flags, @@ -734,8 +734,8 @@ static int ttm_pool_debugfs_shrink_show(struct seq_file *m, void *data) struct shrink_control sc = { .gfp_mask = GFP_NOFS }; fs_reclaim_acquire(GFP_KERNEL); - seq_printf(m, "%lu/%lu\n", ttm_pool_shrinker_count(&mm_shrinker, &sc), - ttm_pool_shrinker_scan(&mm_shrinker, &sc)); + seq_printf(m, "%lu/%lu\n", ttm_pool_shrinker_count(mm_shrinker, &sc), + ttm_pool_shrinker_scan(mm_shrinker, &sc)); fs_reclaim_release(GFP_KERNEL); return 0; @@ -779,10 +779,17 @@ int ttm_pool_mgr_init(unsigned long num_pages) &ttm_pool_debugfs_shrink_fops); #endif - mm_shrinker.count_objects = ttm_pool_shrinker_count; - mm_shrinker.scan_objects = ttm_pool_shrinker_scan; - mm_shrinker.seeks = 1; - return register_shrinker(&mm_shrinker, "drm-ttm_pool"); + mm_shrinker = shrinker_alloc(0, "drm-ttm_pool"); + if (!mm_shrinker) + return -ENOMEM; + + mm_shrinker->count_objects = ttm_pool_shrinker_count; + mm_shrinker->scan_objects = ttm_pool_shrinker_scan; + mm_shrinker->seeks = 1; + + shrinker_register(mm_shrinker); + + return 0; } /** @@ -802,6 +809,6 @@ void ttm_pool_mgr_fini(void) ttm_pool_type_fini(&global_dma32_uncached[i]); } - unregister_shrinker(&mm_shrinker); + shrinker_unregister(mm_shrinker); WARN_ON(!list_empty(&shrinker_list)); } From patchwork Mon Jul 24 09:43:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323647 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 5C817C0015E for ; Mon, 24 Jul 2023 09:46:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F3C00900003; Mon, 24 Jul 2023 05:46:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EEC116B007B; Mon, 24 Jul 2023 05:46:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DB298900003; Mon, 24 Jul 2023 05:46:33 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id CC5016B0078 for ; Mon, 24 Jul 2023 05:46:33 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 9BD51160A15 for ; Mon, 24 Jul 2023 09:46:33 +0000 (UTC) X-FDA: 81046025466.03.FAA7FCA Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) by imf19.hostedemail.com (Postfix) with ESMTP id B61481A0016 for ; Mon, 24 Jul 2023 09:46:31 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=I+UdRoo7; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf19.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.180 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690191991; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=TtWMuwNQICElQwN/uI+F3WL3CTikAs+Dtp5goHq/uX4=; b=xqORlOEeTCvmxb0F1y/YvEjw3nC+4J2wqIQkAaHzgE9c2jvunf5oxW/IoYsrBHW4RDb9Gz 4MXfIAU6PULxfOpdu/S+euG3jNAsES4QwEnqDrBGuGXAchlbu347JmDnZsr0hrU9Qegs7p AbXsWhRye9oor1lB3TGGrs9IkhVQ4Ls= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=I+UdRoo7; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf19.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.180 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690191991; a=rsa-sha256; cv=none; b=3a0ToX/9kFThlZVW424ma5a/yN+/a3KTMIqea530kNpEk0CKySkxU9MERrDDhGSb2NOs+g HEFSnnX9OptqybjAKDGCKGIIXtUO7n1wOBADhPaL5lEXeaL5GKW5XVlD3T+tcZeECj1tY+ aoU9+Ds8xDejgIsf3y+pCY7NiShETjY= Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-1b8c364ad3bso8856895ad.1 for ; Mon, 24 Jul 2023 02:46:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690191990; x=1690796790; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=TtWMuwNQICElQwN/uI+F3WL3CTikAs+Dtp5goHq/uX4=; b=I+UdRoo7PtFa/HFb9ptM84BLJk51Oz8G0P2vA9d94Wc/XjfftjzLyxRBwA01anb/sX 9mresCrzzrrBEvcw02T2JRUzwmE2N5g0vsbRd5C+EoXN25pNGYeZ6g16/FMxa3H5VNDH 6ji0rzPXwUbXzJbwXvPiq1FHNNE8ocU8HPGADHiXDhNHZabYES9ASLXofIUnLzuIXCW+ kwLOx4qHBhz6RtbAZxDD88fTSzK7LENJJOn1r+bRhOQmNpcKYfm1Yk1Egb7OAZu9liNf 8Q2C/an05GdrxKmh9WrMTyMLOPzFeZw3WZtFR0oz9alHcEF4Djwn7mAV20C2gc5TCLWm V2MQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690191990; x=1690796790; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TtWMuwNQICElQwN/uI+F3WL3CTikAs+Dtp5goHq/uX4=; b=TBVoXAcSoYFqfjrNMOwCK2darun0uUmvPrlVF7edO9p1z39KDUwTtosnKKO7oXSote HmL65dXer2raDgUZ3kmNeE5S+RdqnpquK9MHvcHWdo2JWmBZ4W4HlaGGp4bvYVbsYqYK eZkcTPJ/XQ9UqACCuxt5yP3J2tm73YTn5SMsHhwQnlfJmrCBtvuEmcGUl/CyiG/U460E vEohMEg/8OCgP5ANRV6Z93BzmfODqmnXl1LxxhdXl5dDaxLtHHbHKAOTPg6VamXxLdZp TlApgAh+3q/9jLyzWJYY440n4HZtX7DMSfoAoMhwULeYfJknJ0G2wO43Ufw3YnVW/m4B ElhA== X-Gm-Message-State: ABy/qLbSKLjVecEbSbi5C4bsjNPKghKf5OZj22WjybIZHcV9OLhnXgG2 Rs3nY3HR4I3ZaHkpj/lpc1J2OQ== X-Google-Smtp-Source: APBJJlE4z/oQr/nYJvsLLx4ZH1UH5CYL5idBHg9QqjGajgFE/t5dphI4tPFsRKn6N/RjSu5tdTiopA== X-Received: by 2002:a17:902:ecd2:b0:1b8:b4f6:1327 with SMTP id a18-20020a170902ecd200b001b8b4f61327mr12289687plh.6.1690191990533; Mon, 24 Jul 2023 02:46:30 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.46.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:46:30 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 07/47] xenbus/backend: dynamically allocate the xen-backend shrinker Date: Mon, 24 Jul 2023 17:43:14 +0800 Message-Id: <20230724094354.90817-8-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: B61481A0016 X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: k799dbjei69tw5hngxbakgwhmxej6ffd X-HE-Tag: 1690191991-653087 X-HE-Meta: U2FsdGVkX1/3C2QCNBDVCebtzimPVTfPVdOnDMnzq/9BwTBk4wMxaGk+xrgaLqLQB1fb0Zog6p+9SD93uWYSa8qjnPRS0/fjdbx0AY+mlDQ/9XSXxDP0IGZKl4Z3103vcmfAyelHmDFVQ2ZpSqora2VPXhTgJvZuo3nnQYSNuj2bQm/rfDsqFUPsKky0c1nsSTA/73Nnn7G+rFqSz3Gqa6oIGZsChh3/ByREJZhsbmiDYaZ08nWRW7T1KuHKWuCx+JnQjb4nMebjLVZquMNiCVK1zZCCW+ESClNI3sLvOX66AQ91rQvHtr2jR2lMKqmN9JOdXPO9ApJZuhiNGriqEi+5t2YyaYvjcJnQgWx2GIU+k1ytKJzAqDuCGE6OacUlTaDbG1vW9r5/S+rRW7k7zpr/PiquPxfEy0EGpNW8wEU2h0HFwbSphv6RfLQmXRGi4OACNg/Vs5B8df3eEC2QyEYtWU6A1YVDSM0FWJsSRNEHhepU2vNjSFfG+sph22oI+Dc/Yd1qWvrO8B51s3CQDB2AixfGoFHUiZ7Hr1hFPeKJNhkOY6gAmWQkVVNQ03rgdzc1dB6Hmrp0S9BJLXnKwvL+M9S136i0cpZNjdW1jFQXD24BOOGYzUppz9biR6EXM+A22L4AOp/Ej+d/PN5z2+O3R1lNculUfJEn6Y45rtBlRSdqTG86fI/YBt4SzJNwluqZuTSZGkfsGa4JxCDXlBjQ8f5fiCiwwd/ev7toRuaHzG3CorM4GEqgbQPqIGvI43nas15c1YA6NJedm97om6IfBStCVshs2ts91NaUS61tync/nqzlw8HR+6D+cmD+bBDBFQeC5lLJSJd+JV0Jie4qvGEmDTDkLDzbHxjJ/A4M12KGvucZSeVVT/5ya5N1+SZlDh3DiIC+XmeskTJ8Qcx8ImlFKhbwXNN0G4WpynEdBjCxv3ZvYxZXo+yUSuXau2v655uhQZRXStbfn4v jQ9KYt6i FeWPTmDg96r4DvjWO21fD+KnO7YCngZHcQbvMwgsJDAxhBbclug/lsMGaJ/9v8qD7WPdvaG18f7vEYrwOe2khGUkPo37+CFriLrEO1rbigwGq+l2avmgqlxFReco45T82lMxVtLKih5iGxihLJKPt7kIiO3+roO6tlHx9iAUg7s2ShrEdv3eX7XlVu52zOQDmTUrJ2Xwi3lgXh1u5cFXJBUBjENprypxU9E2uRM4OGOJ482ybxxg0MFczZj32oG+tw1Pnm+B7JBLRoie2z8pErvHpPQpjfR6VQP26GsooYwviztDfjBJ+CkYbeNfrwxC40PXtxIcPPAfPV2eXlrTwOqHvvImzjMvH/u4VgC8z0DiXZHUSizoW+X6l8rHuaFMORDUVECKhpjnApdXnc7yMu6yqOxfQqBegNWEd 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: Use new APIs to dynamically allocate the xen-backend shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/xen/xenbus/xenbus_probe_backend.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/xen/xenbus/xenbus_probe_backend.c b/drivers/xen/xenbus/xenbus_probe_backend.c index da96c260e26b..b4c3cf27af30 100644 --- a/drivers/xen/xenbus/xenbus_probe_backend.c +++ b/drivers/xen/xenbus/xenbus_probe_backend.c @@ -284,10 +284,7 @@ static unsigned long backend_shrink_memory_count(struct shrinker *shrinker, return 0; } -static struct shrinker backend_memory_shrinker = { - .count_objects = backend_shrink_memory_count, - .seeks = DEFAULT_SEEKS, -}; +static struct shrinker *backend_memory_shrinker; static int __init xenbus_probe_backend_init(void) { @@ -305,8 +302,16 @@ static int __init xenbus_probe_backend_init(void) register_xenstore_notifier(&xenstore_notifier); - if (register_shrinker(&backend_memory_shrinker, "xen-backend")) - pr_warn("shrinker registration failed\n"); + backend_memory_shrinker = shrinker_alloc(0, "xen-backend"); + if (!backend_memory_shrinker) { + pr_warn("shrinker allocation failed\n"); + return 0; + } + + backend_memory_shrinker->count_objects = backend_shrink_memory_count; + backend_memory_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(backend_memory_shrinker); return 0; } From patchwork Mon Jul 24 09:43:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323648 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 39624C001DF for ; Mon, 24 Jul 2023 09:46:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B4355900005; Mon, 24 Jul 2023 05:46:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AF32D900004; Mon, 24 Jul 2023 05:46:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 993EF900005; Mon, 24 Jul 2023 05:46:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 8B7D8900004 for ; Mon, 24 Jul 2023 05:46:45 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 68FAD1A0A13 for ; Mon, 24 Jul 2023 09:46:45 +0000 (UTC) X-FDA: 81046025970.25.DB2C024 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) by imf09.hostedemail.com (Postfix) with ESMTP id 8E0EE14000C for ; Mon, 24 Jul 2023 09:46:43 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=JQ+VYszN; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf09.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.174 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192003; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=4zTxasxXedNYwr5HiD+ktCpinG7wwpmHx5iR9IBn5EM=; b=svK72ik/26TMqWcqsUH8Aks0+EUAGYJgXVpO6CxGgiyvFwQpxplbH9F03mNbJczPHRPxS0 C21cVYxdbL1PhpDkGx7HkJZkRRM19CzW5Atk7HtYhqKV/HNECx3Tji4IdtBJAK9Jppzk87 VnqoOTZEi4Xtau0OhwDqVMGPBdCgPlg= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=JQ+VYszN; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf09.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.174 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192003; a=rsa-sha256; cv=none; b=01b30FEQCEgyiWbkDQxjqr73gYg/GQofkGG2yu4waHgDJlRiiZ4PunF0y7G0zbqosFJKth GC3Vxm58gQNMfHr3nktFK8tGRKWLO9Y4UnGF+13yDnPuR6GrUV4g3f0QThyWVZ1SDlFO6l jmYUXbsMj9+efSUVJEH/VEgKzA1RIpQ= Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-1bba9539a23so640925ad.1 for ; Mon, 24 Jul 2023 02:46:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192002; x=1690796802; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4zTxasxXedNYwr5HiD+ktCpinG7wwpmHx5iR9IBn5EM=; b=JQ+VYszNneWq9LnVTeEUNZ2bA9JmZI8LOFjK9svc9H4hl8hRyG271LpHarvUCKIyZI 5Vn1CBHP/6AH5rHqtPGE6/hWSk0SIy6RYK161aZhDGhYtCkOSsB2o0ayijs8INBvePS+ ybYmPnwAbLpRLtFyM0o4EOx/Hrne48NbEWwKs3diUJ/coEGr8/xoETACnBW25DeyyWC2 ybnkMyVu7T3nx0cFgEz9x8FtixitWLVj99q7wd/aAYhgB/uAk5tIASLlagkcZ5eA/CFb vVvRndH0r/gASWIjyvLt8jh52cZF67TvvoceATQn3UiM+oNvT8rjkWmY1oM8XcntVr02 2LrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192002; x=1690796802; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4zTxasxXedNYwr5HiD+ktCpinG7wwpmHx5iR9IBn5EM=; b=aZyZ+D+VhqVIqM69pFPhiqCOamllgS3fswYS4nEB8zRwpxOZndIIb2RhppM3V4KmX9 46L0bxPreGEvknGEaRzPCjYDaK4K7k/r5DdsfByDgsSOeioHxGpxB+iXxBvn7A33kLJN is87tgM2W1jiXQl3/F/9MqJZg3VTpPKmBZ78YKiB9Oqip60TfsnpmSZPeiwyirjq5S1Z /v0PhxzgmTTIA2OhjIK1Q/asIvBFb4FMiiHKXgT3Orqs/AqpmdhnddYv4rPCF9snDyAk zzwC3+k451TIPoAInwiozPlKn0dymlUjXfcNl8rNIMfrBbyBkDMiIDfeYdNMArnjBBTK O5Lw== X-Gm-Message-State: ABy/qLbbHJU+m/Jr7q2HrTV9+IPKfz4nLc5zPTmgBwKf/2iXsI0RTlWF nxhwzy7n4W1W0ihRT90HoyKR9w== X-Google-Smtp-Source: APBJJlEIhnQwoFDHuweIAHt2tJcWGI0d+r3I5wbhweuAT0TQly4d+VEILSYdnjVlMqhcbUSPWrZO+w== X-Received: by 2002:a17:903:41c9:b0:1b8:17e8:547e with SMTP id u9-20020a17090341c900b001b817e8547emr12196517ple.1.1690192002389; Mon, 24 Jul 2023 02:46:42 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.46.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:46:42 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 08/47] erofs: dynamically allocate the erofs-shrinker Date: Mon, 24 Jul 2023 17:43:15 +0800 Message-Id: <20230724094354.90817-9-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 8E0EE14000C X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: rcag35y3xzpw8zyetdfdeyu3b4py346x X-HE-Tag: 1690192003-385328 X-HE-Meta: U2FsdGVkX18bVyHkeUnSSnzUmYWUzrE7fuhGW3015TUsaAudAnN35y4NF2l3ZcdmvLToY7+j8vquXkDUsumjGgxkuFql97xwrSn8YWCse0n+bq5lHsWWVVVd4esu+F7/K2AuD16faodDaXN9cCUttRiVYZS1koyQ+QVThoBF/vACxBEmjNWSV+afdjflUOfY8q/zKIJbE0fFbX3pAss+Ow2p588vKS0VxntUcr1m4yjxGhnADFkauDcEXkLm7/Ctk8+IcCDsTSPb8b0spiScnICQ6gKx9T35urzT3OSYLsGUO63rGBxe0dyRX8nUG9WG+ynU+ErgmFce44E/a4V//tyqgMB9SSsgES5+008vuNid3AxKCI+0VXZeInqIp2hpz2zN/7cRRLLrZC2tzk+p1Oha/bOmX2P8oTztNR+vLLsO7hRWI6q9cbNjSNeGQ6WG5VJ3/j39Dd5B9FM8DcMiUrsfpb2TljKrjz3C889I92NrwHcIsxPqI6WlN2TAM7aP671wgsO2sDpxcqJxmqVnFe47pLQt1K5nEGs4p9U2hO1J6Bx+X3YwLjmPM8LRkgiPWamQUrATd8RpIUO5aJfTelqlqXNt1R8BAD15wWgnzZMUrAKFrYnCQ3NlFh8yldzKsYLKdBVfaQ+FEh6V48a6174iqk/jklymQHMjIPdu9nRd4mBT2o1wpicz6KYmho+79qvSLZp+Uq+rm4UcF+zT4BXqcT19zpNlpJefdfAQQHjP9lYvZgREcBrZuhswTlLeKK7GuX/uNgw37cG3qJz+mlpwEOh2UriIdXHvyS9yFNc/gBN9xdLl+zOhjouKH5IzjGTaEXDswJcH47qdSNfIGTJqP32Rzv07JAjsIX6EGG8PmLZnG2J/X0V+ILBwcEM6AM+4qO2y8g0uXqqFuZKMGnX5Yp9qUvc1YGiP9O1Cx/NePzW6soVdQ5OYjj6rG/SFTC9ghy3stuDM1MnBB6C Vr1Urcek KN4P2zEi+G2aA1ksfDp7O7gS43ZsaCPWJkHC4719CkPtA0MfT/Je9pP2Z9NV5NuNWeZWiFKm8bh6uYaXohokV6UZqXLFZYEh1MtBJj11uBP5eMOaXoXe24x+Ltr9y9Cv8/RoOCZXlHxSZiFdn+Y7iqI5E2vS0sYZSD01jyVN/aKc1ji5UMEsV7F5JXocLwRGzPN7v4reow7Kk6Cx4qkQY9lDVZ7H8RPhguWXYBfwgIE2LtEUvbXJXYYDLossEhv9fTfFOZNNrjUmhAHI4KYlJp+DtW/qpv9w3BMkDmy17heGOvxTi4Ia3lkILQKS7QsjI3CxoO3VMQ5qs1fku97ob9qp/5o9O21NVYuveaQYZlztY0mcLVvviztS7JT3qikaMcy61w0cXwxwfTxce254VJGA4Ije5E3lkfQDS 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: Use new APIs to dynamically allocate the erofs-shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/erofs/utils.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/fs/erofs/utils.c b/fs/erofs/utils.c index cc6fb9e98899..389de06e1065 100644 --- a/fs/erofs/utils.c +++ b/fs/erofs/utils.c @@ -270,19 +270,25 @@ static unsigned long erofs_shrink_scan(struct shrinker *shrink, return freed; } -static struct shrinker erofs_shrinker_info = { - .scan_objects = erofs_shrink_scan, - .count_objects = erofs_shrink_count, - .seeks = DEFAULT_SEEKS, -}; +static struct shrinker *erofs_shrinker_info; int __init erofs_init_shrinker(void) { - return register_shrinker(&erofs_shrinker_info, "erofs-shrinker"); + erofs_shrinker_info = shrinker_alloc(0, "erofs-shrinker"); + if (!erofs_shrinker_info) + return -ENOMEM; + + erofs_shrinker_info->count_objects = erofs_shrink_count; + erofs_shrinker_info->scan_objects = erofs_shrink_scan; + erofs_shrinker_info->seeks = DEFAULT_SEEKS; + + shrinker_register(erofs_shrinker_info); + + return 0; } void erofs_exit_shrinker(void) { - unregister_shrinker(&erofs_shrinker_info); + shrinker_unregister(erofs_shrinker_info); } #endif /* !CONFIG_EROFS_FS_ZIP */ From patchwork Mon Jul 24 09:43:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323649 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 E7A5DC41513 for ; Mon, 24 Jul 2023 09:46:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8849B280001; Mon, 24 Jul 2023 05:46:58 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 83395900004; Mon, 24 Jul 2023 05:46:58 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6FBA0280001; Mon, 24 Jul 2023 05:46:58 -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 5E648900004 for ; Mon, 24 Jul 2023 05:46:58 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 245441A0A18 for ; Mon, 24 Jul 2023 09:46:58 +0000 (UTC) X-FDA: 81046026516.19.5E84D30 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) by imf12.hostedemail.com (Postfix) with ESMTP id 41C7440015 for ; Mon, 24 Jul 2023 09:46:55 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=a7lFhyKp; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf12.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.174 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192016; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=hKcV3vb4MClJJQ+mNTta07ndMYtKKP0SAkTwCVeOX0w=; b=qD+GUSfZqiSTcN+8IgRRl7HcQoqn6TV9br83CgYn54uqL1RDg70B0ZDzF4uTVSf4AS3FD7 ofHQPjobkpGiX6TIxJ+Ks+zLfIJ6of2BjAyJT4s81fnUkiFIFIzpALfYS5O36bC0J/sZ2l 49XzJh8uhfuDuM3nDr3sGiMi1JweyhQ= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=a7lFhyKp; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf12.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.174 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192016; a=rsa-sha256; cv=none; b=gUpr1f5LOsqTYZxx7cJtPxx76hOZjCzgqAG2SlrsnPHe6c8cuw4k4aS2EA5dex038OzXt/ VtOu2e0tA6XnsegHHJtjbSvqdMxN6lbax0b/Kc0RRdOIEWQW0SUPvZWkeYv0DJgE6NtRRp w5QIis8FQkZlIod9oPZwvfiQHuiWVLg= Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-1b867f9198dso8895255ad.0 for ; Mon, 24 Jul 2023 02:46:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192015; x=1690796815; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hKcV3vb4MClJJQ+mNTta07ndMYtKKP0SAkTwCVeOX0w=; b=a7lFhyKpvN91nijv1nVs3JeaaLMDFPSuaWY4NCEQD9DCJQdlhcmwFlvKgxp6H5QA07 3dkX4W4M1txISO3DSWoCDCRM1ysYCDf7oPJVOFGCIfe+DlrmZLhiur4I07AdWC0aW3Dw CVnibojO6zdjwPP037s+ZGzHTbYwQp1TRk5IbZ0gf2icMTq1nF1E5wJ/BtOX4xZvFUp0 NkBwNV73kgVtBd1NdtpFu3djSHL7HyBXhuBz5mRGNaBtssuegwQh/61PWGRXQCMhsibP +eC6XYGvARqk02NWbIzA2EZWiSinAW1FFs+vgwRWCCseEycqYRnDfiCLO/I65f90R1Q3 zmCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192015; x=1690796815; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hKcV3vb4MClJJQ+mNTta07ndMYtKKP0SAkTwCVeOX0w=; b=lxFb9AcypRBVtYKLjVpVSNbnSxiCh9halLFq/nJysDEpNoeSkuAUIUlS//TxSdk8nI IatJjbXnOg/8bhNcFcYFIh2lOfW27FiJ5ZpoiYE+kouiJJoL6cRy73+g3o15dZKbu5xH L84vQgWp45g3iqOFFAW9aLxg+c47RmpmtR0kXrAEIz/rkHNcFXE4s08d07UhuFhB+MN8 aMv0rC93sW1h+xt5jt8Xh0PVFeRgYTGRVna7HMG2bRzxMKgriNrbPUUsWZ0RT821Npkw jLi45kZMa/CmeOf7Xgds1lhccmlIFKKDbsXGUB8HXBkVQf5UBkOUwJAMCHvpoIzGC8lH ikEQ== X-Gm-Message-State: ABy/qLYajmSU751xGfGa8Hxw4qrYo4Q3jlWzb94hr1t3onzOCvxu5LV7 8/qKDjqMwR2E2OYgZGLcs/IkiQ== X-Google-Smtp-Source: APBJJlFJGAUudAfwbE4FzEeIId9jY33sdTrNWRyhFQwrzl0Tx9fNVh9CNxBzY73cH6rP3yfMJCnueA== X-Received: by 2002:a17:902:dace:b0:1b8:811:b079 with SMTP id q14-20020a170902dace00b001b80811b079mr12305026plx.0.1690192015077; Mon, 24 Jul 2023 02:46:55 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.46.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:46:54 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 09/47] f2fs: dynamically allocate the f2fs-shrinker Date: Mon, 24 Jul 2023 17:43:16 +0800 Message-Id: <20230724094354.90817-10-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 41C7440015 X-Stat-Signature: opjxicdpixrgitayba7mcmkwjimfhxjt X-HE-Tag: 1690192015-392750 X-HE-Meta: U2FsdGVkX1+jKdtU1sNuIlURGgR4I4KD1zlVaos3N5oo8AOv1LxvI6N4dmSWe0UPZDgxKOMuFyHws+m5oI7diWv283LbWATLKgitaG4PbJlCjlL7FQw4P1QqpzaZNDdvJ6SjcEfKyqnpdV99nwtCaRao8MMj3sr4sUl1tb4jmhcgnNzDTkH3QORYQuWf23e1sXAnvFfMLeSI/kGd9mXsLuUcrIDt8291NCU58gLqw1pZsjwX6IpZrnLG8Hez+XYOVIBJ9AqTVwJfR6UyfYphfgyTgmiXIdIB2UCexT5xPgWW4wOEGUaamXwp/mUwn6xnCRpIurgh6W7uK4CLn7HDFhwb9Zx8tHhZyBEQ3yCJP0poYj71eCrn61uQHjZgciaKZ7BPH6LvsbKeJ4lsibGDOZPyPLUDbJtiSKc7kdx6o9Dwvp7yXg77vsrZq0r1L33cSuBreQvV+0XbNpORY3Nhq5XUmhQt/CvqgjyWryGBbdT0SQmnp07KGjU0vQFh3t1/skmxlvsIGcVLAIT03g645OSmMOO+r14RMjvVDdZFDfWZVeDfPIbfWTnwdImAreaBxC9Rv9EMARubJLEiYK/3B+mfUlowapypVgUql2h+JdgJR98/BsWVmwwdATGJT8bsbSfbthrkTtnvsDuo4O9k1DwZYzY2v0avsymH/AIS0sGv3H0jrjuLUSc4pX9zdR/xii4KMTJ0hsY9RTQM4p2YBM/jE/hv14VLdr5k1utGBhnnSjFOrSWE7dNORhjDb2Ink3AUtscSrEYG/vvqmhE1DOB08Gub1je30mlWua1FiHz7MCAc5rWxAMWzbfC52gxN63qYoDl56H1Vns2IaDYLd8Not1txzm8Hh7oDhefrAzfpbTMfSVDMYJGFmLxDOhyBVaSct3E3z3nwzt61zUu+hflc/CIzpDPRB3CCbmH6bIqaQgwFYZyO7EdBjPhPzlgGGq9c9XzmqDF4HnrM/ZB lEp+8fsA V1q1UNIA02NpYrOg1CCzzSZNiucJiDIR3ahxTtYf9wM2wRFO95eY40XYmVYNeCabq9u/C7jyfKwDEOOIoRNUaUN3N0lG6Z3CXonLQ61/K2NPkwSxUpwMegk1WA8RsJEGdrINP3cTDrbNlBvpw54RaQevE01SmpbT+5RkZGq1iPPgc4pP8mfKz991IwZf/G7T4p6e7tJ0sZPwltUTMbS+83lMTMPE/TDaBiBoBuoZuOBgt66sZI2vTcZnUHAtaSdTdafsJ6Wbg02TF5TD19riZvu5NBuQ2D9DBNkl4M5ngIHAITmDJmgfHxR03TFyY+X50f1Vj5kxvXZLbZ47eSXB5UCF344Y5sNHqmk3yXCORFbnuYoyDzUXvDzGJYoqe4AhVJPaQ5a5KM8AqhRSMC6gWpzEPqgolEYBm+hCD 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: Use new APIs to dynamically allocate the f2fs-shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/f2fs/super.c | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c index ca31163da00a..8b08473db358 100644 --- a/fs/f2fs/super.c +++ b/fs/f2fs/super.c @@ -83,11 +83,27 @@ void f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned int rate, #endif /* f2fs-wide shrinker description */ -static struct shrinker f2fs_shrinker_info = { - .scan_objects = f2fs_shrink_scan, - .count_objects = f2fs_shrink_count, - .seeks = DEFAULT_SEEKS, -}; +static struct shrinker *f2fs_shrinker_info; + +static int f2fs_init_shrinker(void) +{ + f2fs_shrinker_info = shrinker_alloc(0, "f2fs-shrinker"); + if (!f2fs_shrinker_info) + return -ENOMEM; + + f2fs_shrinker_info->count_objects = f2fs_shrink_count; + f2fs_shrinker_info->scan_objects = f2fs_shrink_scan; + f2fs_shrinker_info->seeks = DEFAULT_SEEKS; + + shrinker_register(f2fs_shrinker_info); + + return 0; +} + +static void f2fs_exit_shrinker(void) +{ + shrinker_unregister(f2fs_shrinker_info); +} enum { Opt_gc_background, @@ -4941,7 +4957,7 @@ static int __init init_f2fs_fs(void) err = f2fs_init_sysfs(); if (err) goto free_garbage_collection_cache; - err = register_shrinker(&f2fs_shrinker_info, "f2fs-shrinker"); + err = f2fs_init_shrinker(); if (err) goto free_sysfs; err = register_filesystem(&f2fs_fs_type); @@ -4986,7 +5002,7 @@ static int __init init_f2fs_fs(void) f2fs_destroy_root_stats(); unregister_filesystem(&f2fs_fs_type); free_shrinker: - unregister_shrinker(&f2fs_shrinker_info); + f2fs_exit_shrinker(); free_sysfs: f2fs_exit_sysfs(); free_garbage_collection_cache: @@ -5018,7 +5034,7 @@ static void __exit exit_f2fs_fs(void) f2fs_destroy_post_read_processing(); f2fs_destroy_root_stats(); unregister_filesystem(&f2fs_fs_type); - unregister_shrinker(&f2fs_shrinker_info); + f2fs_exit_shrinker(); f2fs_exit_sysfs(); f2fs_destroy_garbage_collection_cache(); f2fs_destroy_extent_cache(); From patchwork Mon Jul 24 09:43:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323745 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 80175C001DF for ; Mon, 24 Jul 2023 09:47:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 21B5E280002; Mon, 24 Jul 2023 05:47:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1CB3F900004; Mon, 24 Jul 2023 05:47:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 09436280002; Mon, 24 Jul 2023 05:47:10 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id EECA1900004 for ; Mon, 24 Jul 2023 05:47:09 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id C79C7B1FF0 for ; Mon, 24 Jul 2023 09:47:09 +0000 (UTC) X-FDA: 81046026978.20.4952E0E Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) by imf28.hostedemail.com (Postfix) with ESMTP id 0BD41C0006 for ; Mon, 24 Jul 2023 09:47:07 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Mkbkj7G5; spf=pass (imf28.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.178 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192028; a=rsa-sha256; cv=none; b=omEXA3j0AW5oLHKrjLMqpElD084Sg8ZJwc5LYQRFJzIg+yToUX0eUfmfxLR7Ciq77Mm0Gt gJ83YeBCFRUiM3ndak7xG9iydmr8MFfQJ/3WtfJdbY5mhTYfDP19ggCDJTwNtF5FGdFdtn ZYxT2b0v3eFk09t3V6A+R23NkY1iHhU= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Mkbkj7G5; spf=pass (imf28.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.178 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192028; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=cYIc2pFR4p2fEyppjqJhI12Ags43zx4+1Vguh7yPn/A=; b=8SLcmcrKjKDt2Lh+3p+GdKfnstyq+Z+vyeMomXaa9W2iITtOAEJTU35slgywuxspSPRTlx b/sCdYkv2n/XPKr2EU4ZGqL5sl2HF77HIVxlRESRaw3gKk5uQU5qXH++Pt6HlV021AaI6y YrfGpOUh53zX2/IRm8RqeDt32rmQ3fs= Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-1bb91c20602so2227315ad.0 for ; Mon, 24 Jul 2023 02:47:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192027; x=1690796827; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=cYIc2pFR4p2fEyppjqJhI12Ags43zx4+1Vguh7yPn/A=; b=Mkbkj7G5CQEOG8iOHz5MrSjilpa0Roglbh/CftNIU9Jg3xNX1k/Xj43vnR/S/54ttk C3FfMc3SnotTmowd/+id3GM38yUMYBJBhTZIBUulrrZgzYrxT+SQHGW3axYXz1Mzi2fV AsX/jIuEEGTsEz+JOjVZRdbKq3nZcbngqtBBtuQhz8//b37rxmcNc4kjft3yYQbvP1Zj 84eZDPKog/+vrWIKUYa0yatWxoPJwzUv5rccQj+Dyx2lWBxO8FM5qLWfEajMcNN5ZG2/ nBaypiLs1PufNQuHjnIpPNYd5QiB7rev3NHLgSVLNHqyhO1fbeGyfmflk+kru7Y0DPcw GDkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192027; x=1690796827; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cYIc2pFR4p2fEyppjqJhI12Ags43zx4+1Vguh7yPn/A=; b=geE166ON9eT2Yl1f2kex8wVpYQgEFclwbJwEOMYqPDysF7YbahXIDqTnnT4sbClWPF vkeQWeFYAfVz8hHSe2wY68gsExtmbkmlrbcAAb2X2iOYvlGXmUkcYnhieHAOkisvayJ5 a+Dd4JVFC5sVgASj++7EwM5cJMxFgio9CRCObOfkyPeg+h68upIoXClvWtyPbQvGHZ65 JZDvwopPbnzWoZepOQvRu2dcIwVA9xOa0dLVLrYgW7mTA3/KSwIn1ZzLlgMNOkDAKpWE AevTxsIWa7D+6j367lMLGYh7WrvCd4Kiluu9pOL/ZYcMgRqjRH7f8YHWXvTi0/3qMo+4 dLjQ== X-Gm-Message-State: ABy/qLY+OI1Srn/kKHJ4QafeDLCyFSJg/BRU0eWtYyrt8rsVcA0mAi6Q dJv2pin9R0757FvUSg3UdH+skw== X-Google-Smtp-Source: APBJJlE71N8j7jMrL1FzeS7v4yJrry2TgN0JWUZm9wk55uK2Ve/eQ/bXmY0X5mXvJcfiEdGHzkgvbw== X-Received: by 2002:a17:902:ec8b:b0:1b3:d8ac:8db3 with SMTP id x11-20020a170902ec8b00b001b3d8ac8db3mr12337602plg.6.1690192026938; Mon, 24 Jul 2023 02:47:06 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.46.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:47:06 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 10/47] gfs2: dynamically allocate the gfs2-glock shrinker Date: Mon, 24 Jul 2023 17:43:17 +0800 Message-Id: <20230724094354.90817-11-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 0BD41C0006 X-Stat-Signature: 843uedgp8buwxz34hyywri4cfo5byphj X-Rspam-User: X-HE-Tag: 1690192027-954879 X-HE-Meta: U2FsdGVkX1/FDNRDveRV/dS2PnkLrCn/Z2d2UiDOnsxwkK2vuxBAXuGKCAw9YJDNJRHKbAzGVAt0U4MdIT0xIDqnjaiDFzW9memK7Mkzp/6dERBFRgqy2pzOHnx5XakrdJCNxgHPygSNdIOK3L3o1V+RQcb25x0fO3KxdmAJF8XKJBmXG1Jk1Ocau5TOEpkGlFz8LMttajxXnf9patfwxyjHc+H9kUgORffL8omcJTpqKcZu3pJD/Ge7SXch2R8T3qZyOmwOSq1iXwyxb9pHhvuPfnBXRkm3PNgq93v8HiY7CP3rPKXmwYKzUun14dNiMYlEhp21ggMtfTjlIRQiau496sL8B3ubyPqReIhs09guF1v9nTVorXdesOoSJYQ3xX+4kxbw+5kGlhRFJU9XfY2PV2ahlcKprRWHV5T/XCosM+xJHoACWojlIQuteKtZ3l+4EyLhXA4X4RoCm5+YPDYxVOUK3W5aDiklWp/KKB5vKTY9Nm/eyjnFCmJgR0lXXRo3qR9fsvIv7OaFzp72Jnfis+5PX0NCQ7R8nlNGBlAUWLoOlzBUGduchyUcykEBgBryekdgW456Hv5Wknbo1dERcoN5OMeY+6gzpUPHem2PYxE1ZtycAjU4/On7DLvI8bka1oPPzseLf36qfS8QbH9SzjTjYaN1JWIhpsfsWKlcuPJEt/falPccyQ4lgLoczTXllRmhgO1dIuoEnFuWdP9W4whMy6FfMLT6i/w5GjlfPKUH7W/ieixo4Ov+YxzIPemAGWvK4ziTeLTgJRCE2GYyvLs16xgoUVsO+G/HKOOZe/ARtNuF/jrnV+OtqRV7bLlPYfxBCifgs3coJXVML29ZnUyBrzjs+2nYoKoM5n4L61hraA66U7chabJ32LnTbNRrcQfi3sUOJeqXAbsfM4RNYijRMdweQARuA999H2tGwMVD6LXi4u1+hHf7pTVGm2jCXGeQEWfwjWJdtzT l6YyVL+n 8ldnDbCT/3LA30rqI9p9bQHgbGv61nIZLK9V/LS3+meojC7SmRvWgz6aEuyD4JRn267M8fwgu4+b6R286bwXWhjgAXiCIJ32aii7bD7nuBtG7OEstkHgBVOrTHKjXC4DP8LlgKDOqsM+gMSOr2x5vmhkXmngJFyQtorIgmNzjNbaZZpwV1yQGJYO49rEge+CL04+jOuETFB73nt0IfWdXwn2BlPAYmwLpP873zB0/DwOV0cjxYn2P+ijF8IpgzYLxya7QK5H3ZwSdFYlgJuUsmh5eO8V2tC5bBmdMlTXpjei7IMAem51JKfE1RFkZmJtWzxhTHqyW6L7QbI2QGc2LyqWGzoKT4uwhLb/6HMxb9MSwqZLKrB/OYxv+UvkST5SGvCATc14mjNUXjRtIO+3kNgzv2CmRUQsMv0lL 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: Use new APIs to dynamically allocate the gfs2-glock shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/gfs2/glock.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index 1438e7465e30..77da354667d9 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c @@ -2046,11 +2046,7 @@ static unsigned long gfs2_glock_shrink_count(struct shrinker *shrink, return vfs_pressure_ratio(atomic_read(&lru_count)); } -static struct shrinker glock_shrinker = { - .seeks = DEFAULT_SEEKS, - .count_objects = gfs2_glock_shrink_count, - .scan_objects = gfs2_glock_shrink_scan, -}; +static struct shrinker *glock_shrinker; /** * glock_hash_walk - Call a function for glock in a hash bucket @@ -2472,13 +2468,19 @@ int __init gfs2_glock_init(void) return -ENOMEM; } - ret = register_shrinker(&glock_shrinker, "gfs2-glock"); - if (ret) { + glock_shrinker = shrinker_alloc(0, "gfs2-glock"); + if (!glock_shrinker) { destroy_workqueue(glock_workqueue); rhashtable_destroy(&gl_hash_table); - return ret; + return -ENOMEM; } + glock_shrinker->count_objects = gfs2_glock_shrink_count; + glock_shrinker->scan_objects = gfs2_glock_shrink_scan; + glock_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(glock_shrinker); + for (i = 0; i < GLOCK_WAIT_TABLE_SIZE; i++) init_waitqueue_head(glock_wait_table + i); @@ -2487,7 +2489,7 @@ int __init gfs2_glock_init(void) void gfs2_glock_exit(void) { - unregister_shrinker(&glock_shrinker); + shrinker_unregister(glock_shrinker); rhashtable_destroy(&gl_hash_table); destroy_workqueue(glock_workqueue); } From patchwork Mon Jul 24 09:43:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323746 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 90319C001DE for ; Mon, 24 Jul 2023 09:47:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2B85B900004; Mon, 24 Jul 2023 05:47:22 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2680E900003; Mon, 24 Jul 2023 05:47:22 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1302E900004; Mon, 24 Jul 2023 05:47:22 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 07770900003 for ; Mon, 24 Jul 2023 05:47:22 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id BFDB5A0A0C for ; Mon, 24 Jul 2023 09:47:21 +0000 (UTC) X-FDA: 81046027482.21.42C8BA2 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) by imf07.hostedemail.com (Postfix) with ESMTP id E671140018 for ; Mon, 24 Jul 2023 09:47:19 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=PYcbzrtY; spf=pass (imf07.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192040; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=UBNhxmwoWFukUMFCa6L5K1ksS1zA9QvfN1MSwW+LOvg=; b=Ekz1xSlGA9paD2duSQKhoZvvX7eUFmaSzGSzFuMZtr3K+9Hzjulo/CG2R+IjZ3qZrZ6pDL 5VIBeDqGrBte1O1qHdMr8Emk6wVoUU4SDlIvbHgq0Bo2J6Y7KAMroPVmIafrAJpCrBKKpO 8Yup94oWiw9uiD7xYGnlVuYgjCLpwwk= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=PYcbzrtY; spf=pass (imf07.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192040; a=rsa-sha256; cv=none; b=59VWADHGmq1TY+ITWMC5VVxsyxyF3uONerpMtU0Vq9gt6z4ixeE5HCAPjtlwaegWWPmGn0 89J1HFNbeyXq3ZzbxmCOvlV3iE8z1S1B4uYIttLM+vV4FfcAD0gdyj6YsoiPyzUcEycVVL yFqK+8EIuJEs6DX0y8Q1h85rKEH47vo= Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-1bb85ed352bso2233235ad.0 for ; Mon, 24 Jul 2023 02:47:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192039; x=1690796839; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=UBNhxmwoWFukUMFCa6L5K1ksS1zA9QvfN1MSwW+LOvg=; b=PYcbzrtYJQj413Q0/SwymVhgK8hPc8ex6XZDsNX+o4IV2cADzaV/i2ya7gUKq/uTsu wsioX/oC9g6+AR05yLYLolp75BAxO+vtAgmvegSP/6oS7xyFJbaLjDx8bzKHReC/LdPy ZD0p0zqCSm4I20GpIy4a7cDW1rypHC1YzlPKbmR7fKpS+iPZ3nobfzQ/pyKjlQMwP8jK Nmzke41P9dSVS9eDDUNJUwzSb8mk0vo1CuJyAAX+qbcUvC6mBpCbrcmY6qwTVXPENs8X jAMFBNAsAWQ6gQ7fzECuFMhzmmAgzRWBECByoqxf+ey+4diWRhb6HmTmtKgQ50al6pO0 t6+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192039; x=1690796839; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UBNhxmwoWFukUMFCa6L5K1ksS1zA9QvfN1MSwW+LOvg=; b=GHr3BO9WiJp4jl96ifK3iXRoVb8CJwbO2xkW4WUGtouXjLKRuSNyS5cbpO/WNu9zvz lsednonNE428Ml+sjWtKZ+WMjUce9UGA0zD52SlK7VQECg2T8CUJT99KZCGhU6hWcFFO 8Amv8BLZML3+ePXiiGtHLBf29vb5hu/3TJRdNgwlFSlrHB0EGM74J+tA2C380Vveicgo d+QcN8URm7p7UdWxEmYQKWM8Gn2tydvJFoA9Jem0NZnG8Ci9hsiCfuvKly2dc3ngABW7 Y/LK7e6nwzJBmPOyH0+zvERC7LdZxDCmw9YmkgVJ2iaFTdY8grZNS0STZAel23qzln4q 3mbg== X-Gm-Message-State: ABy/qLZf59VB9hmDU8qe4AuEppncEbQ1QvG4jrl58JWT83XH2pcteu1P wGvqiExupIdwzIGW5oYS+UNdJQ== X-Google-Smtp-Source: APBJJlF/3KLtCT6eHhEfIce84TGjlwCK5paHy95Ixo7dnPUARJYmTi5EEMpBHN4EFiKTP+Yjoiy13g== X-Received: by 2002:a17:903:24f:b0:1b8:ac61:ffcd with SMTP id j15-20020a170903024f00b001b8ac61ffcdmr12333562plh.3.1690192038795; Mon, 24 Jul 2023 02:47:18 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.47.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:47:18 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 11/47] gfs2: dynamically allocate the gfs2-qd shrinker Date: Mon, 24 Jul 2023 17:43:18 +0800 Message-Id: <20230724094354.90817-12-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: E671140018 X-Rspam-User: X-Stat-Signature: 875ecfdneq3ntg3azso6h9573tr47hxf X-Rspamd-Server: rspam01 X-HE-Tag: 1690192039-834000 X-HE-Meta: U2FsdGVkX18sVEsd1Vk1aLFjjzuw58llFUWqLuiJQJXLvgoxr+yhKS383QMmAqwvMHOdq9/ShvlEJQB1AcLWAVso9z89AzPIce+uLs5o3d2ORTaNCtkHkrtjlwd5Pimd2+KFCrguRdxtzs6ZgEReUa1Gua7QDm0Jo4DtrxCuhcBXTLmMWdUaThLLZC/VYSotREV3jq815vyIBpp8UZy6+b1LuzpMe5qJXgfhDH2epeApnuXoJeuJtS49oWnObh1X61M9mnSkcRQn7HAtRn/sxaJUOyg7Wv+BqBjuxXI79VjpBEGGacBXRsfNhCCi+MkJxPlqNxdydWboeqgkp3Raf/zfEftRILWfSaLQqb4W1jragDxjtvmDlPdmv2AbuOYT8EGLiMHfQ5ndPO0ZQdNRSyxRZ52Zl5NDJCpAyp/zk6k09kRlBAarOvIVjJBxh2iEMYHwKp2y7LXpRiw3lG2KB5QvSU9BAshUuMACtXDXAmuZCulCqr70HuVquiNtQt4i3KG4st/I9SMwPjoqeLcPKxYl3u0ofx2n2KetBvxwon8WYNU4S/EFLX263t3sxE3j7mpKruqcUXlgzCLEFZ1Rh7HaK1KA95bSd4whA48CgB9pTKLyuP4GexPdIlPfB3ws2W5AvN+P9MLyhtffKhXTJ0gbuTjzgVU2PnTYwebdd2NeAmd5XHjA0vntHciGE2UPlee9IaR1DCMD6MxhKoouT7jcs/2IFXCb66qOj95TRD6VK83QcdZ7RaVCAFlkyYzuQ5fjwC+eE/kEF4gTCP4TBtA/DkH8oEn6LqHsDQEdRGddzFum1KbWjbtb6xSN8pNmhKPJ30drar453mu621KYmCg03vQ6NQjojRaGuAUY/fPaPjt9KJ1/UoELfPr2z6BzDedSkKfcaCFphb9FT7+c0v+IOtte7AzErjmqHvQ2qNPWiKnxIw0ChQlX1L/dvG+ORg3+xDS5FhsndeJ0HGx IzLiwLqn sbiCNI+ZjVC/o9HJenzwdGmaoZUboGBtMSf26ZiiBGzsRaC8ngCzPUR5QjD6DMxUhlGif8aPXsifH/HvvRb1pJDft3+razI5EE9NfqegRhJSa4nUT5320Yb23VNSlriwXerzAILiDK+NkOk6Aq+ihHctzg/IX9hushjxTQOFTGeXj81frB2EEttjGQBGzFnAHmPGwXYIbE0eNX/T8IYeqCDBJbeFH1p99I48Fd8kV3qkQ4Xh1bd8zr5jzh68GJi71Hl+gncUK0G9csq0dW1Bum51nYRDZyOcUK0EyAX0t7YtCk4D6Ktac8bgjtRTLCgqejwCvw0KxFx8EjTUGD5h8+nx/yfh9N95KvddJzzOfNpQe4d7D02bBoEejZyKptqZcr04Hp+7ycCTss2Gol2kAOww61t0qvxyCKVScHwC93J+K2qyDEINvBecNN1u2g0NKy6x3flj0C/s81Ok= 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: Use new APIs to dynamically allocate the gfs2-qd shrinker. Signed-off-by: Qi Zheng --- fs/gfs2/main.c | 6 +++--- fs/gfs2/quota.c | 26 ++++++++++++++++++++------ fs/gfs2/quota.h | 3 ++- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/fs/gfs2/main.c b/fs/gfs2/main.c index afcb32854f14..e47b1cc79f59 100644 --- a/fs/gfs2/main.c +++ b/fs/gfs2/main.c @@ -147,7 +147,7 @@ static int __init init_gfs2_fs(void) if (!gfs2_trans_cachep) goto fail_cachep8; - error = register_shrinker(&gfs2_qd_shrinker, "gfs2-qd"); + error = gfs2_qd_shrinker_init(); if (error) goto fail_shrinker; @@ -196,7 +196,7 @@ static int __init init_gfs2_fs(void) fail_wq2: destroy_workqueue(gfs_recovery_wq); fail_wq1: - unregister_shrinker(&gfs2_qd_shrinker); + gfs2_qd_shrinker_exit(); fail_shrinker: kmem_cache_destroy(gfs2_trans_cachep); fail_cachep8: @@ -229,7 +229,7 @@ static int __init init_gfs2_fs(void) static void __exit exit_gfs2_fs(void) { - unregister_shrinker(&gfs2_qd_shrinker); + gfs2_qd_shrinker_exit(); gfs2_glock_exit(); gfs2_unregister_debugfs(); unregister_filesystem(&gfs2_fs_type); diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c index 704192b73605..bc9883cea847 100644 --- a/fs/gfs2/quota.c +++ b/fs/gfs2/quota.c @@ -186,13 +186,27 @@ static unsigned long gfs2_qd_shrink_count(struct shrinker *shrink, return vfs_pressure_ratio(list_lru_shrink_count(&gfs2_qd_lru, sc)); } -struct shrinker gfs2_qd_shrinker = { - .count_objects = gfs2_qd_shrink_count, - .scan_objects = gfs2_qd_shrink_scan, - .seeks = DEFAULT_SEEKS, - .flags = SHRINKER_NUMA_AWARE, -}; +static struct shrinker *gfs2_qd_shrinker; + +int gfs2_qd_shrinker_init(void) +{ + gfs2_qd_shrinker = shrinker_alloc(SHRINKER_NUMA_AWARE, "gfs2-qd"); + if (!gfs2_qd_shrinker) + return -ENOMEM; + + gfs2_qd_shrinker->count_objects = gfs2_qd_shrink_count; + gfs2_qd_shrinker->scan_objects = gfs2_qd_shrink_scan; + gfs2_qd_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(gfs2_qd_shrinker); + return 0; +} + +void gfs2_qd_shrinker_exit(void) +{ + shrinker_unregister(gfs2_qd_shrinker); +} static u64 qd2index(struct gfs2_quota_data *qd) { diff --git a/fs/gfs2/quota.h b/fs/gfs2/quota.h index 21ada332d555..f9cb863373f7 100644 --- a/fs/gfs2/quota.h +++ b/fs/gfs2/quota.h @@ -59,7 +59,8 @@ static inline int gfs2_quota_lock_check(struct gfs2_inode *ip, } extern const struct quotactl_ops gfs2_quotactl_ops; -extern struct shrinker gfs2_qd_shrinker; +int gfs2_qd_shrinker_init(void); +void gfs2_qd_shrinker_exit(void); extern struct list_lru gfs2_qd_lru; extern void __init gfs2_quota_hash_init(void); From patchwork Mon Jul 24 09:43:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323747 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 45A51C04E69 for ; Mon, 24 Jul 2023 09:47:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CF0A4900003; Mon, 24 Jul 2023 05:47:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CA2C16B0078; Mon, 24 Jul 2023 05:47:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B6901900003; Mon, 24 Jul 2023 05:47:33 -0400 (EDT) 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 AA3F96B0075 for ; Mon, 24 Jul 2023 05:47:33 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 8B3FC1608C2 for ; Mon, 24 Jul 2023 09:47:33 +0000 (UTC) X-FDA: 81046027986.21.960157A Received: from mail-pf1-f182.google.com (mail-pf1-f182.google.com [209.85.210.182]) by imf14.hostedemail.com (Postfix) with ESMTP id AB53B10001C for ; Mon, 24 Jul 2023 09:47:31 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=QAYeqCfp; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf14.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.210.182 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192051; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=9U3hHp3Ixfpl9U4smEWKzCVcwCA5eIL8z0A28L1UZbc=; b=YzQhGn595ATmOZe5WDR4+MLHu/c/5fhkAz62vKasS3IrAJyXO49zDE2ytg4UisaiZAseWw nLXWhvfaIXSPYu9DsUEN1mkbyUlyhoC8nM0M0zOasf+/2Fi4Z0wBs3fOMvT4CBnGQ1gKGc X+pWqcKpVwSPhF9CPDPyRKw/MhcVbWE= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=QAYeqCfp; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf14.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.210.182 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192051; a=rsa-sha256; cv=none; b=mavp6ose5cpuvozjNJQpMYRnBIh8m7MPmAYuef2BACht+1noR20A1MkmJ/F1hD3qchoOhV RiB8J5E7IO1Cdy4p1OjnQ2DPslyYH1vJqFvUNL8L+JXOog0vWoymT0SR6TjSCKSnm2J1jW KY+ugPmX3d2b60XLTm7iR7HWJuO3xOE= Received: by mail-pf1-f182.google.com with SMTP id d2e1a72fcca58-682b1768a0bso1051617b3a.0 for ; Mon, 24 Jul 2023 02:47:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192050; x=1690796850; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9U3hHp3Ixfpl9U4smEWKzCVcwCA5eIL8z0A28L1UZbc=; b=QAYeqCfp5ScVSEsaILXKgN5czHypzkm5pfRSAUj7+K2TTSbTzNRqgHmwizXWrdbADt dPS6CIyf53xE6HiwpNM1QNNfNY4T/YxCdjgwYwYCMqZA8+w8CYGaoBAhPrRyc3gw7MXt IVjAsBtH8DkTKLFOC8qO29c6qKeUwQyCtOthCGYm9GTNcqaePplKjaly3vCp9NsEKqTp +rf/lXOBdYiittVpF+0GtN4867xhpo9Jz2TGzwKtiTTt7IZ0uSzvoV172id3/t1bP5WN +6ZWZdRQacrIafbFpiL67FIfiJZ1NdJ30fDHwqgYiEqyaEr7Ox+6gQsN8Wgz37MDdYdG WIMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192050; x=1690796850; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9U3hHp3Ixfpl9U4smEWKzCVcwCA5eIL8z0A28L1UZbc=; b=M+BtMQ4qGKXiRYy9RzMZ9RaG/b6W0cBU6E2iHpm7ySXG5/CYzt/twVCcem8NAJwO1I GyT26XyQWE7ctiwEtJJMyMCeU/t/hFZjbnLCm8/fcZPO8kshrPX4GtiR41C4n78ahlQj Bez/9PyirOV9RJl0ZIbBI8ZRajR+a/twxWTKbSuZl9IoHxITNwaomSPuZRw7z1Jm+1rt uxVRw89C2D1dvvR4YsNN1wtmRat8iDPf6xjcPiwtp6yajumj6X7ctDKaP7PLj44YTU1b +qQRDuB8ELAdzjTtjFrAsnkqJ/tLRA551GD+b8bLxzR4LwvbWi9zgNb3OM71ByVN8ha3 JS+w== X-Gm-Message-State: ABy/qLaeg8xi4ElF2nHzgJ0o+Xc/K3ZAbyS3dvQuKBcaVvHGGhZqYgHM +9jGQbXrhimLllRR2Fu5rC8nTg== X-Google-Smtp-Source: APBJJlHqJFoGUA+vGZIvjP2L+AzvJt8mYCuJXkz93MaA+snz7x91W/Nq1tjb4AkURZSKSg9l3nnnXQ== X-Received: by 2002:a05:6a20:7d86:b0:137:3eba:b808 with SMTP id v6-20020a056a207d8600b001373ebab808mr14262798pzj.5.1690192050616; Mon, 24 Jul 2023 02:47:30 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.47.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:47:30 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 12/47] NFSv4.2: dynamically allocate the nfs-xattr shrinkers Date: Mon, 24 Jul 2023 17:43:19 +0800 Message-Id: <20230724094354.90817-13-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: AB53B10001C X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: keb5mr1rnwwrq8wot3amccnuqycybp4e X-HE-Tag: 1690192051-900199 X-HE-Meta: U2FsdGVkX18Eo5NfxREScu6vL4QCBt8qxz+XPs82S4Al2CRiY7wVTBcFMYfoiiooOHxbDGJa76mCT01kUpYM3R7kUK2HvAuMyA5hmFPaUyPOuszXPTAtugbJ5JYRzVtAfIBzYUuIvrdj46afansQV2p9sKi0SSKaOFOJK7H5phP6KsLGDP8U3jH+0c+MR5WVJ2YwJn8ml2M/Bvg64ppSm8qhVY9xYykCwbzG+kYMfsutkmQfFpOpDMax83BmAfWcDgvRLD8/Duz82i5LyLm24CBpNYKK+6XQHlNVvB2T/XXFnWZIZ2FYaKoAxH0r3IM39IyftaPKNVHrDuwTFeX5eVnKh3EhvAZM8vCngts6yjlWT3W7FYOs05H+5Ae+qzC4TajlkIfwO8tsDUOq7Xxkn7Z1/wPVChJqYt/5JV7R4lFgEvSluJuum/uvSnp9rAqWjHeo2RpkuAxrInVre/em5lr25ibmXPG1RVSFjCJDFhKw2oi7AG7YPDrT+OY7qJ55HfzreGsXAhGJ2VwNh9M49YQX6Kh565EB3xmXrdPn8cDQmupzcOJnlFz92R73TbHov7HHRLlGnLV/bESBUB73Nf2bD4csa4S6RQ0GQWhw+QCnRGP6IFHDieDEYT6hKo25p6xpbbcEjHIl2NkowwvO5/hAZZi/LCkU4Q5wkna3qkA8IukxkKH5qGroSrIWxi7LW4Qfa87UQWNVHaPv4cfqAvrywJkRCMq/4ydQV04FCkJydgM2lhPLUh3Fhxa4fNCqDlL097387JR9k10lLyIa3d12MP35gI3G8WBp7yKFIRMS+dPzHJrxVipPTPE/tAzVAVWxw406JPvc7ZqLdvboZ39Zl2U94VSZKNtBVzOU/o5Ll6Ny/xUmgO10Oxy+NT0CmlW5dRsgbc0+wJEk/Hb6rdTOdveYTlLNaLECtzg0/Uz/FWtvivydOWvolQSTJRnE8FnQKYENkWty4TLU99j 1D6Kbswa /WNrLepiBiG8ZQQX7L2BTnMVdBCDMeuA9KwOdePxllhYM046KSoxyZv9EIF4FBdWCX7PVzHVbhj7IX5VwffxZgG3+1xTVeB0BJA4BRekEocNtyIu4Uo4KhTh3A0THLXRJG3zUFln6Ei+QheJTKiD3xbr72XLLK/wJNI2ubikRrqgLla+LY1/unFXmchtfhF2rz3KlHoOpKk1OETJkT4tRV34sbmuLicXpD0XJjIO1acGw5A0C9Jr5wa0CWZtgpXDLr8KEQRMQD7NrT84KXIUSkQNYPtAIGyLCnPUQQ+V1kKzxlVACAUin0TO5qYALmwE2vGFaQ4g5jl8qd23PcrvlD1fYyefMKl9R78OUsuZqQnU/SZH35IA9Si4AG8Rbse2VmZ+pQVE24rflBYsjAxub3xagK6gWoggq3T91 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: Use new APIs to dynamically allocate the nfs-xattr shrinkers. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/nfs/nfs42xattr.c | 87 +++++++++++++++++++++++---------------------- 1 file changed, 44 insertions(+), 43 deletions(-) diff --git a/fs/nfs/nfs42xattr.c b/fs/nfs/nfs42xattr.c index 911f634ba3da..3604342e0f77 100644 --- a/fs/nfs/nfs42xattr.c +++ b/fs/nfs/nfs42xattr.c @@ -796,28 +796,9 @@ static unsigned long nfs4_xattr_cache_scan(struct shrinker *shrink, static unsigned long nfs4_xattr_entry_scan(struct shrinker *shrink, struct shrink_control *sc); -static struct shrinker nfs4_xattr_cache_shrinker = { - .count_objects = nfs4_xattr_cache_count, - .scan_objects = nfs4_xattr_cache_scan, - .seeks = DEFAULT_SEEKS, - .flags = SHRINKER_MEMCG_AWARE, -}; - -static struct shrinker nfs4_xattr_entry_shrinker = { - .count_objects = nfs4_xattr_entry_count, - .scan_objects = nfs4_xattr_entry_scan, - .seeks = DEFAULT_SEEKS, - .batch = 512, - .flags = SHRINKER_MEMCG_AWARE, -}; - -static struct shrinker nfs4_xattr_large_entry_shrinker = { - .count_objects = nfs4_xattr_entry_count, - .scan_objects = nfs4_xattr_entry_scan, - .seeks = 1, - .batch = 512, - .flags = SHRINKER_MEMCG_AWARE, -}; +static struct shrinker *nfs4_xattr_cache_shrinker; +static struct shrinker *nfs4_xattr_entry_shrinker; +static struct shrinker *nfs4_xattr_large_entry_shrinker; static enum lru_status cache_lru_isolate(struct list_head *item, @@ -943,7 +924,7 @@ nfs4_xattr_entry_scan(struct shrinker *shrink, struct shrink_control *sc) struct nfs4_xattr_entry *entry; struct list_lru *lru; - lru = (shrink == &nfs4_xattr_large_entry_shrinker) ? + lru = (shrink == nfs4_xattr_large_entry_shrinker) ? &nfs4_xattr_large_entry_lru : &nfs4_xattr_entry_lru; freed = list_lru_shrink_walk(lru, sc, entry_lru_isolate, &dispose); @@ -971,7 +952,7 @@ nfs4_xattr_entry_count(struct shrinker *shrink, struct shrink_control *sc) unsigned long count; struct list_lru *lru; - lru = (shrink == &nfs4_xattr_large_entry_shrinker) ? + lru = (shrink == nfs4_xattr_large_entry_shrinker) ? &nfs4_xattr_large_entry_lru : &nfs4_xattr_entry_lru; count = list_lru_shrink_count(lru, sc); @@ -991,18 +972,34 @@ static void nfs4_xattr_cache_init_once(void *p) INIT_LIST_HEAD(&cache->dispose); } -static int nfs4_xattr_shrinker_init(struct shrinker *shrinker, - struct list_lru *lru, const char *name) +typedef unsigned long (*count_objects_cb)(struct shrinker *s, + struct shrink_control *sc); +typedef unsigned long (*scan_objects_cb)(struct shrinker *s, + struct shrink_control *sc); + +static int nfs4_xattr_shrinker_init(struct shrinker **shrinker, + struct list_lru *lru, const char *name, + count_objects_cb count, + scan_objects_cb scan, long batch, int seeks) { - int ret = 0; + int ret; - ret = register_shrinker(shrinker, name); - if (ret) + *shrinker = shrinker_alloc(SHRINKER_MEMCG_AWARE, name); + if (!*shrinker) + return -ENOMEM; + + ret = list_lru_init_memcg(lru, *shrinker); + if (ret) { + shrinker_free_non_registered(*shrinker); return ret; + } - ret = list_lru_init_memcg(lru, shrinker); - if (ret) - unregister_shrinker(shrinker); + (*shrinker)->count_objects = count; + (*shrinker)->scan_objects = scan; + (*shrinker)->batch = batch; + (*shrinker)->seeks = seeks; + + shrinker_register(*shrinker); return ret; } @@ -1010,7 +1007,7 @@ static int nfs4_xattr_shrinker_init(struct shrinker *shrinker, static void nfs4_xattr_shrinker_destroy(struct shrinker *shrinker, struct list_lru *lru) { - unregister_shrinker(shrinker); + shrinker_unregister(shrinker); list_lru_destroy(lru); } @@ -1026,27 +1023,31 @@ int __init nfs4_xattr_cache_init(void) return -ENOMEM; ret = nfs4_xattr_shrinker_init(&nfs4_xattr_cache_shrinker, - &nfs4_xattr_cache_lru, - "nfs-xattr_cache"); + &nfs4_xattr_cache_lru, "nfs-xattr_cache", + nfs4_xattr_cache_count, + nfs4_xattr_cache_scan, 0, DEFAULT_SEEKS); if (ret) goto out1; ret = nfs4_xattr_shrinker_init(&nfs4_xattr_entry_shrinker, - &nfs4_xattr_entry_lru, - "nfs-xattr_entry"); + &nfs4_xattr_entry_lru, "nfs-xattr_entry", + nfs4_xattr_entry_count, + nfs4_xattr_entry_scan, 512, DEFAULT_SEEKS); if (ret) goto out2; ret = nfs4_xattr_shrinker_init(&nfs4_xattr_large_entry_shrinker, &nfs4_xattr_large_entry_lru, - "nfs-xattr_large_entry"); + "nfs-xattr_large_entry", + nfs4_xattr_entry_count, + nfs4_xattr_entry_scan, 512, 1); if (!ret) return 0; - nfs4_xattr_shrinker_destroy(&nfs4_xattr_entry_shrinker, + nfs4_xattr_shrinker_destroy(nfs4_xattr_entry_shrinker, &nfs4_xattr_entry_lru); out2: - nfs4_xattr_shrinker_destroy(&nfs4_xattr_cache_shrinker, + nfs4_xattr_shrinker_destroy(nfs4_xattr_cache_shrinker, &nfs4_xattr_cache_lru); out1: kmem_cache_destroy(nfs4_xattr_cache_cachep); @@ -1056,11 +1057,11 @@ int __init nfs4_xattr_cache_init(void) void nfs4_xattr_cache_exit(void) { - nfs4_xattr_shrinker_destroy(&nfs4_xattr_large_entry_shrinker, + nfs4_xattr_shrinker_destroy(nfs4_xattr_large_entry_shrinker, &nfs4_xattr_large_entry_lru); - nfs4_xattr_shrinker_destroy(&nfs4_xattr_entry_shrinker, + nfs4_xattr_shrinker_destroy(nfs4_xattr_entry_shrinker, &nfs4_xattr_entry_lru); - nfs4_xattr_shrinker_destroy(&nfs4_xattr_cache_shrinker, + nfs4_xattr_shrinker_destroy(nfs4_xattr_cache_shrinker, &nfs4_xattr_cache_lru); kmem_cache_destroy(nfs4_xattr_cache_cachep); } From patchwork Mon Jul 24 09:43:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323748 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 23468C04FE1 for ; Mon, 24 Jul 2023 09:47:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BB83A280001; Mon, 24 Jul 2023 05:47:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B429D6B0078; Mon, 24 Jul 2023 05:47:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9BCC5280001; Mon, 24 Jul 2023 05:47:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 895AF6B0075 for ; Mon, 24 Jul 2023 05:47:45 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 5FDEB1208D7 for ; Mon, 24 Jul 2023 09:47:45 +0000 (UTC) X-FDA: 81046028490.26.166F0B7 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) by imf20.hostedemail.com (Postfix) with ESMTP id 8C50D1C0028 for ; Mon, 24 Jul 2023 09:47:43 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=gX8Q7SXH; spf=pass (imf20.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192063; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=rzRsL3uPXf8EtZhij3twpf+iuH9MzH4dVPBmPqsS5Og=; b=t54+RbTqfWH6H0YfdptLH7L2wHRSw44lIvxNdHMmWCs06Y3EVis1ZXWvNWSCY8PT1dQfeP OIheUxWLlRCRNqDI46IDFbkLFw/TpGA0QBsR/aReCQZIMiLPJ8uRtABsGcQ58YbA3Aakk/ WQh0K5TF0h3CIGnUNbJPDjVQkY7hC9U= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192063; a=rsa-sha256; cv=none; b=0NY3gV7hhMk2TCsrRtdtrx6ewZ5lPkMqLZrPNpMXlGIAMqjRZT35SvVyQgLJsYMZBVm7s8 dZ4/2/jhkx0m0lt1/PeFwyF1r1hBUG7JrbBH0xy/xvYAIJfVXppJRS9+ERnXofj4oDOiZS 6n2VqmEwLn218TsMDp78wTyJqd6rh7o= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=gX8Q7SXH; spf=pass (imf20.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-1b867f9198dso8896315ad.0 for ; Mon, 24 Jul 2023 02:47:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192062; x=1690796862; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rzRsL3uPXf8EtZhij3twpf+iuH9MzH4dVPBmPqsS5Og=; b=gX8Q7SXHLW91QeJQyKDVumBjdRBjyll1XQW/JTChdq9dJqktv+X9ib4/uAMXxgigqH 2jaNwNGzNzbxV0P1Wq3smVBCy4sNVeMp2d3znSQmH+08EqCorhh8sobS3FzAo1aci+WZ ahKKXhVh1u/zcYQLSV07bWs7cg92+ga+7wTGv6JJSEqo99xKqc3+YUXi9LMwyQq6STAk AcT7MY/9kuaNFBZqw4pd3+jIBecT2Ao+Yw0ycAdTL8xM/HvxupDlq0E7GLdDU4836YR8 3HkgcSbyA4vS6vLviPYG979wLCQ5W42uSMh1vXnsGUiqQWrA1KKfF7bNogJb+rMbZ6Yg D/lA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192062; x=1690796862; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rzRsL3uPXf8EtZhij3twpf+iuH9MzH4dVPBmPqsS5Og=; b=TbKxD9U+2DQQpNTAL0zPWGdF8/DMpyuLMof33lyJQyws9nKIndCd4Yn3/3/qHKkYTf 8y7lLyy8eAI0Wzazfej0KV0uDi5fluaVd+TD6Jj08H/HbO5mxtSCGwPgqVPylXXlMPof 0RkVW5vuGEDs/K+jY/71aN9wha6RrDWfj20xYwATbnuNXcLrkIWkWO2zKgKxNBsKx7gw 9nHqf2C+L9aRciruEo+s4QBwvy+rjZ+ssi5VIxLa+9/RinCVYEYx1JPIMsyoJ5wmZ9tj G+Rh+tf8zgPyx9XA2unZRLRleuF3Kvq+OeJO+m1detqCZ8Xa/LB5cgIY4kLNpBVYaJzh LIvw== X-Gm-Message-State: ABy/qLZLQaaNbwqil5/XF3G+hsekQ3tyhZT8jaNsZpzoNwAnVVZpsx9y p2dnHDdKEQiV7FBUFHjjg3ewaA== X-Google-Smtp-Source: APBJJlE2hlcoboYUdUaSOoRiDnmiId7r6Wv5DYfSEbrHd1JPgB9nwdB4ObCAMGW7eL9gTiY+r7GrFA== X-Received: by 2002:a17:902:d508:b0:1a6:6bdb:b548 with SMTP id b8-20020a170902d50800b001a66bdbb548mr12141350plg.1.1690192062448; Mon, 24 Jul 2023 02:47:42 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.47.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:47:42 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 13/47] nfs: dynamically allocate the nfs-acl shrinker Date: Mon, 24 Jul 2023 17:43:20 +0800 Message-Id: <20230724094354.90817-14-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 8C50D1C0028 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: abzw8bqxh7kux6kqqpaeph5p8mtxix16 X-HE-Tag: 1690192063-329833 X-HE-Meta: U2FsdGVkX19+ADm95WmuTBbN/Wjm1Wsh6+3MBlzONil9VQxWoLJwjb4Fk3lu+V+nXFu1cG04YBKX8LRqo1vSANoVAm/g9sq7LaVXEfwQ2czcRwESiVqqgezRnKhNWchrbrsF0Za5VUNMW7Fvg50Kz+E9WMgVEWPkfYOQHU7vyMvY58HygAbXqVl5geIAIhT4pExfnqmz7Pf73cgGz9cDt1N0Uji/vbeUgmn4VDf0jjmHXRNEB3UWBh21b+R2qVGr2+azbmKJEtwKDnMDM4R2RehGaLoCjNrPBKvhCj2m0cg9FxvGO0kIDNDCBNRvLvWxTQEZGqRvDKN/kvFTqaeUm8saHcqtw8RtqnmFSPCkmqYJpp6VlUJ/h1oA8oVc5NzyzZ8v6SQ+bvbt1EXa9bgTfusOn1/N97+JnnGsN8nXZn+4/fNZJTUgBl97PDN7xV2wxMuVh4T0VaClKSySCG1R0KuWfLGQtvdQNwYNkOyrH+VUGwnOoNMpn8rs4ViyZhCrqm8AyQSgbN1ty2rZwR+pQHdVLX6FqecQZWrLhVaLSZrisQFcOfP8eGSW5UkELUeI7dxRPsxcNXkAIOkX+U//T0RLWt9twM+WhJDEPW6o9uIxUs2roTd8pBSLUYdCd6MTxsi52eUVgE1LQfkjxNwFbBe5jJkiJITXxnBWEkGTK34FgfMDBQjB7DVcWd/t1pxxcPapA/Y1+abQg9PWcHRgiNeaXmFP2j+mGNRdmgB4qHVFiA1iXlkhktteZqBfjgq+8xaYASETIuiDNVswfTzTcrbwgazZlvpOg+4wsfAl/K6PuA6NORNwnTMyq3F+fk+EQ/ktyL1hqEZTt2VXsAMyRM5kDv+GqSGtJnxA3SHtyRRXN9GgKxUBa0EIrTlSGPj2W1N62YEcCOHciMeKNnVNkBEiVzmA/HUSnP42Tji2IitWn8uHR3YpcExVX6cB9Ek6KrmObduY2xoRnN3ksW0 ghoJTwbP 5TER/I6Gt2m0uAglL7fABc6YOAHD0AMT8bdN5JP8Y0H/plWRHnHgzZhYrLmPBK51Hw4d2c+ZzpkpHfvqJq3x9Qz7kRXSWjJSnHHJFohzNLPH2ppS2NRZJkkjvR3KBDYpVcEtXryx2ZzLbHnNBFj++7WMbTLfuVvSz8LaFjUQGMKv6hdH/phNuqk+r+Hmvd8Rq3scvfQw2HcQLahNYfMtlOvzdifl2sdp95tgu4Y4DIYQtPbr7MpdeX7FKTt+si5MgfSXYDL/ikekrqM8/qe0qS7GjTazrEVsHimS8Io/c/Z4/xS8kw49qa5kVTUc1EkYxSeGTmq0B7+Vn5VqLCP4YmZs9IsQC6+WWWJ8wXYOIu6h9U2XJWVqthi8kgnU1VTzxuhrvrJxdz+/Vq/DnqZHJBou0EZjShZg1nLI3 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: Use new APIs to dynamically allocate the nfs-acl shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/nfs/super.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/fs/nfs/super.c b/fs/nfs/super.c index 2284f749d892..a90b12593383 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c @@ -129,11 +129,7 @@ static void nfs_ssc_unregister_ops(void) } #endif /* CONFIG_NFS_V4_2 */ -static struct shrinker acl_shrinker = { - .count_objects = nfs_access_cache_count, - .scan_objects = nfs_access_cache_scan, - .seeks = DEFAULT_SEEKS, -}; +static struct shrinker *acl_shrinker; /* * Register the NFS filesystems @@ -153,9 +149,17 @@ int __init register_nfs_fs(void) ret = nfs_register_sysctl(); if (ret < 0) goto error_2; - ret = register_shrinker(&acl_shrinker, "nfs-acl"); - if (ret < 0) + + acl_shrinker = shrinker_alloc(0, "nfs-acl"); + if (!acl_shrinker) goto error_3; + + acl_shrinker->count_objects = nfs_access_cache_count; + acl_shrinker->scan_objects = nfs_access_cache_scan; + acl_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(acl_shrinker); + #ifdef CONFIG_NFS_V4_2 nfs_ssc_register_ops(); #endif @@ -175,7 +179,7 @@ int __init register_nfs_fs(void) */ void __exit unregister_nfs_fs(void) { - unregister_shrinker(&acl_shrinker); + shrinker_unregister(acl_shrinker); nfs_unregister_sysctl(); unregister_nfs4_fs(); #ifdef CONFIG_NFS_V4_2 From patchwork Mon Jul 24 09:43:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323749 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 56ED5C001DF for ; Mon, 24 Jul 2023 09:47:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D17D86B0075; Mon, 24 Jul 2023 05:47:57 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CA16A900005; Mon, 24 Jul 2023 05:47:57 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B1B4F900004; Mon, 24 Jul 2023 05:47:57 -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 9EDE76B0075 for ; Mon, 24 Jul 2023 05:47:57 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 65BD7B2000 for ; Mon, 24 Jul 2023 09:47:57 +0000 (UTC) X-FDA: 81046028994.21.2B57F74 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) by imf05.hostedemail.com (Postfix) with ESMTP id 982DC10000B for ; Mon, 24 Jul 2023 09:47:55 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=ENVLEGhv; spf=pass (imf05.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.181 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192075; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=qReDjbjFz0xyiV7re04rgbBc1uubNDIxQ7QKRYWZSRs=; b=cyv6/JRGvbdk5OirYPkIZG1vNWHCt/SSwHSyp5FBoQWcOMbjyrzRb5cgzzHKyoX/TvByqb aFWuKASgwXiGi1XAoHstOq1tZfjiWMrjSFX6lIaAbjVJaBY2k9BZIIcbzKYZT4knZrXFg6 f6tWwh40CH9SKxuhFIHz6Kn2BunReXc= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=ENVLEGhv; spf=pass (imf05.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.181 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192075; a=rsa-sha256; cv=none; b=LgIqF1U7qG4PbuAm9SBLmj7lq3TPdhQOin2OJcfZpI2yfR+3jJa1/nwEuUPTBVi0gH/ree p60ZhmttD1PyDs5vWHZ80RFVPZJgCGuXpJHrOVyAkP9xV0XpgK6MSBBWyUq2dCmYly7aB7 X30V4XRiqRH+zNemxEr0oxkkriywYXk= Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-1bb85ed352bso2234755ad.0 for ; Mon, 24 Jul 2023 02:47:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192074; x=1690796874; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qReDjbjFz0xyiV7re04rgbBc1uubNDIxQ7QKRYWZSRs=; b=ENVLEGhvMjLiUvisyoHJontwb50xfTslV0XVCIZNbj3XxjFa+A4sTXO4Rw3QqFmux5 XbznTWGuyuir8FMQeIa7tywzBJUnyvYSwuYJ02HBKdcTkSJdAtoOPw44n28eP8zUKucc q8yY+ysDs6yXU3SX/8XFuGMKyo+SMyS0Zlg4rwVloT2TyOVOz/Imh5E9tEAGm8xg8jyO QATQrcFlR17SUbjRuc1dqQxPY8algfDWOcvmKhvXGbaXm39iJYJiLthaOzWAxzJVeqgh fJOtvB6CBEjtg12DSwkb6lmHRDFIhGbGsjcgpxt8MGvrxNBdwtVQD4ot+/N3ASfLH/lS XEeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192074; x=1690796874; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qReDjbjFz0xyiV7re04rgbBc1uubNDIxQ7QKRYWZSRs=; b=V6lF5/Hn2vN7ElaC0La8DQeBYCeL3e8aLISRvi/VTQStIexAfDbincvuDhkfFucWZG N3bg+s6q7pLxwfsfEKSqC5G8amSUcSWc5FKkFDw2wZUZxLqoGOHckPVqomAFOSSHEqhZ QOuAs65Fx/ZSidkyreX/9BYIbHoJES57FJ0ezoeKg7pzA6R7w2hFc49oN4oUSvQfHktW C2DQLzdgRCI/GgfSluNC0ysX+4mn67x3+5DQw7NDG2RhV3u/6Ki2p7moYMeJre6eaNZk KNuKRFWvzi4mpU6LjHGrvzwRBDIV1dLLs1tLBwyQTEx4IizYMO2tYHUFa7ZutOioxf9N 1IBw== X-Gm-Message-State: ABy/qLZQW4rHlu+WsUOQMhpSA8qANQYXmRylTqCztI2dH4VN46/04kfc /DrDIA5uqf3iCxizhOM6SFzGyQ== X-Google-Smtp-Source: APBJJlFmRr0YS7/80cQjb3Wv0/ryy4A2Bv0/hjBc48SsvJ3Rmt9/pUa2TTT24oRtgj6qJ02D1OEnuA== X-Received: by 2002:a17:902:dacf:b0:1b8:9215:9163 with SMTP id q15-20020a170902dacf00b001b892159163mr12197474plx.6.1690192074491; Mon, 24 Jul 2023 02:47:54 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.47.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:47:54 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 14/47] nfsd: dynamically allocate the nfsd-filecache shrinker Date: Mon, 24 Jul 2023 17:43:21 +0800 Message-Id: <20230724094354.90817-15-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 982DC10000B X-Rspam-User: X-Stat-Signature: zxqhkamc9tujmw5efwu1wtafr3ywnxim X-Rspamd-Server: rspam01 X-HE-Tag: 1690192075-242596 X-HE-Meta: U2FsdGVkX1/OpihEIsGOrFp4Oxqg+vUAJg4CktU6FGiqW06RnyC11NJRDNs+l8Ja95YeIqvxj4MDUBW2XnfHo+GVfzYGmNUffl0Y47GpWoehJVvnJaaqv1xwk6+9agu1uI1qlcUlWZ8oQ3xhKHTo6kyv5JuSSdLez8AoIJBlyPxR8RT7h3lGQMq/WykDQOfT2+SglkWh1a5ccPBJIZKsWJj9uyN5n0XrGGx2omYV8j3pS41aQVQoB6Ipvr251yBkuD0hbVDliLfyHPUD3jPLr2IYnJAb4i3jo2J3YYXR6vL8NFyil+wokvwY6l+Wqpjq78hOBGFZUxAGNjnLyQG+i2w+2I0BymnO84s8Je1xiA/cmR4ho5lKeElabJ+kYc1CGvQ796YuwbEVFCUkXiRQ6R0CNacNdx9+tLEEnwi+pIeOQcncwHCOeDGEyK2W6deNJnOt085xF2n6htdR+onSRlNRHtAe51o9S/I+BG2lx9p4Zr6Lq3Ra6HQfTykVMXaNpQd8JNBwsUKUstDh5ZvBV7c7HAj50VQXynsGPgSzy7OyPIkhYS/giMTxyGBTrkzuVWAYyKDtZ+PMvfnVGupMUpJ86t0Gh5Z6xl/2KCz/9KnAlUZkl7oUC0MhotKTtJMX5iwuzoA8cnFuuTtRa78Y0909V5a5zDsCcgohizKKY0r6rMBUIT0c1EC1ONl5un7vLQ8Jhrk9vwOpMBBZlXu+kzBNEGtRQ7+f+CnMFQYFirvqjrfAX5Gp41zors8aHjxM2bxtzIPcjliQTxNGDJUEOtiFF1nZPnHuzybGAxE9ybsnM8dwu8jr1j8+2e9mmmSsS49N3eQRKTefzHnxDLKCXJYYnxSXKSDGD9OHia7k1bwbOr+JvVjKrqlvrKjLMaTBeFnZ1Q/Lljo6LQB4dpjkqzOSKzZkYuLl5/dkZWufMufm3s1f2MOOtw5Ztgp9uCyWkx2IpNTOmRjAEISDiwB GL9Phdgv aZ1OeEnLZP53aWKWme3bPKAek0KUMgZNSMBQGNjnaVuFIcxMyI1OeMPPRANEUtm4oBqYn4okKLaF54QsMwe2Rt8+cIT2jwRk3xGVXlTtUs/qsNTw/ZQEhkWDLta5IvvhEijOBMg8KotYfImnDBnYln6OII6o7O09zFszVENXh0WPW+caIt2FWomvySa6F5HwEG0g6fl6eXVYKrqa66QF3ZsYJ+z1lQeEzsFezVV916NREsq+AuJWvyJODYiu5gRBvLRFkC9wMrNektnCOyBTUMMTA/PenhIZSzjSKp1vppz01hXB3Hv0LgVij1WPZ8G4jR8j3oPU0UUZq3znVAfH+m+2evPMv7ra5HS6I+mNjMZ+DHm8gjRlxl0htthAaMNBHprTo2opLltfhvIrv/zkLfO9bMfLzXRMrNT11 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: Use new APIs to dynamically allocate the nfsd-filecache shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/nfsd/filecache.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/fs/nfsd/filecache.c b/fs/nfsd/filecache.c index ee9c923192e0..50216768d408 100644 --- a/fs/nfsd/filecache.c +++ b/fs/nfsd/filecache.c @@ -521,11 +521,7 @@ nfsd_file_lru_scan(struct shrinker *s, struct shrink_control *sc) return ret; } -static struct shrinker nfsd_file_shrinker = { - .scan_objects = nfsd_file_lru_scan, - .count_objects = nfsd_file_lru_count, - .seeks = 1, -}; +static struct shrinker *nfsd_file_shrinker; /** * nfsd_file_cond_queue - conditionally unhash and queue a nfsd_file @@ -746,12 +742,18 @@ nfsd_file_cache_init(void) goto out_err; } - ret = register_shrinker(&nfsd_file_shrinker, "nfsd-filecache"); - if (ret) { - pr_err("nfsd: failed to register nfsd_file_shrinker: %d\n", ret); + nfsd_file_shrinker = shrinker_alloc(0, "nfsd-filecache"); + if (!nfsd_file_shrinker) { + pr_err("nfsd: failed to allocate nfsd_file_shrinker\n"); goto out_lru; } + nfsd_file_shrinker->count_objects = nfsd_file_lru_count; + nfsd_file_shrinker->scan_objects = nfsd_file_lru_scan; + nfsd_file_shrinker->seeks = 1; + + shrinker_register(nfsd_file_shrinker); + ret = lease_register_notifier(&nfsd_file_lease_notifier); if (ret) { pr_err("nfsd: unable to register lease notifier: %d\n", ret); @@ -774,7 +776,7 @@ nfsd_file_cache_init(void) out_notifier: lease_unregister_notifier(&nfsd_file_lease_notifier); out_shrinker: - unregister_shrinker(&nfsd_file_shrinker); + shrinker_unregister(nfsd_file_shrinker); out_lru: list_lru_destroy(&nfsd_file_lru); out_err: @@ -891,7 +893,7 @@ nfsd_file_cache_shutdown(void) return; lease_unregister_notifier(&nfsd_file_lease_notifier); - unregister_shrinker(&nfsd_file_shrinker); + shrinker_unregister(nfsd_file_shrinker); /* * make sure all callers of nfsd_file_lru_cb are done before * calling nfsd_file_cache_purge From patchwork Mon Jul 24 09:43:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323750 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 46D79C04FE1 for ; Mon, 24 Jul 2023 09:48:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D8E81900004; Mon, 24 Jul 2023 05:48:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D3E896B007B; Mon, 24 Jul 2023 05:48:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BB82A900004; Mon, 24 Jul 2023 05:48:09 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id A3BF96B0078 for ; Mon, 24 Jul 2023 05:48:09 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 69931C09A2 for ; Mon, 24 Jul 2023 09:48:09 +0000 (UTC) X-FDA: 81046029498.15.035E0CE Received: from mail-pg1-f173.google.com (mail-pg1-f173.google.com [209.85.215.173]) by imf27.hostedemail.com (Postfix) with ESMTP id 9E4124001A for ; Mon, 24 Jul 2023 09:48:07 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Am7FnjS3; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf27.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192087; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ztwb9n/1dXh113w/8xubUIoix8VXd/5rqVT4RvFn/tw=; b=i99kcYBQA/tKDeW6Yau+l+9YfdPGs7Vn1vt8bbL2YZXV8JhVeXTlf98YLJnKJWaGyxfo+Q KlN1Zy8SZ9BP5WXO5WMkV7bPUbTULAkKskOjti/5MNZeVdykSZNtjBSqUOtBFw/SAbzQph hcBnjDMuA2QST9YWnSskEYN4YIWR2lQ= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Am7FnjS3; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf27.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192087; a=rsa-sha256; cv=none; b=KtgImek/jUZmDD8YNvjlFi7ZJo5b88OyAOR5VjOEv2JmhLIGl/RWJT/zkJ6gxRaa8MXzUo ggkiER2yd2N9odG/nFWGTnbBDmfHwOL5ZZz4o6J81fXejPeJKXifBivhVFr0D4OJmNADbX Am83hi5RcW/868sxYIgceHNy2mnWgi8= Received: by mail-pg1-f173.google.com with SMTP id 41be03b00d2f7-55b5a37acb6so326599a12.0 for ; Mon, 24 Jul 2023 02:48:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192086; x=1690796886; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ztwb9n/1dXh113w/8xubUIoix8VXd/5rqVT4RvFn/tw=; b=Am7FnjS3Cpm4I6+unn47wV0WInP35j7cWyw7YSHmXYddBbEndaPLIOhBD501lhuXhz ziS0uq23cHOpl1MZygPYTe8AuNvoAdPlGK8k32I3Ef9lRu2tiO1YjBbYZCD1R2rMLxT1 sbS7mgch7/EfOaLRKT3V6tvhfJSY21ngFnqMEHN8grEnjoqg0M6Q11qf7CVQTrHQJzW3 E1Q+qRl3oeLAaumIkMGruzrANQhf6ocLGFa54JS2CwGaWbDUA2Re4gbZJ2jDKM9ntSrw dCSeZvHulgVnMl/ivIn59gXFxJS3Mnbl4ERIMhlA37amtawTgx9ciEfDapqLjZzr2ZBw AsLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192086; x=1690796886; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ztwb9n/1dXh113w/8xubUIoix8VXd/5rqVT4RvFn/tw=; b=iSIDw6Uxpcbx2EbYfOQdT01d73iLMAI/P6AudT8WHB+zUVMH3RfF122m5bHWunfO7k E7XQjy7QECS6LX7QTzYXMZMTCl+AH4X9JTiMD/s/8bJw37PxgVeKu4yTOt87IVrSnCTL hAOcdoRpPDAHT9ufHkuSZpoUsWnAJwxKTUNuWwDhrxl+cAt2ybO0jyc0f3FYL69qMq8z BbXAoZBLTdVYK8ZVrOjIbISYHwJSrafGdKBsuHG1ZgDTO1VtW3UiK3BantTPTlcy1SlM ZW19BJJINdf2MJJWVNomBS2Xr1QMSZb6njOVZYGI06Ek0eTNTEVYbluzsObZXviFWA5Y pQ6w== X-Gm-Message-State: ABy/qLbeizo4qdoCJVTEPVIbuX5YT0VA4QBceH82kB3sgrESBcZMTouQ IDFMO2RDjmfbsrEY91cDj6ko1w== X-Google-Smtp-Source: APBJJlHRxCFTSeAmJPIiRwzXlrngv0y6n5gqphR6YCBFCcMRvGq0CtVM2WuFHUMj7p5y6QUWxkmpXA== X-Received: by 2002:a17:902:dad1:b0:1b8:aded:524c with SMTP id q17-20020a170902dad100b001b8aded524cmr12538511plx.1.1690192086608; Mon, 24 Jul 2023 02:48:06 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.47.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:48:06 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 15/47] quota: dynamically allocate the dquota-cache shrinker Date: Mon, 24 Jul 2023 17:43:22 +0800 Message-Id: <20230724094354.90817-16-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 9E4124001A X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: p6ch68z5faabhzh4jsq1xsinb9nxwpg9 X-HE-Tag: 1690192087-146333 X-HE-Meta: U2FsdGVkX1/qbydOvJy5N3MBdQb9jakRHqb4UO42ePJXaGkERTl/db7PjvSzYen2oJyj3vSRJyCjiiTJRthxkorFOYQQAcvnFq3JSOtdTl/cDsLJh9u4TsDmYOCuTQk4Zh8HzGmZSVkvokPHwrW3bCZVXWTELFtBkqluIEZL+wQOD0rPNy1abQ1nzXm7zgjeKue/3IXm/P1q9DQk7F4lxH+OcVwQnyjD6f40sDTyD+PxuS1YslFFHUAXNB7VI9KMj8g/F49n4I+Wga7JorJKMdX269ARcg0UPffxyPPMTUvXr14Cx0aYGXEuGVFa15+JwQ2tCASG4s74fDYSqMm/sYeGlGu8+egqRhEBwzeYD19zvYsGRrHtpNVMzIf6fJKAnHQNKypvt2XNMMZkRt1idElAUF6rCFp5Cg+PDcbSynnSvuASpHoQ0i8fWm5K95OJziTW/vI41uPd4Q9wYL+OZGBN8ZXJceUY+rd4kIiOD9dab6uRBJAGlWBZzcYL9MKIF4dWmdor+AZI9LVESJ36r2KiPsWKRLkd6fcQ21hl1tp8vgxh8OV/EvYw67CDZ/3OK1h5IL/qBfBo4f5t33dUOAHR2560csqGDy+OYuDSCDbKT35aY/+9xg9defmAYcb2Db5LzXQduOAiyK7JDhDRt6NaViixyC6P1524+6dx2dd29iLVLWiec79o0HJU9rGclPC75sFBPhfuHCAFxSfrm3BtLJ9TYy76elnKVasxOOeXHV92CmLLdYaiyJqoDtLh5Mh3vJpXgW+ONUD6/0O6lkKjTtBwNy0ZTZR4lyQvYbsCHZ3CiN0wt0uWnaeg++1x3XOoCMx3pvalUBmvF4LzMaRQUuq1OtMVLwCiJccxpq1VY2qvsrFCtLD8aAH9EtOoySFKQsyBQyK+UKdMWwN1ec53vdkvB34H7WdmQ6J5zYle4fkoQNXs11OfUvpFFssH/kUtAF0aN3sUXNBDgYV 4mEavv++ WyVyI/tyv6t37xGmpeKIqYzpMNFv8q/METdKyBlZdnBagkWfZVMcKBxtZW1LiLNonLtN+HpSbD9OvIjnBVCpM8VTzbVNE+H/4yUSMMwwigqD3Ip6jm2erm71srjNiEGpqCksT7bQm3e1z1C+Ne7mAGYS6rvwCJcCbRyUu9VfBhcV7iUuK2ZQAEe4kNxpsm8D4QJo4oHWnKaRiJaBIXaq2iaiGH3l0riVz3JY8p13PzpvCfRiXtgeXHkTkmTBUiGWBtvJayuYBiv/VaIB3L3zA8E7sjRrcQvRKkURc7YyLv6uBnTtsQ3WQGLQqc3PBA+ahSsjYXCb5XLW1QloBtkswFvDEf+yj1wRmoH8tVR+53L9tcLB9K20Ssnmzt/lBKXKvlrYdhmJANt2qz/pGzT/nKl6lXMByR5FIZrba 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: Use new APIs to dynamically allocate the dquota-cache shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/quota/dquot.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index e8232242dd34..6cb2d8911bc3 100644 --- a/fs/quota/dquot.c +++ b/fs/quota/dquot.c @@ -791,11 +791,7 @@ dqcache_shrink_count(struct shrinker *shrink, struct shrink_control *sc) percpu_counter_read_positive(&dqstats.counter[DQST_FREE_DQUOTS])); } -static struct shrinker dqcache_shrinker = { - .count_objects = dqcache_shrink_count, - .scan_objects = dqcache_shrink_scan, - .seeks = DEFAULT_SEEKS, -}; +static struct shrinker *dqcache_shrinker; /* * Safely release dquot and put reference to dquot. @@ -2991,8 +2987,15 @@ static int __init dquot_init(void) pr_info("VFS: Dquot-cache hash table entries: %ld (order %ld," " %ld bytes)\n", nr_hash, order, (PAGE_SIZE << order)); - if (register_shrinker(&dqcache_shrinker, "dquota-cache")) - panic("Cannot register dquot shrinker"); + dqcache_shrinker = shrinker_alloc(0, "dquota-cache"); + if (!dqcache_shrinker) + panic("Cannot allocate dquot shrinker"); + + dqcache_shrinker->count_objects = dqcache_shrink_count; + dqcache_shrinker->scan_objects = dqcache_shrink_scan; + dqcache_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(dqcache_shrinker); return 0; } From patchwork Mon Jul 24 09:43:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323751 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 4B29DC0015E for ; Mon, 24 Jul 2023 09:48:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DB487280001; Mon, 24 Jul 2023 05:48:21 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D3E276B007B; Mon, 24 Jul 2023 05:48:21 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B90C7280001; Mon, 24 Jul 2023 05:48:21 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id A7AD16B0078 for ; Mon, 24 Jul 2023 05:48:21 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 6A4C8B118F for ; Mon, 24 Jul 2023 09:48:21 +0000 (UTC) X-FDA: 81046030002.07.1E4DC7C Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) by imf08.hostedemail.com (Postfix) with ESMTP id 98DC4160014 for ; Mon, 24 Jul 2023 09:48:19 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=bDwQiK4f; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf08.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.176 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192099; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=av+QDe1dYuRDqLy0LPAsVex0suGCyDNqgU4hNImbDOo=; b=6i0tlGrt851CrjFnMFrHVQooTmjjlUKHm6VFXgJ9Q21iu+FgxSE8jCspx/3z1y7T9e4+Xt WTjELNm0wKlEz7vRG4K/4KfNC+arePA08kkjIUrUm0D5EMk+lVJQ6N7J0SXwGJwr3gSVgK wy/G8/g8VlB5KKGencS0LWfEufXgh/E= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=bDwQiK4f; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf08.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.176 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192099; a=rsa-sha256; cv=none; b=bpyD1xugTiSaoWPlafgUxotEK74d2jLOr3TRnCSIR2m3Vi7vT5yQLORhYjyaOVifcIz56L uKUri7FyLF5dypJPjmyLr2ccFvFBcxmNOPLx/KxuhjN04Ikg2spcUK66f7L30NIEDfQHqN UhvO6CDna2j6ii1YLgw1rFmzBT1we+A= Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-1bba9539a23so643255ad.1 for ; Mon, 24 Jul 2023 02:48:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192098; x=1690796898; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=av+QDe1dYuRDqLy0LPAsVex0suGCyDNqgU4hNImbDOo=; b=bDwQiK4fS0yTwWq4oVGVRKxPIDCclDxFD1XuAsmfHKruu98HTXXz11gYjdkSK/HgQ4 rQnPx3dscLMyKil4aICcT0ClG/ZXMBy6mCQ6rCkQE03v5xWhoTzeYQvpLwD9l9p7vXT0 v6DYimpLGMp1ValFsBMSR4AyqoftBHG/Cr11IkBPDpuRa7fi2izlKP1Mq3g/2PWtCUJ9 byo8ZZ2a8q2qzXYTrMXoHTjOf2N4B4XMSkAD5N1iIFEjrTIqUQlkmwpGlE+j3WXksgRd fNHXLvhFxXWRY9vsToZ4OCxL1qfGN5pYRyHLSBIlboKFdsL2/OFWebl/aiL58+zCQO6q AKNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192098; x=1690796898; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=av+QDe1dYuRDqLy0LPAsVex0suGCyDNqgU4hNImbDOo=; b=B344lp65sgr0yl0mHMe+fASv55vd0zmRgtwaxMRvgLWvwazrQPVkrvlBaRDe4PVlNx lH6CsGX4m1b8658fYwuBTUoRcTEQaB1bV5dqvd1h/vHeH1+ysmyhCl2jboNf+eNyV4PG RHqd0VU8JKTj5Ojvq+X986I1tNu/LOlCQUJvRPLhWmOLT9SviB7EHwogssTwWYJyv3BZ aYnR24CvK+HzhFsyimf4tsiyF0dfIZ8WPdk0rG6ad8g1NgVjg1wD0+ESk9m19CBDZP43 SBZh+F0n+JxFyNh3NaxK0P60H2H7wfJk2uNUxXRVFzjfDxz4G8LLaW3fRkVCFYUPYZ2g FvVA== X-Gm-Message-State: ABy/qLZwtGeBoVF/9z8STtqwrrKKTzSJ1Nd7MG2dnzFT/AYhEBPWYGtw FXsbsIBEg8UKFw2Nxh90tsjDyA== X-Google-Smtp-Source: APBJJlGdal6NRof8mBJ7MOpqyhGdVFWorp9Fsw25TA7e6Zh0vfd9YbcVPo2ONhSqPJyVS7KwA30xww== X-Received: by 2002:a17:902:ea01:b0:1bb:83ec:832 with SMTP id s1-20020a170902ea0100b001bb83ec0832mr8333588plg.2.1690192098526; Mon, 24 Jul 2023 02:48:18 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.48.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:48:18 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 16/47] ubifs: dynamically allocate the ubifs-slab shrinker Date: Mon, 24 Jul 2023 17:43:23 +0800 Message-Id: <20230724094354.90817-17-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 98DC4160014 X-Stat-Signature: d3xkjin19ztbth6bpaapdixkuxrhen76 X-Rspam-User: X-HE-Tag: 1690192099-683332 X-HE-Meta: U2FsdGVkX18pgeiQQ8dWFDwmaYbXQCysnTo811+TkCJjjdaIlFpDhoEeH+wyGnBBk3mtZqHloz7Pz/Wq7rDG4TGjoOi7q9lVqRp/ple1rrnM8K2qnt+B35KHqh0jQGauYosdZD3CnT9jjFqklocOlBYrfQ4AfSVoxMYRnItU7r9j8qrGS0n9Zuoy6Of3kEa2ExVJBVk4TEdrhCdsdRYS5gweftSmpKGTzOQ+b1tbdHDIt3hOnt19gro4QzbTdFoIssULR4oZTP+0apNujRYu9bri3DVdWD9Q7+iqgVJ36LIzKiXEvIOcMKG+TeribOQ3lqvLNx7nAv4tLys4+P7TAVxiAxkRA725Eqyy/Eo6qTzP4H6NVWTjaz27XgzbTP7UfMBqajIiEFNOEMbllxAXrgR0txxnE5Av9MApTQzA4zgLUSn5QwTThH2/EUdqdHEVEZXbd4GNZjQc5Mi3iP5M/ovbw0dkeWMXUDMFEcnSPSIBm2hop7+cWhVE7m2dLq5+DU776slyU6vrznwZNfJw1FVUWNyY3bBhOgxxbtcAZ4Bqh0r3+Rtwm7P+q+AZhrnmADsMmnJzqokPlnd6UfCwk4lubftdLQGCb/a97jYIDPhBj4llD6OvCoRZeCj02nSpHe335Nr8NDZ1NNPP/0PDBF2Mm/GUQGVAmmcjmPn0oXz35D+4xUmo161Lf3IaqadeTlOMPqMinGOlJ7CECTL3khwBcdBV/IiTvnW6iNkQqHsFAMaHzvSp3PJclMWWcZuDfzRJ7FdN0EVnF+kjQk7MGbSBw0kkfktSu1P1qqQlWkqYXqHnwcoS/OGEiqXQ8i6g0wPPBR837x/dqow/JzxYPFfxT6+7TRQz1xUVCf4AUaOuIlekC1eGEytnZs80x5z0wEZOh5Y8byxZC1F/BX149jDc3OY11wTaaPUgDixk8LbC+RKu5bso97kNMUHUppClWTEiLQqnAbOdWJKoExK VVxfNsgm K61R0LRErsnWmRgTtU/5M86KQmHlwJshdPV/XFwPfHWgVobjTEtZT4QcmD20eF8OBskCCdGk4bV2KlUi+f9yedFHDMieMhrZBFCEVEzYyKYoDBAq4eurh6eE6piKl4KfcFcyUfW2IkAAw1W9Yl+RGZrYXFxTNmjkLfa/0HiWEB97rIIk2wMsfMgR+L2gk4nfU1u/d7vxN2dtFUJWtfptkT70Qb/FNHQDr8N+Y8wmlNwnB5V9voblhtEcj2xPChwV0jApil0U01haum0/qDRoaU3oukQ3urY4nQ7NLRjWLrziRvf9Nxngvb0jOxBNfkFmsF+UPsdVhbFDm2eEKW/rpr+4Z5vwCaoq5XyZpZ8aM5iBG2zh7drfG8sF48gAzxTPYIO9UMYhpdoCsTRhdijxp6RGNelSW3S7ILRC2 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: Use new APIs to dynamically allocate the ubifs-slab shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/ubifs/super.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c index 32cb14759796..f2a3a58f7860 100644 --- a/fs/ubifs/super.c +++ b/fs/ubifs/super.c @@ -54,11 +54,7 @@ module_param_cb(default_version, &ubifs_default_version_ops, &ubifs_default_vers static struct kmem_cache *ubifs_inode_slab; /* UBIFS TNC shrinker description */ -static struct shrinker ubifs_shrinker_info = { - .scan_objects = ubifs_shrink_scan, - .count_objects = ubifs_shrink_count, - .seeks = DEFAULT_SEEKS, -}; +static struct shrinker *ubifs_shrinker_info; /** * validate_inode - validate inode. @@ -2373,7 +2369,7 @@ static void inode_slab_ctor(void *obj) static int __init ubifs_init(void) { - int err; + int err = -ENOMEM; BUILD_BUG_ON(sizeof(struct ubifs_ch) != 24); @@ -2439,10 +2435,16 @@ static int __init ubifs_init(void) if (!ubifs_inode_slab) return -ENOMEM; - err = register_shrinker(&ubifs_shrinker_info, "ubifs-slab"); - if (err) + ubifs_shrinker_info = shrinker_alloc(0, "ubifs-slab"); + if (!ubifs_shrinker_info) goto out_slab; + ubifs_shrinker_info->count_objects = ubifs_shrink_count; + ubifs_shrinker_info->scan_objects = ubifs_shrink_scan; + ubifs_shrinker_info->seeks = DEFAULT_SEEKS; + + shrinker_register(ubifs_shrinker_info); + err = ubifs_compressors_init(); if (err) goto out_shrinker; @@ -2467,7 +2469,7 @@ static int __init ubifs_init(void) dbg_debugfs_exit(); ubifs_compressors_exit(); out_shrinker: - unregister_shrinker(&ubifs_shrinker_info); + shrinker_unregister(ubifs_shrinker_info); out_slab: kmem_cache_destroy(ubifs_inode_slab); return err; @@ -2483,7 +2485,7 @@ static void __exit ubifs_exit(void) dbg_debugfs_exit(); ubifs_sysfs_exit(); ubifs_compressors_exit(); - unregister_shrinker(&ubifs_shrinker_info); + shrinker_unregister(ubifs_shrinker_info); /* * Make sure all delayed rcu free inodes are flushed before we From patchwork Mon Jul 24 09:43:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323752 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 185EDC001DF for ; Mon, 24 Jul 2023 09:48:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AF5F7280002; Mon, 24 Jul 2023 05:48:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A7F076B007B; Mon, 24 Jul 2023 05:48:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 921E6280002; Mon, 24 Jul 2023 05:48:33 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 804986B0078 for ; Mon, 24 Jul 2023 05:48:33 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 56BE61A0A16 for ; Mon, 24 Jul 2023 09:48:33 +0000 (UTC) X-FDA: 81046030506.04.042F2EA Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) by imf30.hostedemail.com (Postfix) with ESMTP id 8366F80004 for ; Mon, 24 Jul 2023 09:48:31 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=aCj2BNfr; spf=pass (imf30.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192111; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=8oqpenbl7KoJJhQpMWpio5jwf7tXqseO0h4l218M5aA=; b=nH1OFStr0R1DWkjXp9xQyYR1yT884JIyc8rj26R3gCuHP/L1G/O2EGHtJ/bDyV6MUF0p9X JtMU/bK9DfWP79bk8Y9ydLtXRtW2yhK2hH+pISmg0MjtsARqDVOEPbOLtWK/KIHutYxmxN hMjF60SYOJYypp/5HR44J1qUBdDrEL0= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=aCj2BNfr; spf=pass (imf30.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192111; a=rsa-sha256; cv=none; b=ug/AGUUivZgxjif4AIqopAPL1939iYIgUO4lyatf+UGT10kyYsX57tyf5EODX4mjaju3Xq TOvshA7R1BpU4ocU7B+txg2UvAIcXxxYEO4IWnaa1ay5u/RuwapBAEPBWm0LSVxPVXcdAB Hb8ma6Sg698LE9MKjKaGL1UTEcfjKhQ= Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-1bb85ed352bso2235745ad.0 for ; Mon, 24 Jul 2023 02:48:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192110; x=1690796910; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=8oqpenbl7KoJJhQpMWpio5jwf7tXqseO0h4l218M5aA=; b=aCj2BNfrpcxtoTz1/CdONfPnB9TAYVTaqB4T4WqFv6y7Hxl9V0boEFHOTATComBNn2 xnFJ8tDKgZzO2TH4FwPeDTaYzb9x0D/uxmdjUcwFhXWgN5824wox+O8c9U9ybGUIohlv M3vK6kDUgbRBz02IXlUWPuxdPW8hkxiMWgJebr95xqiqSLJbGYOLAINvEuBU6c5+0m2D KwQfMs1a5lB1SKCsavAJR55Sjok6of8gfoBXMKjbRTfwQ6NM1BD/3dZZP6dR7OXOKSHl QBl4iWtqq0OikEBOGyMzrxqP+jJMX2cWmHkmCbYCS6DP7MDoD2ilfcJavniQ/pgHFrWu bw9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192110; x=1690796910; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8oqpenbl7KoJJhQpMWpio5jwf7tXqseO0h4l218M5aA=; b=V0FZ7bnWSdoMPxVu4Lq3D83fFzbTvbVZ/bVBgoKvHIrZwBtX1Xv5o3P85/PhJe7TE7 g3heUwl7C5shH0fK8tGguCcmW5MIGg+Y9wBJkUZrsungISVYofmSc3FnUy6q23s0es7I gjaCr6SOaLLDNZ/Iya5dlfcjXP35B3ExbR9guqsklyx/GSkz/DDFgPLt5W7aByUw6c0H Is96KgL2zV9tMa/65Se6BOQCi1cqkqhOMoTys/bBpy/idQFAP5T5ohhLqNiosOd6AS2j 3MgYb5o2VtXVrshKPTAM/BbF9yG3u3n0bFAXUvAGby/eE9Ct1dj92ZH5oMqwveuiQFPi TrUA== X-Gm-Message-State: ABy/qLbXdenGVYmEaM+Jr+DZCigjn6IAEq1kqcAJ67/2Aksv2fHGBoST lE4ctQ8r417T6XMpB2BpG5NnBQ== X-Google-Smtp-Source: APBJJlFv5Kl04F8rp2naJTMNzHe6rYzFJJPXcSejcs04WaV/YhAbklIOobqPbsV/O0Fdd5o/IKlERw== X-Received: by 2002:a17:902:d484:b0:1b8:a27d:f591 with SMTP id c4-20020a170902d48400b001b8a27df591mr12259746plg.5.1690192110449; Mon, 24 Jul 2023 02:48:30 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.48.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:48:30 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 17/47] rcu: dynamically allocate the rcu-lazy shrinker Date: Mon, 24 Jul 2023 17:43:24 +0800 Message-Id: <20230724094354.90817-18-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 8366F80004 X-Rspam-User: X-Stat-Signature: 8xyekxm8jjqhzqqg6cr7jmsr7gmiy6kr X-Rspamd-Server: rspam01 X-HE-Tag: 1690192111-922946 X-HE-Meta: U2FsdGVkX19Rj9ARi3cqXr8QeA9O4o2MjulPPtH1xtRGOLVdJKGjjA7JVEPV6xEhLURNoteeyXiymazCid8LcEavviBAfOlJUvwEQCshesB98BfFzIxsgp8H5cLpEUrpUg2nyELAMo0G+B0USakRInH8wGoIX48xNMr1Wga+lVza+lzb7CfuThPyFzlzoV93UNd2Q3+B23NpMi0qJHqDHquY7EKPDuFybfPI2Ius+3VVqqs4YYr+UoPGlXrh9qL+0mxL2lj1tjD2Em8+EDK9VsVw5JY9QFA81cFI3A6dyowP9l8Cv0DMviYWlu5omrzgEcRrgKu8XRIgWjigpG4BI6uBDC7QIHP9LQc/5r9zNaZppTQMRrXahNUaboFlEt6yrmzPWWk/GlBwxCsoWfJtRBBLtI3gAh/dZMAwSrAqWEF45ERRiZ9PTu73GFCK+zLk/K8ZoQaWlrJiSywi5YVwaAG3ZboXR+2w8ijHB01pEwu5Ba7QOASccwcGE8soT3wvxBXiDFvcwZrvTGCkZehaR2kwyQ+iX4kbw4aqOiAd3v1UvgLrnS0+82gMuVHm6qoLG50QXrteNZxCpbPKUPm2lR0LVmwKQKe7JUo1gwL0JF16ffjPYFWzvpSB/3ReIH/X8FqmcHnYP2YThquoOrl7Vy0kcdoBDudBMqTnwQRkkTY2z5Y2Pz3/Zh8xT0Sz2codrFY3F9c4z+4ZkbyAQyXYsWyrflpCt2RZPWQJx7viSoXU8bDq7ZPQqBESjGW7Dw/kxWtNopZ32gWdKyUpjXzNVE+GPqqBSZWqqIGD0zHTREqF4xHgqV4WlRsBQ3hUMoQZYvHVY8LYATlEzCarQEUJsYbVeRm/JzeVJRNZv+O6Xqs7KW/NEtKxIKj8GIkCscgpoAIBO4Bsw/4DwauRxgFRKXCBE4Vw2JrmXvPxY9DjBO+AcJgXy718ViVafqaa0Ax6GMtR9M22NL+Nf2NY0uV IwkwMDJX OAqXEOssoy+9u46mwbbJJxdi/X6PxSYyCikzG2TpKeLK2/sgWjk6m+Qbd3TVrb2UGSh4rw43JxxyMYDCTtno2884UZizXj4ewwywfEpvXs4otiSLaL0AIdJvyMrx4C2gax6mdJkSyprK0o8UJO4sj+pALzihoJPEzBWdIPPU2WpII4QAWu2wpvJtwUX/qe9eZst3Jzazwf4bcVWHGJ1hVCxtzfZIbHonnug+FRVtabIuysz80ahiAZIGMi/HZX/P1mEx+2SnmVMEvBJ3eshisnSsbcEcp6PpzJwRnwA8eEJL+PvCBX83Qkw/2u3CM9oLTzK9wnmP95zYZtKHSiVpO/5JUC1vYgdbPvTGbay5sSRmk1GZ5IAo+WU8KUI6101vsSdCceD2JEJfdVippqLKW2T5PorLLjD8KJUGy 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: Use new APIs to dynamically allocate the rcu-lazy shrinker. Signed-off-by: Qi Zheng --- kernel/rcu/tree_nocb.h | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h index 43229d2b0c44..919f17561733 100644 --- a/kernel/rcu/tree_nocb.h +++ b/kernel/rcu/tree_nocb.h @@ -1397,12 +1397,7 @@ lazy_rcu_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) return count ? count : SHRINK_STOP; } -static struct shrinker lazy_rcu_shrinker = { - .count_objects = lazy_rcu_shrink_count, - .scan_objects = lazy_rcu_shrink_scan, - .batch = 0, - .seeks = DEFAULT_SEEKS, -}; +static struct shrinker *lazy_rcu_shrinker; #endif // #ifdef CONFIG_RCU_LAZY void __init rcu_init_nohz(void) @@ -1436,8 +1431,16 @@ void __init rcu_init_nohz(void) return; #ifdef CONFIG_RCU_LAZY - if (register_shrinker(&lazy_rcu_shrinker, "rcu-lazy")) - pr_err("Failed to register lazy_rcu shrinker!\n"); + lazy_rcu_shrinker = shrinker_alloc(0, "rcu-lazy"); + if (!lazy_rcu_shrinker) { + pr_err("Failed to allocate lazy_rcu shrinker!\n"); + } else { + lazy_rcu_shrinker->count_objects = lazy_rcu_shrink_count; + lazy_rcu_shrinker->scan_objects = lazy_rcu_shrink_scan; + lazy_rcu_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(lazy_rcu_shrinker); + } #endif // #ifdef CONFIG_RCU_LAZY if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) { From patchwork Mon Jul 24 09:43:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323753 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 370D1C0015E for ; Mon, 24 Jul 2023 09:48:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CF2386B0078; Mon, 24 Jul 2023 05:48:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C7BCE900004; Mon, 24 Jul 2023 05:48:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B1BC0900003; Mon, 24 Jul 2023 05:48:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id A15B66B0078 for ; Mon, 24 Jul 2023 05:48:45 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 742B580947 for ; Mon, 24 Jul 2023 09:48:45 +0000 (UTC) X-FDA: 81046031010.29.6E0C197 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) by imf29.hostedemail.com (Postfix) with ESMTP id 89C11120019 for ; Mon, 24 Jul 2023 09:48:43 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="J/Bt6a5B"; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf29.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.182 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192123; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=SZ4CyloeMnj8DJaX3jH++Kh0s8L9fcE8HheaL79+C9E=; b=76FQJ5Ni2+N25wrfdcjibsLLO97W51py/hUEGeiRHt0fqpPkyJQkKgicSSy8Xq3GzA0WF2 uHKE/a1WBr0Cn73+2zYKAXdmr3FOHIZCvFddT5HtupO96jvRQH6XU+25t425CJXkzrMp/4 2oxeG9Ozt/oAGycAomgdkqyxq5nOEaQ= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="J/Bt6a5B"; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf29.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.182 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192123; a=rsa-sha256; cv=none; b=MgjUcO1lyjgQP4652nP7X+lb0XwU1aYcHUF1z0VHaezKemf1nuK982qGWOtGJPULpRSTmi ryfrd11VEspI2JF61uV4seVOn1MmQ49mX7165BrmOI690l9qke3WMDeMe8APhsPSYYnOc4 Ln4bDsg4jMIp3yR8N1ih6Ta00W/XZbo= Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-1b7dfb95761so5877675ad.1 for ; Mon, 24 Jul 2023 02:48:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192122; x=1690796922; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SZ4CyloeMnj8DJaX3jH++Kh0s8L9fcE8HheaL79+C9E=; b=J/Bt6a5BMqhvdU/1SLuQX4nGlsOFwUStDgY9eH2v8f3RVdFq/sd3J4KWhio/dC9+p1 I7x8MAszW6LDKxiafO3ijuVZWlwLloveljXquKUGhfhkI+gBmVZ+aRdkRgZMuHOMA0H0 yKIvOrvLzQBJ0AtrK9ni37EuWpbTH6Gi1xp5mvGIU09YEhbSx5XeAtmIIM3L0YDCA4IY cOQImgDx6CerfFdixsFA7q/WRBoRbwfsUuvzftsn9rBMTfKTu+7IX9QKeDCcJjiigyeD MRXtrE3UPxmcDS5U+FzEfuL+bhB6TGOFiKBVZLyyImDcoC0jgqbvAUMVzKpuo72Ccxdg yqhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192122; x=1690796922; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SZ4CyloeMnj8DJaX3jH++Kh0s8L9fcE8HheaL79+C9E=; b=GBRs9RLekeakuI7PKvMtIoh+5zCn/98djrSFYVYtjTNaIpNH8Sxvq5SNstldj6drmW /vWgyRexkC9ucNc7nBhWpNBVvq4AYeyLZWFotG4W+/NcUNUPbepk7zDjoDTWs1xoLD1Q zR2m88mQesvOoRj9VNBRFh6dYgaOdTMrcNqWTfKSBkZhrSN1T2jMvL+G2l0UMF8Zvp0j a/WdSKEW1zs6RO2x6YUwMh08sUH6w/kySUaqY5PhDGb4Rmwy2+jBNqRmOhqRb54vsX3E x+h1KJZE+2/duDfc9LB59S2F/eCtD/MaqBQzZZ1Cq4hzUvn0RLQYdylR0JW+S2uqcPGm 11gg== X-Gm-Message-State: ABy/qLZ8f2rJrvL2yvVxldkPqE78oBclT/gfj7LWpZ8fzzpR6+PK6aUA WytLIAVZR15rHmFYuR8kvDmWEw== X-Google-Smtp-Source: APBJJlGdl4zR2tT8oeBRlnNa82kteJScCMEv7aXbUuimbAqUFJ617TPjzQL08XTMcGzg+wanNIE0AA== X-Received: by 2002:a17:902:ecce:b0:1b8:b55d:4cff with SMTP id a14-20020a170902ecce00b001b8b55d4cffmr12423850plh.2.1690192122325; Mon, 24 Jul 2023 02:48:42 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.48.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:48:41 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 18/47] rcu: dynamically allocate the rcu-kfree shrinker Date: Mon, 24 Jul 2023 17:43:25 +0800 Message-Id: <20230724094354.90817-19-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 89C11120019 X-Stat-Signature: mixbppjw4q4kgphoemb9yi9zktqe4jo7 X-Rspam-User: X-HE-Tag: 1690192123-997956 X-HE-Meta: U2FsdGVkX192KcCyyd6ZcseAptcm07KwFNlNM9VqtCbccjur7e+g1bBFa+jhrMeeuwoSUZyFX1I3TIVpFiRTEiEBX83Qh970MmCnjdncgUkQKCveZ3E8gD+OIbCw6pEtD4eWbUQzMdbwO7jmOrQBdGp7epauJ8+X6KB61EBfUTQaSmT+hnK6kaOBicYXVOOKFmG4LdOTKn6faxKBxZVVSqbIoxzjDUyTskr5RnohrB1u4lPqX/SPtyuKNvkyQcYcAOmjzmcnQBt1E2jApEzfll144oHyIZlj3SyldTVbDQEDAMYcsHKvkwx66rM/ccm6p/htX712YeLehjUUALFBQrXyqYHAdmG/dSHp0fa88k+HGoOOLcCuoWjZo12WEguNfVSmkI+/rAQWwH9rU63EiOQtsLI8GwsNrOsjrf3XGe3fAhHI3BgQEfCtMVl7rys7rI7EAg3Hzy2oYC0uF0gATN7Z+Yt9ai770kz1/QuRQLNP17VDz7ZSLQQFD2phMeQ3JJfOtPke9EGlkKJY2tJCPsuBFfTGMPX0EwWVwu1zfkJtlSg8uy7qxwbUYioO2xX9eftnEKRvv9g+IMRcYcJ58NtY8zKxSyD9rZ3soA+dZyJBw5UiK/8UdSh9MJ+wJEDfg9rx9WpXKMqWBOVx5J/z1QWKzyi0rsbt3h7tRqBtK25WPmHGRFveLz1icrMPU4jYcYA5RgYw9uQhf5IahaMPcyrKY+uAxcYVEcYBJWY9P7ulsTSBCZH/yj1ELppWzQvXe+m6CWe4Mmj9TVKb5KrlKYbPdWvK01Q3fD0MbYKe0HFR1Lsom9YAUgzCB7CnZlY37sddHo/TP4qK8Wty8RNVVmvNYiOsOn+eXRLTg2ixGayeszl0nfJbYLt6snj09M+egdxmJLdsv5XgPpmKB0gfIuZ0rVkckSybUdSc4UrWhMuJw0iAvLzAlYaxgDjG0D3zXnwFSWDuyeNVY2fghJ/ ZAdFmhI6 EiBHt0sl3m7KsjsAqwCJmduY0TsvtbY/G36y1bQvnmUXE7gazPVltkSA/UB/QP2Fx3KCwo9dbIgqX0H8jGxkL1l0jzMFjcRdVlmJebiWbfrScW2dLomyuEmTBunSo1+ALGSxzpatA16UUaGkY9xBADdE4vlBSfagWFmMQq7DudC3DuGb0etLVXZ0TpJw5g0tIZrprWaxEr9AE6CV0MT4T+wRNVcHpiwVS7QqtcL3IjV+v8iQf67Kg1CRuh/5YwNGiOXtvQpOe3G3rD5wuWycbae1x7VUiLqidyT2wlS1MMeDemW5J/qi53bCBrBS2V1Rpm1N/wgtb9V/GHuSSJm3VbA61P0SINhqD5yyXWZfsg+TlInJMYbQvf/UIJZYtJ8VcrGWBoRVRnwp7xJEx6jZmo8iV20ZDTeQ6Sm3p 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: Use new APIs to dynamically allocate the rcu-kfree shrinker. Signed-off-by: Qi Zheng --- kernel/rcu/tree.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 1449cb69a0e0..d068ce3567fc 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -3445,12 +3445,7 @@ kfree_rcu_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) return freed == 0 ? SHRINK_STOP : freed; } -static struct shrinker kfree_rcu_shrinker = { - .count_objects = kfree_rcu_shrink_count, - .scan_objects = kfree_rcu_shrink_scan, - .batch = 0, - .seeks = DEFAULT_SEEKS, -}; +static struct shrinker *kfree_rcu_shrinker; void __init kfree_rcu_scheduler_running(void) { @@ -4958,8 +4953,18 @@ static void __init kfree_rcu_batch_init(void) INIT_DELAYED_WORK(&krcp->page_cache_work, fill_page_cache_func); krcp->initialized = true; } - if (register_shrinker(&kfree_rcu_shrinker, "rcu-kfree")) - pr_err("Failed to register kfree_rcu() shrinker!\n"); + + kfree_rcu_shrinker = shrinker_alloc(0, "rcu-kfree"); + if (!kfree_rcu_shrinker) { + pr_err("Failed to allocate kfree_rcu() shrinker!\n"); + return; + } + + kfree_rcu_shrinker->count_objects = kfree_rcu_shrink_count; + kfree_rcu_shrinker->scan_objects = kfree_rcu_shrink_scan; + kfree_rcu_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(kfree_rcu_shrinker); } void __init rcu_init(void) From patchwork Mon Jul 24 09:43:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323754 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 3DA11C001E0 for ; Mon, 24 Jul 2023 09:48:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D194E900003; Mon, 24 Jul 2023 05:48:57 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CC99D6B007D; Mon, 24 Jul 2023 05:48:57 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B1C19900003; Mon, 24 Jul 2023 05:48:57 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id A09006B007B for ; Mon, 24 Jul 2023 05:48:57 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 7AEAFB1FE2 for ; Mon, 24 Jul 2023 09:48:57 +0000 (UTC) X-FDA: 81046031514.02.629E6E7 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) by imf27.hostedemail.com (Postfix) with ESMTP id AC60540008 for ; Mon, 24 Jul 2023 09:48:55 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=aydgK7bn; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf27.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.177 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192135; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=hg2vi+2AAPCRuQsciRtLylYUMTgaXzyfBXLGSnv8etw=; b=rBx9X3IQVgnyZwf9uOS+ZZctoizkzuT1w3Xqy6Ys1YatkEqejRqaS9tJN5YP2dKeQ4RmHx XQr8SnjA6rv3yYoAcBGtWcVLaQRyW4oe0XJj9CJiDMtJ5Inyegn9vN6I48kP51gOgtQTnu iATUpu73OOKj3FZDLpULm7R1wiqLo1c= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=aydgK7bn; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf27.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.177 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192135; a=rsa-sha256; cv=none; b=eIRcSGnZJJ+7v9fEUO54EQsIxuppgI5w+TUwcCYdryyB4cyQS8BHLTMLRfrU5yVUNVGAd0 h3gs1uFoARNNhv8Dhu7VNxT2F7vTeqWGJnQ2/ZVbdMHOCXqcEQuP+BPQJD1Gu5Pz+xXXNc zozaKf/AqSt+bQhPE0Vw3DlaRGthBsQ= Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-1b867f9198dso8898085ad.0 for ; Mon, 24 Jul 2023 02:48:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192134; x=1690796934; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hg2vi+2AAPCRuQsciRtLylYUMTgaXzyfBXLGSnv8etw=; b=aydgK7bn0QggjlQydoxB8/wzzA4TXTh5kAH1HczgG5x53kEUfwsZTHfAy7Oll8B5Eb /u8m2Fx+yVNF796ZZc3s2XmC1YIubtCHa+WaPaj49PGcqhNB+vofNP25+pjGYzLsUBey s8mU5+/TbPuzYxlgD12Kt4jsZqhjhd4Zmfvq3eYOMY75uxvK9h6vyhatsfe9xzUUvBHR 65A0XriwgvV356EN5StwdT8HNZN8xypzwNZbI9gp5ddxZgA9hT9j3WwIFAc65w94K4S5 JlPP5IHsQz3xceBVdVld1V5OEs83EDOwKVmAaZghdPj/BNMPCYQ+scOGPe5A3YPCuRcv ewxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192134; x=1690796934; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hg2vi+2AAPCRuQsciRtLylYUMTgaXzyfBXLGSnv8etw=; b=J9I83ism/nRPzt7NG6Z0o/t1cz3RSsiIUBYC6Mh8hbhvMYNYgkASItjoa0w+yZhzCl gQPnFhkcGelif2Gz7Hwm1crinVoDIss7Dll+0v2ifHlMqS2ACosUWoRzBOpqtNOQ5b6x 8TRw8TSJk6M0RP33DtDOCO4RKBTwsaTHZ8tKpJNFyfzV4n9lSHhgh/qbXt/oNRjoFK43 z2HR8TPguxFxoAt1KwX1gkoOeWOgtjsXhgLxzcK9+tzG68RL5CD865eazSgpFMvb3xbD ldKhsQjle9iDzfBliWxE1c/+y8k4XLt06xfFSRhmZ6eYKpNJlAHgHh/to806uv2MOQhN 5EKA== X-Gm-Message-State: ABy/qLaUbgTGQAoy4gLGuBevWlrkvIfojw5zMrj+TGKvmhdFyjvJrpni 4MyUuOJaSpMjRwes8NqjyEMbEg== X-Google-Smtp-Source: APBJJlFlbX7MjF6Gs1NiwvX/ojXDY5CFLHX7jflUqBVL6eloGiFWEtkN1YdVHiZpjmt9ZeBQxK8/kg== X-Received: by 2002:a17:902:ecd2:b0:1b8:b4f6:1327 with SMTP id a18-20020a170902ecd200b001b8b4f61327mr12294253plh.6.1690192134533; Mon, 24 Jul 2023 02:48:54 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.48.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:48:54 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 19/47] mm: thp: dynamically allocate the thp-related shrinkers Date: Mon, 24 Jul 2023 17:43:26 +0800 Message-Id: <20230724094354.90817-20-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: AC60540008 X-Stat-Signature: 6s4wbz7zcjhocywxahxbwqwejacmm6c3 X-HE-Tag: 1690192135-893414 X-HE-Meta: U2FsdGVkX18eVQ71Qz2TCJJWNB9TQkYaaoe49FYrB6VBUU4sgZ+vrMu3Oha1kW68sWhha2aidvxJhXLoXsUmQzKSIdGwXl+2vJAwm8SlfNAHRhgTa7W3rcVToDYA8+9grVE+AEej1xcedEwKleVs0xFjGRfQa4q1XK8rdM1bOQ/DirHIErDkFUUb9Lt7aqLL65+N+ZDtHZ4KAYbpUYYDVVtdtvkvz/ployEqZ07wFi54O/rzDQTDhssii3KUXDuXhinxc9yJUACbF9MSOCHKgEdbAeK4hD0llasxBXPlObeQvXY8S+uI/iKPkT6EoBzRnthJlkxoKXm4u0VEAEh8vIFCLsCvj3L4pEwlwy8GPhadcgIy0GBr7FMdnZCvV/Ofeh97zTPcbnGfqslT8v6yG9N13jToqv7KvyhNkeglR1J0aUhwwZKr7alL8cg/bVnRGZb4aoGN4aBF+pDsw5l3AcHLJWwBss8oGprFdGtKU49qDck7YqfErZvTwdgpGEdjJZ/DyzkPZcvlfBQR/RPPYEKNYq4UihWQNdga9xbRaESOoKM06VpCL8nQNqJ3brgqR+uYYuPfU2Q1oo88GRnTx9jsMGXkXI4Q5j8JM2F0Su4JiK4ayuVgvv/9wElcudIBnBXilXmA8i6/nsjWMX/ts6AJjmsdcjKPyTRVDREQ1DFeUzf0NPbfgrPZvCzwsWXn8BP0ggCgqa9w/oiBQvd7bE2+i+f3DRDZniM6lsIb7PXg+H7fyw3j2DS+zfjwagtJDSBjiTW9NYcq6Zxj2NA+F/9KGCbwdL++MwHcrCeDAGHzqIhi22yI6Wn02e8NgIqYl3/gkdNFw3SP56w2YoQbOKviUtlJFPP4Fs2CdWc7MfFPLBUG5N58G43XYJh60hLplJrdmjBcXkVGDgqhnXDWNblboTrkGyC+G2tIsiY81UncjkEh2yuneSxTsLP5bndHSV7eUArieMz/Y0JpK0P rCSTagEq KpsFqqrPLydE3WlCRxkGqaYOlv9bEp9w++Gq5fC+rhxvKButxqDe5ch+UbKF+z8ZmLXMfedeIrSz1iqcSl5xfhoiAeqibsgXqk/VuOd6R7Mrp0ihGbkEoGFiWfIa+CPf5pAspLJ1Nhc8MeSL/22vZcBDpOvZ7arEMHXR8vKQ+YgKd09byD8gjg0zPdoBdeqHL9Uxlo3CMALV0s7nz43/CxDLtViz5v1Ca+diTDaUfxpJtU199Vp0ifDWzqNvbJ/HdOw1Z0mzzFF2BVKUcAHCl4vN2SPWY05VZ1ZsZFGy0VQo59bcR4ktCo+ZaMvAlzslwtwvxriIm2x10Ep9ZTDsT05vSy1s6FJBAb9OtI4IZyUglyW85sBHrN9fzGvs3mqWfVOkzRvj4/fC0wCmc5omhDvThNgCSklGhqCs7 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: Use new APIs to dynamically allocate the thp-zero and thp-deferred_split shrinkers. Signed-off-by: Qi Zheng --- mm/huge_memory.c | 69 +++++++++++++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 24 deletions(-) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 8c94b34024a2..4db5a1834d81 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -65,7 +65,11 @@ unsigned long transparent_hugepage_flags __read_mostly = (1<count_objects = shrink_huge_zero_page_count; + huge_zero_page_shrinker->scan_objects = shrink_huge_zero_page_scan; + huge_zero_page_shrinker->seeks = DEFAULT_SEEKS; + shrinker_register(huge_zero_page_shrinker); + + deferred_split_shrinker->count_objects = deferred_split_count; + deferred_split_shrinker->scan_objects = deferred_split_scan; + deferred_split_shrinker->seeks = DEFAULT_SEEKS; + shrinker_register(deferred_split_shrinker); + + return 0; +} + +static void thp_shrinker_exit(void) +{ + shrinker_unregister(huge_zero_page_shrinker); + shrinker_unregister(deferred_split_shrinker); +} + static int __init hugepage_init(void) { int err; @@ -482,12 +516,9 @@ static int __init hugepage_init(void) if (err) goto err_slab; - err = register_shrinker(&huge_zero_page_shrinker, "thp-zero"); - if (err) - goto err_hzp_shrinker; - err = register_shrinker(&deferred_split_shrinker, "thp-deferred_split"); + err = thp_shrinker_init(); if (err) - goto err_split_shrinker; + goto err_shrinker; /* * By default disable transparent hugepages on smaller systems, @@ -505,10 +536,8 @@ static int __init hugepage_init(void) return 0; err_khugepaged: - unregister_shrinker(&deferred_split_shrinker); -err_split_shrinker: - unregister_shrinker(&huge_zero_page_shrinker); -err_hzp_shrinker: + thp_shrinker_exit(); +err_shrinker: khugepaged_destroy(); err_slab: hugepage_exit_sysfs(hugepage_kobj); @@ -2851,7 +2880,7 @@ void deferred_split_folio(struct folio *folio) #ifdef CONFIG_MEMCG if (memcg) set_shrinker_bit(memcg, folio_nid(folio), - deferred_split_shrinker.id); + deferred_split_shrinker->id); #endif } spin_unlock_irqrestore(&ds_queue->split_queue_lock, flags); @@ -2925,14 +2954,6 @@ static unsigned long deferred_split_scan(struct shrinker *shrink, return split; } -static struct shrinker deferred_split_shrinker = { - .count_objects = deferred_split_count, - .scan_objects = deferred_split_scan, - .seeks = DEFAULT_SEEKS, - .flags = SHRINKER_NUMA_AWARE | SHRINKER_MEMCG_AWARE | - SHRINKER_NONSLAB, -}; - #ifdef CONFIG_DEBUG_FS static void split_huge_pages_all(void) { From patchwork Mon Jul 24 09:43:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323755 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 929F0C001DE for ; Mon, 24 Jul 2023 09:49:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 32EE0900004; Mon, 24 Jul 2023 05:49:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2B83D6B007D; Mon, 24 Jul 2023 05:49:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 131B2900004; Mon, 24 Jul 2023 05:49:10 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 017D46B007B for ; Mon, 24 Jul 2023 05:49:09 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id CE8FE1608C2 for ; Mon, 24 Jul 2023 09:49:09 +0000 (UTC) X-FDA: 81046032018.30.884552D Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) by imf28.hostedemail.com (Postfix) with ESMTP id CE7BCC0013 for ; Mon, 24 Jul 2023 09:49:07 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Om2j7Eq4; spf=pass (imf28.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.180 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192147; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=3CXd5cxT7BQDd98tt8oaC0MvbTuhoGV4WCiM7GrnKVE=; b=siHxmpp1OLcGiN3Mdl958xaJ8vB1ILGMwS3tMbjzU6xNypiHtHXB8asJ88CF2oSLV8EAq8 KPorDGUklvoJen/PMmd6oy1hjleGuvWYDt73EVx4Ct0kDsc/luruUpCXjh74vpimVRTWE8 uxb3SF7nChyT3ngT3PXdDzgZR/oDwos= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192147; a=rsa-sha256; cv=none; b=bjMxBMMbtCCwH1P6vG/BSMldnLwaWiHLfDkboZemHUGMe8JDYMrOZe7V72T4SZJdr2XVdS +ROeUqqE2DH70Ov7Uq3FLREjC9r87G+qMJCBUFsaozECb31ZUVKf1eV1PbydYK6NC3KaO3 7WGOIrnf2DqEsuhcBQQB5uS6HcfVc4M= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Om2j7Eq4; spf=pass (imf28.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.180 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-1b8c364ad3bso8860915ad.1 for ; Mon, 24 Jul 2023 02:49:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192146; x=1690796946; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=3CXd5cxT7BQDd98tt8oaC0MvbTuhoGV4WCiM7GrnKVE=; b=Om2j7Eq4b1zO3xdV6jpRgZNyxXUYFkRHVqkn+q5W951pJcNCyyCCfcFLMOexVrickD J4ocoN591zedkzE2l/xp9SKWxYNmVY9krcCZp1enxIDkg3AuGZslR02ZNhQ4EqRsU2HZ PP0+JI5GQi1EzLTs4k94q0v4nCvWQ/wpATlpWJHquPmCZ9F29qdBLMIvq7n3uMU0LBE+ S5G8d6zEmU4sF3lI0zmYqBRm2zlIoJryhG+DWOUkdilD+QmzqjFCVIDjtSm2UD8IjhcW 4f3Go/NoxA8FuaENkugEjSaXcGkVRUNsilnpPO5VZgwHu2urEIWQPvH/FMxPOeDNA9uj omeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192146; x=1690796946; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3CXd5cxT7BQDd98tt8oaC0MvbTuhoGV4WCiM7GrnKVE=; b=caN6J7K0IXuu5FkEd+HK+rtzI+0FYIpQO8UBfWlKqm0Q5TkIBKsAQei94hJlz1XzAx 7j4nGFAJ0JCsaO+EuPv8htpmSGStscagSXEGve0Y/D4ScYTFkrD30DN1Uu4KphsFhKIT B2VKs1hItqgJIX6d24pWN2wU94KlUW2NhvtWEDJlErxdgQnZpSNFJ/nNwxYZMUL6b/Ag +60g8HTn1lkxPJ1kbPOZtVBh6vDysznRS6ZjMTyKwoZHhTX3kaZLmqfAKyBU/nTGXzVQ qTgh1SHQkVl0kkK0NP/fwr/973dVx4gDuHlAflROkVM84TxkaaDayRoTsCZs3RVQzg5m 7Gzw== X-Gm-Message-State: ABy/qLbstm28H7IGkZNC+zVY7KvlF0rwhxpWaVAusedscLQVH2irPgUR u5N3qB9XYLoAzt6xV0FhT+wNew== X-Google-Smtp-Source: APBJJlGIkgxKi3c8vlsRfvF8eC2AUaCtjB+PIQLMdMMArsufsHEWiltHfQyyqXBdYUy9SpebX4CtOg== X-Received: by 2002:a17:902:e80a:b0:1b8:50a9:6874 with SMTP id u10-20020a170902e80a00b001b850a96874mr12324079plg.5.1690192146760; Mon, 24 Jul 2023 02:49:06 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.48.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:49:06 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 20/47] sunrpc: dynamically allocate the sunrpc_cred shrinker Date: Mon, 24 Jul 2023 17:43:27 +0800 Message-Id: <20230724094354.90817-21-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: CE7BCC0013 X-Rspam-User: X-Stat-Signature: 3tsyz354gaq8zus1zokorex5b1ux76uh X-Rspamd-Server: rspam03 X-HE-Tag: 1690192147-974400 X-HE-Meta: U2FsdGVkX18oWu4CkAfwscjAS1yyQHU/3ssVzJO24umk+NzPYteOMvwMruBMGxpHqO0sbhqVGGOPl5q9YtVO/4+KfeNYj7d3D6GOjKBmNzobXYc0x47MKMKFkN6rFbKjaiQcJwDEohiaPKiQD6yrBohFWzE0nc4TuCrux6YA+7Pt1xzWAp1gTQh+//SLJMvuyqeh7iT1JxCiE7cAq1FK0vWxz7+0pzqpcbgpdwZARbV/I6dlQGcaUkcGjRix8m7Budjx0glJWvRXg4PXA1k6vQ6SGX5V3/NAJaWSvXz0UAtY4nuOxkVMduwRpRrC8lssR+3TfTqfi/t7dhcSgk/Mly8YABxkvwCHn5aYm6rNhIEv18S8myNNU/dCj0n3ae80i+Aq8JXrZHfcQpwPwnWf53Fe0NX3QZYqS4MqCMTAfS3Y9wbywx40V+Ad82CKchmB1atXhVC1m0LrMlGxugo3uWPXUtSlUujzH3KU6a7zqq3MH7SHLVxHBiIdckX63td8RLJEK6X4G5vkTF19K14uUdehLoFZxh3fEql1hrjLse9/55jOFZi5Mcq3TIXCIaZ4B9zxp5Ns1hmnoQkaL15GNsKGG6hYx8dT8OBPVAtT9AoCEviQTT/SuW6KrHw+EM/y0c9AcaoV8fmiOjfcv73xhPPuWHSfiuFjmPI5g3MtuSwXd6U28t90IwSsp9a3RVQd44kzZEgGxnc4bNqEl0i4Fd3ZercBJ0tr8paVN1/3r2dY+DHE6NTNEc9HnnfMqU7NSUVzxCRX2XAXGfTOSg9Y5jKtNsD23ZFKGrMHFDSuKWfMMqbQPqdc9P01TdlEbaoIjJRBlpBkCz6/8b/oIXuGtxczjcDy6JBedh27Q9iRLyY7dLMLkVIzWYNZLZD7VLRtgsU62G7FoieSrgqqBcjifFT4WVbZhzOIKDumX3OEKsepAwK6e4HzkBrt2ufDzN2PCpQ3cNHUIPQOxBN8NIL +NTEBcXG bd8I7i1ErPsxeXer1j/m2gY3qTfE37qzPX89CmvZdbHbcOLNzuKXmi7fA5fUkfoJaGlY8W0d9aAHLaDWsqvkuIrXPgKacBclKu7FFeDCL1HXIXi3JSVK2lqVaFmNsY5fSB8OT+RCmZNLp4yqmOl1wQs53tDWeoaRdmaKSfgHbiudeCmvMKgC9+FPNpT63RSo9EGpMt20C3oj36rL8ORX/VC8lwvnn85pt6bG+M5S7Yv2X+0oWZKTr609/gJfnB3sUUSWTM2+zcEOtkilDzbAHtZQvkrsM6Q9o3dYmM2X1NIi0/rBfolR+BPXWFikSTV0SWwuEpKKpAO84jZjPx0M2VGP5MgKU8/hn1a3xLDiN+q8E4R1HhLEOnNp0HmC9YjPT+2idbEizM8sCOFsLHY1LMKAD/L38Uku08Qu0Mt51k3e6UHWiJEx1PAsZmbO6eVeQIBUeG3OQlFUdJfF/etr+g1FAaw== 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: Use new APIs to dynamically allocate the sunrpc_cred shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- net/sunrpc/auth.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/net/sunrpc/auth.c b/net/sunrpc/auth.c index 2f16f9d17966..74e40c8a512d 100644 --- a/net/sunrpc/auth.c +++ b/net/sunrpc/auth.c @@ -861,11 +861,7 @@ rpcauth_uptodatecred(struct rpc_task *task) test_bit(RPCAUTH_CRED_UPTODATE, &cred->cr_flags) != 0; } -static struct shrinker rpc_cred_shrinker = { - .count_objects = rpcauth_cache_shrink_count, - .scan_objects = rpcauth_cache_shrink_scan, - .seeks = DEFAULT_SEEKS, -}; +static struct shrinker *rpc_cred_shrinker; int __init rpcauth_init_module(void) { @@ -874,9 +870,16 @@ int __init rpcauth_init_module(void) err = rpc_init_authunix(); if (err < 0) goto out1; - err = register_shrinker(&rpc_cred_shrinker, "sunrpc_cred"); - if (err < 0) + rpc_cred_shrinker = shrinker_alloc(0, "sunrpc_cred"); + if (!rpc_cred_shrinker) goto out2; + + rpc_cred_shrinker->count_objects = rpcauth_cache_shrink_count; + rpc_cred_shrinker->scan_objects = rpcauth_cache_shrink_scan; + rpc_cred_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(rpc_cred_shrinker); + return 0; out2: rpc_destroy_authunix(); @@ -887,5 +890,5 @@ int __init rpcauth_init_module(void) void rpcauth_remove_module(void) { rpc_destroy_authunix(); - unregister_shrinker(&rpc_cred_shrinker); + shrinker_unregister(rpc_cred_shrinker); } From patchwork Mon Jul 24 09:43:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323756 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 5BFC2C001DF for ; Mon, 24 Jul 2023 09:49:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D1A936B0075; Mon, 24 Jul 2023 05:49:21 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CA344280003; Mon, 24 Jul 2023 05:49:21 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B439D280002; Mon, 24 Jul 2023 05:49:21 -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 9F6816B0075 for ; Mon, 24 Jul 2023 05:49:21 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 7C3DDC09A2 for ; Mon, 24 Jul 2023 09:49:21 +0000 (UTC) X-FDA: 81046032522.05.DDBC38C Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) by imf26.hostedemail.com (Postfix) with ESMTP id 890C7140009 for ; Mon, 24 Jul 2023 09:49:19 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="g/oklpIK"; spf=pass (imf26.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.171 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192159; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=AVIFplaZ76DyAQXZ2ZJxr5973JfmLiF6XogxT7JwM8U=; b=wZ7xBZYqxuEdX0bVN+0GzbN4jlSwtyZ4tQ4HTWciHkLdckPlaD7YpZHMZZBUAcW0/S3GBM CEBOx+gFiPieFNmuDsSIbXcYRD98YXJgBEipZDPNX+FsvjCQZD/Ae3piy/HwYTihKvMcDt 6vf7VG9aVOCi83mVBiVju758LsItAiA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192159; a=rsa-sha256; cv=none; b=chk4KtdhPS7JlUs27/kUAf8XPO/4UmObP2RIMB4Q/fWycsYZg6YuQi3QOiRIBS6BciSlHx mV3buVJuiQqrOS+xCLJ5T5Vvsw147xATIP3BBZk8APORLPqx2fIsKgsjp5r2V8FkNejGL3 CWC/iQQuNcf9ICxEaNeEDz9aYogGRuU= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="g/oklpIK"; spf=pass (imf26.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.171 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-1bb85ed352bso2237075ad.0 for ; Mon, 24 Jul 2023 02:49:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192158; x=1690796958; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=AVIFplaZ76DyAQXZ2ZJxr5973JfmLiF6XogxT7JwM8U=; b=g/oklpIKNGh+0wS+n9EMTX7klc8jS620o9fzwPGIqpCBu8mbiUf3GVaJFWI9cq4kyt IcHzy4DXpXrqHW9rKUwTo/qnz3ci8+g869gbq1SHjojy2v6sITGFJ6jCBwntHLmpVCFL BxlLRGgDhGT5pteYElzIqAQYNjUlDrhrzHvMMVeuk6mD5iB/3/39xp+zm1XNO6yWMu+0 nnfy+u33I9S+Zpuf8vfrp2IBvebCHcozlkxEMdcu6inA/NJIaH4grbbwn36wCiHGJxl9 XjhaC2ZZMe6xC4wfMSYebjh3I/a6dIvPCN3tI9BZtHhq23lIbjcutVI19WQEcGj42Ona 01KQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192158; x=1690796958; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AVIFplaZ76DyAQXZ2ZJxr5973JfmLiF6XogxT7JwM8U=; b=asV9alIHHb4Puw+7XiCxGg1i0rwPFgVdmm0S7+QYU/dsniSUxLqFx6meMo6UFTNrFS XJm6yzBsVU2iymCzILx8yTR78ExYGmL102NfdqfWARsP5Pf8QgBSnbpHDg2B3EeOD4gR p6eRz9priyq1WJcHCyLAG0VbZOqAtrcWNA2DcjXN0J9f5SIP6QdibqJ1F/T1rzL5zCH1 3TC5lcKv4LunxgbKN+OdMUNiXqFIMks5zFpESmdg0Z0FoFLJ2H5jxdU9LHaGyRPVJZhp bL5AOGsWBKTKtVXIin9K+XoNdX7ge1VJOpWP74pafgYmOWq+cfJvtkS4Vh4elefz3xXt 4xRw== X-Gm-Message-State: ABy/qLaD1CkPkVLwtpevFzXQyJ7/TF0XiSQO/RE++yz7H1xAY7CX5hQg 0JFLfTRNLvooXMxoI/GQ1z3CerhG7uxQ0wAoTwc= X-Google-Smtp-Source: APBJJlFR9Ju5Vfb3AHUJ7jWuLYrfbcu6xuKCy8KktQCx0EpABVN8oHS8r350MQ/TdmOpiBIOkTrovA== X-Received: by 2002:a17:902:d484:b0:1b8:a27d:f591 with SMTP id c4-20020a170902d48400b001b8a27df591mr12261184plg.5.1690192158548; Mon, 24 Jul 2023 02:49:18 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.49.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:49:18 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 21/47] mm: workingset: dynamically allocate the mm-shadow shrinker Date: Mon, 24 Jul 2023 17:43:28 +0800 Message-Id: <20230724094354.90817-22-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Stat-Signature: bw3wp6sbtyniwmpbg3xjhzkhn7ifcywx X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 890C7140009 X-Rspam-User: X-HE-Tag: 1690192159-955468 X-HE-Meta: U2FsdGVkX183pYhYbldDXEL3bNz1Pxz6WeBmuXrTQ4Zacq0n+wd9j2VDcoP3Ge6UBafBXtPBDBANIS7lfHK7kcjY6cD0rKza+rZLbGpxXgbczoCyuVCF4ctqkH8liy2ZtJXrPHggEyWAFQ0PJP5QeiUqmY640ROtUWGllNqVQAd07BOI3eNYIRYiGDma1RP33EyQL9BqKi2e2lDJ2+m7FaQdruKng9GNun4AG6UswImswyobfTxS7Bm3s6D3eadWz2Z5ObGZLM2A7AdQ5OG2WfJ6yz4rmhY0YyaNOfZPC1azFZ8+qu49Ga65+uZZtodG7TSczth6bvA6Dq8+iC+4oDDf9rxCcBk9cky/H1my/A5bpPlKDgbH3Chly64IxWqVlcrFi0gXxM/HIJRpPlHkuyLuI8kbUrjMBN5hDCJNAte5eMFLdkySxcEGvpI+zN2SFL1/eleIDjR0ty9n6r/7ns6FyMH221nT6s9IFztaRuSKeHvKwNXwP1VudcD0VEcBwLM/8kIQmPbRrxs9VNGC5AuCMkFuImCWPa5acNoT932JT2jvI6NC8r9lqOvksSrvaJZzcfsn2oR9E7Bawiy7lawRJsElI7PFhHCH5lEyGDVBkdLzYiI/aXmlPflI6eIf/Qwh0IIFMNzK9N3C893GYBtwaUFJHGfpljySw6kW312+MFHWDqzR49STNtI89ExKsPTTm5dCO7pc+dBaEDH63JHIivF9Y3aAVktSvkBrz1O3A/KcMNJd/9gRaoiYcsh1/vg8SJY5AzauZkQ8AtlA/YzdMuXuoJmtTBo6DlCf1h9oneTUqjpvyDQ+8DSJeEqKM8cXGVIDh7O6BN1PSzEmDaB30PtAVNlQmYaBBKIasaiy732bycEMO7zgaBVw1IxkPCoK+GCT+AFNkA1utZyuUAQDQe8DsreE/Hkwe0PGRVMzFSR2l4TImx/xgBwOzmofxMgwUZu89cYKtkn07y+ M5jJoz+c 6aOTA2L2l65NlA6CdWnQYITNJ8b9NWXYxJD42XQYrydcJmg4U9rgShBwW+fupR5YdPZ9uj8q734+iHud8E9F4/SP1xwApVc+cKV4Q0rb7FQajPYJFIK8q/c7MhW8bKFP88Ay74q+OEZobPc7uy7jxNiy4+7SiYG+wl32PnE84eV5BPoi2y3rnT15IwHrMSvPifLwUMHlYxjOht3dYy2aYg/UHY2UBtAjVJqAlLe5sFAjL9Zmo89z2BkqxMGk/N75cGXBTkFG2l+/Uq3KrzlUTql89HN3SG/SECxefjKnqp1+aotZb3gn2vqHq+Z9yUlT5Aao9HPd9/SYSkjvQC0tdL0TgYLQaagla7Fax3ZEDjdqPlMq97mqnWSxFEx1U1QiZgHOIYt/x/Ynhr7mHy5eu0qcSPZpRrqcaQAsm 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: Use new APIs to dynamically allocate the mm-shadow shrinker. Signed-off-by: Qi Zheng --- mm/workingset.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/mm/workingset.c b/mm/workingset.c index 4686ae363000..4bc85f739b13 100644 --- a/mm/workingset.c +++ b/mm/workingset.c @@ -762,12 +762,7 @@ static unsigned long scan_shadow_nodes(struct shrinker *shrinker, NULL); } -static struct shrinker workingset_shadow_shrinker = { - .count_objects = count_shadow_nodes, - .scan_objects = scan_shadow_nodes, - .seeks = 0, /* ->count reports only fully expendable nodes */ - .flags = SHRINKER_NUMA_AWARE | SHRINKER_MEMCG_AWARE, -}; +static struct shrinker *workingset_shadow_shrinker; /* * Our list_lru->lock is IRQ-safe as it nests inside the IRQ-safe @@ -779,7 +774,7 @@ static int __init workingset_init(void) { unsigned int timestamp_bits; unsigned int max_order; - int ret; + int ret = -ENOMEM; BUILD_BUG_ON(BITS_PER_LONG < EVICTION_SHIFT); /* @@ -796,17 +791,24 @@ static int __init workingset_init(void) pr_info("workingset: timestamp_bits=%d max_order=%d bucket_order=%u\n", timestamp_bits, max_order, bucket_order); - ret = prealloc_shrinker(&workingset_shadow_shrinker, "mm-shadow"); - if (ret) + workingset_shadow_shrinker = shrinker_alloc(SHRINKER_NUMA_AWARE | + SHRINKER_MEMCG_AWARE, + "mm-shadow"); + if (!workingset_shadow_shrinker) goto err; + ret = __list_lru_init(&shadow_nodes, true, &shadow_nodes_key, - &workingset_shadow_shrinker); + workingset_shadow_shrinker); if (ret) goto err_list_lru; - register_shrinker_prepared(&workingset_shadow_shrinker); + + workingset_shadow_shrinker->count_objects = count_shadow_nodes; + workingset_shadow_shrinker->scan_objects = scan_shadow_nodes; + + shrinker_register(workingset_shadow_shrinker); return 0; err_list_lru: - free_prealloced_shrinker(&workingset_shadow_shrinker); + shrinker_free_non_registered(workingset_shadow_shrinker); err: return ret; } From patchwork Mon Jul 24 09:43:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323757 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 36616C0015E for ; Mon, 24 Jul 2023 09:49:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CF2A4280002; Mon, 24 Jul 2023 05:49:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C7BBD6B007E; Mon, 24 Jul 2023 05:49:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id ACEBE280002; Mon, 24 Jul 2023 05:49:33 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 9B2CE6B007D for ; Mon, 24 Jul 2023 05:49:33 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 79EA0160948 for ; Mon, 24 Jul 2023 09:49:33 +0000 (UTC) X-FDA: 81046033026.11.E4BC008 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) by imf17.hostedemail.com (Postfix) with ESMTP id 9CC9C40025 for ; Mon, 24 Jul 2023 09:49:31 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=TLqdX6PC; spf=pass (imf17.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.179 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192171; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ys9vBHKFvUQ64/r6xhiUU0Z6Ew/XYgW4RHIRDMT4d8M=; b=sVsLPDvb7Wd5DnwrWt6sDHhyn9uyhkET5w3fAceUwmn+URrPEvFVwlgpwZ58m0noA2JxU0 kdEjbOE0Y5y14aHQniSY+M1esN4wafHRjRDu0/BxLG0mD2S9MhoiCukCsmYfb8x3exWEft ztXirbcz5xUJNL2TOAPqUUCkFLw/FgY= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192171; a=rsa-sha256; cv=none; b=cic6xXHzD0dxxIud1ATDFrDfWQJGPXRmY3EqH8auE91Dv0piD4mRbHkeSKmg2Q+qCdNziy SNdEwELgVsDur5rUH4SE4O6qs6AjgZPb635t9Vul11lEYBPfJM3AM9eEkK5RczhFnLZzic DMPYnp7fKkoYTDVGuMMIG3eA9VWbY20= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=TLqdX6PC; spf=pass (imf17.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.179 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-1b7dfb95761so5878955ad.1 for ; Mon, 24 Jul 2023 02:49:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192170; x=1690796970; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ys9vBHKFvUQ64/r6xhiUU0Z6Ew/XYgW4RHIRDMT4d8M=; b=TLqdX6PCGs3QdF4rJk6Dp4mqvaSF7WZDWFKpkIQIK8x+Dm7L2v/Mmjuy/WWJJoDq3k 4QTs2F3hk0gGhN8kj+Hfm6DAsPH66e1EubuHJaj3BSCQ2bDE7mtMLy3HQFnk3pG2qxGI mySJ8OPh5Ng4If1TjW3fRjGo1FnLHFlF9cOfMjspWTnq0qLhrPsLNbiUzYS8/krmBF6Z ip5YJEdLLkDL+5vWc2rL+XgbqKHQL8jbw+nlxR7I6M2XcMg9/1dcKhOJPvHQuFHMHPIp ARop1lFeh6w8Ne+wa7O3N2fKRYrV/3XKoHW5Uidkt6fMf+4L1gxMXNtlDdxeKPGfvdg6 p11w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192170; x=1690796970; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ys9vBHKFvUQ64/r6xhiUU0Z6Ew/XYgW4RHIRDMT4d8M=; b=al94O47yJAlkW0FJUitemuivS+97vaapJxBv+dZjLLjYw7cbzeJD5k6nToB9pZCvBx LRvWGzQb78KGLONWRvI/U8MGK3vbHcMaEudmzkntP7LzUMRX6/95bPzks6unZYlOfos8 ZdrzMk2BPq0Z2ui4iOLwI3UV2cxJpdW5AgyA6k4AidboMHrk5gkt+1Y5sOtJXTCCPa52 1aFHvrF6jXmK1celxTAacMDB+yIFMDxlTaJdWUMqyiWkOjxjoQEyqPXnkloWs0QeNUr/ wxuaO1hlHHZ6aBk99WJDU8xOU7ZCqGPuXQZ3en8FlL7vk1Q54++735wwBQLVaYrxZnuC XhSQ== X-Gm-Message-State: ABy/qLYT9IEZk+BB9UJswTSWwKpDgKojnpq+06onHBv1HywR0ePK6EU6 0Db/1xW/88m1TGYFnUZlMG+3zw== X-Google-Smtp-Source: APBJJlFkBw02O8PtVItEXpmJ/bGWM9sp4fUOmnYSOIyG9XuieUTiinrCv3H33MrLETZpz/mqqXfPcw== X-Received: by 2002:a17:903:32c9:b0:1b8:5827:8763 with SMTP id i9-20020a17090332c900b001b858278763mr12116030plr.4.1690192170396; Mon, 24 Jul 2023 02:49:30 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.49.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:49:30 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 22/47] drm/i915: dynamically allocate the i915_gem_mm shrinker Date: Mon, 24 Jul 2023 17:43:29 +0800 Message-Id: <20230724094354.90817-23-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 9CC9C40025 X-Rspam-User: X-Stat-Signature: pkkjaq5rzkhptbghg9zqe57n9uybmd7y X-Rspamd-Server: rspam03 X-HE-Tag: 1690192171-839611 X-HE-Meta: U2FsdGVkX19ZW+/mzs0zZghClIThkskYXXGvyxm2/26hApF23d+oGPwGB65epv9GWm1dLsHXk4c3jhvml1IhMAZJOkpMRbyS017oCCY+csdCQ2khLSRBGeC+v9b97Odr13PIl0ooTjDvvaZh8dLCw6xpCUk62IBLsiHInkGbdAWs5xcLxMWj/KhVX/ljj0vfSXTtoh62KWUJWuElXFIq8EBawq1wRiZ4TgXOIRtHjVG6B9ub9omnNhS3b2q5TnFYfedfy839Us+dTPQp9ZxmBIRgdL6EnA2cLbBTzYnJKP1TtDpVzC6tERBXOK4Vf/mw8AVlaY/aXo6b9Uk272i+0WNiz3vDQi6/6F1waSPVHb0H7B71rC1cv+qlv7EAOYTwrdPuS0/iu5O130Sn9Bv5amLdii848Slb/mD3ENJMRu53qvCQwGCldeLglLBBjPcZ7CSaXhMQf1pE1YNt81eIle958XTv3M9sn9Kzb4aiLFCAGHzoS1Vfl+IrYoLhKIdY4+MRQprJ4XFTLkzIF51YAxrH6un5sCzIcXiMDLbwLtMF4EvuzCxqNOZyuj0OIyvmoXfK4uXD4uO0X9YNUPA7xOiQ0kskMl9kd/oj7b07KDCdq9u1DyZM7mq/oNlTVm710SoiL+HnY92nlyYB6KOLjhrX2qIWS59HrMZVYnC3kGNuVQdhCbfcqpjQ3adnRl3qjbLu0jDF3WQy+m4JZY4De3yrRFI25aT12Tb4BawHBjI1HjKFDYw4pbhe0K2r3/y3AQr61kF+WfLDURJQQwHXG9T9Xyc/8SBmOMJL2BBcQx193X69wB87DAhvLFYvCiUjRdXymxQKkFcvaT2G9aRBBr7nBslYfdEejLQtwGOQS7ov2uV0tXlsM59iMRmJJ1AGgVFcrHm0o6KPif1zENyRZYJ3lK79FNf0ONqoKiFOgBorT+TO6tR1JgPoRi2MG4kbuIjLRanJlCDvqB59avn SLdNu7o0 OM5j61mtQ9LXiSeiUGLHQ09mkIYIOSB9POhBPeYIzCTkqUpyuEM9uco3pV/MXKLO0BWbV4balYymoryyfbRjNcijpd390TvmM6ENWnG6VOOAotb9W2Gd/Qr8rVwLTtoFvbDxxmEx75DtFSSLtOhlw4ZSk6nuk0UoPhlcXAbcNjvsUXMT7gcROv3dyxQH+yWs4TKShfZ8gDXoemZz6Vy0fBKaIfwtlHdcTWhQxDNlJxTRVCwzEBP5K+xCwZ7JjJEAxFWSPii6cYHdRoJ2+joSntMlF1N2HMVSSWQAwtlInxODEYEeGCSPBaLjfFA0trgJfCChWxTChZ16Ko5nAmwp8+RTr/wmr3StF64kNfhIIxHSeRE+M9uN6RTLDar3Xbfle4KfPCYXtmanoC0egQ+s8EGQI8/uSZwQ1RjGlqqOBO/2Ebw6BqgOjB4kK1xbaTUh5M41HWUN49SreS9WlAOQXNy+jQg== 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: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the i915_gem_mm shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct drm_i915_private. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/gpu/drm/i915/gem/i915_gem_shrinker.c | 30 +++++++++++--------- drivers/gpu/drm/i915/i915_drv.h | 2 +- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c b/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c index 214763942aa2..a7409b8c2634 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c @@ -284,8 +284,7 @@ unsigned long i915_gem_shrink_all(struct drm_i915_private *i915) static unsigned long i915_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) { - struct drm_i915_private *i915 = - container_of(shrinker, struct drm_i915_private, mm.shrinker); + struct drm_i915_private *i915 = shrinker->private_data; unsigned long num_objects; unsigned long count; @@ -302,8 +301,8 @@ i915_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) if (num_objects) { unsigned long avg = 2 * count / num_objects; - i915->mm.shrinker.batch = - max((i915->mm.shrinker.batch + avg) >> 1, + i915->mm.shrinker->batch = + max((i915->mm.shrinker->batch + avg) >> 1, 128ul /* default SHRINK_BATCH */); } @@ -313,8 +312,7 @@ i915_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) static unsigned long i915_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) { - struct drm_i915_private *i915 = - container_of(shrinker, struct drm_i915_private, mm.shrinker); + struct drm_i915_private *i915 = shrinker->private_data; unsigned long freed; sc->nr_scanned = 0; @@ -422,12 +420,18 @@ i915_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr void i915_gem_driver_register__shrinker(struct drm_i915_private *i915) { - i915->mm.shrinker.scan_objects = i915_gem_shrinker_scan; - i915->mm.shrinker.count_objects = i915_gem_shrinker_count; - i915->mm.shrinker.seeks = DEFAULT_SEEKS; - i915->mm.shrinker.batch = 4096; - drm_WARN_ON(&i915->drm, register_shrinker(&i915->mm.shrinker, - "drm-i915_gem")); + i915->mm.shrinker = shrinker_alloc(0, "drm-i915_gem"); + if (!i915->mm.shrinker) { + drm_WARN_ON(&i915->drm, 1); + } else { + i915->mm.shrinker->scan_objects = i915_gem_shrinker_scan; + i915->mm.shrinker->count_objects = i915_gem_shrinker_count; + i915->mm.shrinker->seeks = DEFAULT_SEEKS; + i915->mm.shrinker->batch = 4096; + i915->mm.shrinker->private_data = i915; + + shrinker_register(i915->mm.shrinker); + } i915->mm.oom_notifier.notifier_call = i915_gem_shrinker_oom; drm_WARN_ON(&i915->drm, register_oom_notifier(&i915->mm.oom_notifier)); @@ -443,7 +447,7 @@ void i915_gem_driver_unregister__shrinker(struct drm_i915_private *i915) unregister_vmap_purge_notifier(&i915->mm.vmap_notifier)); drm_WARN_ON(&i915->drm, unregister_oom_notifier(&i915->mm.oom_notifier)); - unregister_shrinker(&i915->mm.shrinker); + shrinker_unregister(i915->mm.shrinker); } void i915_gem_shrinker_taints_mutex(struct drm_i915_private *i915, diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 682ef2b5c7d5..389e8bf140d7 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -163,7 +163,7 @@ struct i915_gem_mm { struct notifier_block oom_notifier; struct notifier_block vmap_notifier; - struct shrinker shrinker; + struct shrinker *shrinker; #ifdef CONFIG_MMU_NOTIFIER /** From patchwork Mon Jul 24 09:43:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323758 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 801E6C001DF for ; Mon, 24 Jul 2023 09:49:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1F6328E0002; Mon, 24 Jul 2023 05:49:46 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1A6AF6B007E; Mon, 24 Jul 2023 05:49:46 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 046888E0002; Mon, 24 Jul 2023 05:49:45 -0400 (EDT) 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 E40ED6B007D for ; Mon, 24 Jul 2023 05:49:45 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id AF39540A59 for ; Mon, 24 Jul 2023 09:49:45 +0000 (UTC) X-FDA: 81046033530.12.165F672 Received: from mail-pg1-f176.google.com (mail-pg1-f176.google.com [209.85.215.176]) by imf07.hostedemail.com (Postfix) with ESMTP id A827540006 for ; Mon, 24 Jul 2023 09:49:43 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=eNFqSXTl; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf07.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.176 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192183; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=FPgx5tx5pugTz0d6jibfzfGw2xSKE+ix47CgP1Qw/g4=; b=oC5TfIOzQKMTL16Tj3ZB5mBDqKzueUyY8Shkt8L39RfEzLONZucmJsMgt4kR6u1iYlb1lN 2koxqg23ziKetep3Tag0BNHJ+B8QDzHYUdD4wRK3XC1hwRio8AtfJbC+iyrGA1yvgZfHGQ OiHLWQpl4LMHF7zBR+YLc2b+LXoQMCw= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=eNFqSXTl; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf07.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.176 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192183; a=rsa-sha256; cv=none; b=57MBQcEev4tluRXyEWfIxB99BTjI480LCqHGhxnl2hrvVKcp3rbrUqY5WM6ZiKd8dcrG9J OToH1ABcMB1S9sEjV7e2QjVNcPv4NpqPeyNnCrTH4CvwGc2xUgTCC1HPoO3hyp2VcGbohq F3BF3RSH9rUyxS5eMYIy2SXyd7BztZ4= Received: by mail-pg1-f176.google.com with SMTP id 41be03b00d2f7-55badd6d6feso376759a12.1 for ; Mon, 24 Jul 2023 02:49:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192182; x=1690796982; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=FPgx5tx5pugTz0d6jibfzfGw2xSKE+ix47CgP1Qw/g4=; b=eNFqSXTl7Fs+A61apTH/V806oFNFqUEW9iBW/QGnoaz3m8bxFzAIk52taB3hTPoo0J 15Uy/EhxhzzXrAniIeKy95ZVaJB60ETDr5+Beo/2JORQV0eMMIYUvFGSn01JXJQmgfvF wVSzhI8MrjoxVzBXxfbK/bzinkaNiYLaxnx8BzakR2VO4bS5jTMeezTAiUWxMRd9glqy y7ZbeUA/amFMlmdildpnpY/ykDL2iuVB+OIlcnryGkEk6VSFnVV3f/s+KAnTQMPBvZI0 bhvIVOkp7ajnZG67FTbNaTw3FFqm546EN6Ypmf7e8IynzALyaOfSF7MjrTN2cH5bObeQ XNsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192182; x=1690796982; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FPgx5tx5pugTz0d6jibfzfGw2xSKE+ix47CgP1Qw/g4=; b=O2WVV1zV2lyv4jrJbh39S2TvujYG8cOUpMTpa2BDFMJ2wmTnuGk5WgtDU3VFKXrRFW ewrAMpkByHs7y7Ab+oGe1vtwJ1E5oxAj0eA7PS3G0kCMG/XqO3LpWbOPqZClMc1NqADg gG87lcpTSprR+JHbz4OYaaDdReRrWBs2N0idWWSCF5xXFDNzvS7Or3GBezT79WLp9nhV 6E74k4sbyWCTHd17YFRmkNSFdfdbONtTIpPz78uCziUhWFnk667nOzoZIqSyz/hKtxVC 7Y3WVSKs0EaSdWmBgJ8TH/ukWlQx2Y5HVTitYtMXPa+8NhHJ0XN1VirnswggZw3Ok8R9 wAyw== X-Gm-Message-State: ABy/qLYWZcxSzTryU9NOTZgGopU9PdMRj/pG5CJXXMSeWdgx+XCiIqbz Ix7ENU11ZDDqw6U2PVhHiv7vwA== X-Google-Smtp-Source: APBJJlHNherDqZFzA7p7tcMEc26kiZZ4z0G58iklJcv127ghy/RIpJQTR76k3+Vr6OIbO3Et5X/b8Q== X-Received: by 2002:a17:903:2305:b0:1b8:b0c4:2e3d with SMTP id d5-20020a170903230500b001b8b0c42e3dmr12244115plh.4.1690192182555; Mon, 24 Jul 2023 02:49:42 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.49.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:49:42 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 23/47] drm/msm: dynamically allocate the drm-msm_gem shrinker Date: Mon, 24 Jul 2023 17:43:30 +0800 Message-Id: <20230724094354.90817-24-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: A827540006 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: th5qqsxz8iu9grjskcq9hixp4qetgdj3 X-HE-Tag: 1690192183-410986 X-HE-Meta: U2FsdGVkX19V8VYfNz1sOfQmKiguu9egrXCq+P9PTzqk3tVeRJCIuxoGPxwZw1canFL8rj/SKEQMxBTmIwVezETQcKM6mlirqI6EGkyxNqhNFHBftXrnVU/LHnIUiNDNFln3AULsq0WBwm4V/Vfl07FKGiMaymCTvhTUcrQhEp6oSTItSZod4b5H4rJbhhENhzcDqMRnabNs4ThHjUPNP+L9VKRgd+kEc/Xv297spcceA9jl+Lvify9owCU1opIUItg9UTrOxGn3kpAgQXeJQ31rUeVsZreWAxeomQWsGbMkcCiXq6YfKV65RiXOVLidxrJxO4deaCuwz9bmfO3iOPuif1TWQzpPokVU1a3srht73qt+rD1KadMS37md2ZdtKypAV6bFmqnKRIqBpIH0EBU1UhZdEh9VVSIZBZ9sgHiFAszF4MjXJCV9flzgNo0KWq0mvkzRG0ugSGhEpb3YSG9O88o/rApNzqf9M5pOQbtooc4YPJ6I+fQhy63CePrG+CQiYiTh+PGvyZx0Cx3F2t8WgF/AGWT3lTXsz6gbga3GzFblKCfswYwJ19+jAfWesu7yIZFEBrUBy3+VH4XAZ1ZW/sNcWXTcKOylvqsm1xU9BqJx+UV/gGzhogtr/dox6a8O7r6lloOI094fEj5I1K3TExFwpLhciqzwTyFcAuKZoylSkqdB3P3MEi2piPsFdK4AlskZOa+JKA0liGXuIJwR0I8rL7LdA6JtclQByt2AZ7P8chODbd6SZDga9y6r0nKq4rDD7y3u6V43ezgMG4BrLq16VT3E1QrOZXTYgC8zL5tbPfPQ9vWeo6j0QWjXbsrFGbbZjUDGHpCLn6CZmQeVu22reJ8WEEhf5CpOTwM9tzPgIYhofbbayMbw77erdNJRL87pVBGMsfvmUP5WMfloXUkWMJTMDJQ5xdolVrw2RoQck0Zxy5FR5khZEq5XxdCtXQ20dMSKESy4Q9l K3Qnts2e Y1DDA49cedjsNWPnwB8GHetznUxIWP164VUUphQjcNxXRmUMJTyb1hASnF59in2YVgJV4D+wsCVd0mB+NzQqpvA/lxnnUhoIJubCguMVR/GFfulf7wo6NS0X3Zt8dfZmC2ZDK+7wNZQR7GFN56KeVHuADvq3Uijk2aLqabEFdt2Mmc7iU4eTTECM4paFllcgFeJIrqUhIw7Sj0awF4gtA4g/xk9NfAQgwvEqK3ewPrMKpWQBPDqMA9yeLYSO9ggqg23pv0beKzvqhycXu5KDvyI3zFKhbs7qiY+U8ywcObbsQr+PcVvVyL16rO1W4Elwq8Fhwm8FfaxgrqnUUIgWuX53Qyk574mE+4qL8wAZLapd4j0Ne0uqtTH25nDnTPHYHVDJvgLu4YpKHnBcQ7zpc3IMOI036aZp9VLKPUxus0wIzu53o1PPLbSWybUY9RXvo2BVEJ+WoMiz4dG8sGsNDpHPymg== 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: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the drm-msm_gem shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct msm_drm_private. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/gpu/drm/msm/msm_drv.c | 4 ++- drivers/gpu/drm/msm/msm_drv.h | 4 +-- drivers/gpu/drm/msm/msm_gem_shrinker.c | 36 ++++++++++++++++---------- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c index 891eff8433a9..7f6933be703f 100644 --- a/drivers/gpu/drm/msm/msm_drv.c +++ b/drivers/gpu/drm/msm/msm_drv.c @@ -461,7 +461,9 @@ static int msm_drm_init(struct device *dev, const struct drm_driver *drv) if (ret) goto err_msm_uninit; - msm_gem_shrinker_init(ddev); + ret = msm_gem_shrinker_init(ddev); + if (ret) + goto err_msm_uninit; if (priv->kms_init) { ret = priv->kms_init(ddev); diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index e13a8cbd61c9..84523d4a1e58 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h @@ -217,7 +217,7 @@ struct msm_drm_private { } vram; struct notifier_block vmap_notifier; - struct shrinker shrinker; + struct shrinker *shrinker; struct drm_atomic_state *pm_state; @@ -279,7 +279,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data, unsigned long msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan); #endif -void msm_gem_shrinker_init(struct drm_device *dev); +int msm_gem_shrinker_init(struct drm_device *dev); void msm_gem_shrinker_cleanup(struct drm_device *dev); int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma); diff --git a/drivers/gpu/drm/msm/msm_gem_shrinker.c b/drivers/gpu/drm/msm/msm_gem_shrinker.c index f38296ad8743..7daab1298c11 100644 --- a/drivers/gpu/drm/msm/msm_gem_shrinker.c +++ b/drivers/gpu/drm/msm/msm_gem_shrinker.c @@ -34,8 +34,7 @@ static bool can_block(struct shrink_control *sc) static unsigned long msm_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) { - struct msm_drm_private *priv = - container_of(shrinker, struct msm_drm_private, shrinker); + struct msm_drm_private *priv = shrinker->private_data; unsigned count = priv->lru.dontneed.count; if (can_swap()) @@ -100,8 +99,7 @@ active_evict(struct drm_gem_object *obj) static unsigned long msm_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) { - struct msm_drm_private *priv = - container_of(shrinker, struct msm_drm_private, shrinker); + struct msm_drm_private *priv = shrinker->private_data; struct { struct drm_gem_lru *lru; bool (*shrink)(struct drm_gem_object *obj); @@ -148,10 +146,11 @@ msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan) struct shrink_control sc = { .nr_to_scan = nr_to_scan, }; - int ret; + unsigned long ret = SHRINK_STOP; fs_reclaim_acquire(GFP_KERNEL); - ret = msm_gem_shrinker_scan(&priv->shrinker, &sc); + if (priv->shrinker) + ret = msm_gem_shrinker_scan(priv->shrinker, &sc); fs_reclaim_release(GFP_KERNEL); return ret; @@ -210,16 +209,27 @@ msm_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr) * * This function registers and sets up the msm shrinker. */ -void msm_gem_shrinker_init(struct drm_device *dev) +int msm_gem_shrinker_init(struct drm_device *dev) { struct msm_drm_private *priv = dev->dev_private; - priv->shrinker.count_objects = msm_gem_shrinker_count; - priv->shrinker.scan_objects = msm_gem_shrinker_scan; - priv->shrinker.seeks = DEFAULT_SEEKS; - WARN_ON(register_shrinker(&priv->shrinker, "drm-msm_gem")); + + priv->shrinker = shrinker_alloc(0, "drm-msm_gem"); + if (!priv->shrinker) { + WARN_ON(1); + return -ENOMEM; + } + + priv->shrinker->count_objects = msm_gem_shrinker_count; + priv->shrinker->scan_objects = msm_gem_shrinker_scan; + priv->shrinker->seeks = DEFAULT_SEEKS; + priv->shrinker->private_data = priv; + + shrinker_register(priv->shrinker); priv->vmap_notifier.notifier_call = msm_gem_shrinker_vmap; WARN_ON(register_vmap_purge_notifier(&priv->vmap_notifier)); + + return 0; } /** @@ -232,8 +242,8 @@ void msm_gem_shrinker_cleanup(struct drm_device *dev) { struct msm_drm_private *priv = dev->dev_private; - if (priv->shrinker.nr_deferred) { + if (priv->shrinker) { WARN_ON(unregister_vmap_purge_notifier(&priv->vmap_notifier)); - unregister_shrinker(&priv->shrinker); + shrinker_unregister(priv->shrinker); } } From patchwork Mon Jul 24 09:43:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323759 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 DBE49C001DF for ; Mon, 24 Jul 2023 09:49:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 79BD2900004; Mon, 24 Jul 2023 05:49:58 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 725C36B007E; Mon, 24 Jul 2023 05:49:58 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 59E2B900004; Mon, 24 Jul 2023 05:49:58 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 48F946B007D for ; Mon, 24 Jul 2023 05:49:58 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 0E11F14092B for ; Mon, 24 Jul 2023 09:49:58 +0000 (UTC) X-FDA: 81046034076.15.6572B9D Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) by imf02.hostedemail.com (Postfix) with ESMTP id 0F9D88001B for ; Mon, 24 Jul 2023 09:49:55 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=gR2qnZxm; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf02.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.182 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192196; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=9Za/Hz+nmH3G3JzZh25LzFiu0ZOWgA3znFTLEp4oxTw=; b=o9i3HeY5O17TkhuY2bQZcG8aMkbXhvNXE5yvNmAOeqp/miC6Ixo81xJtkEgD4FGDKzjHP+ cekcmgG0IcUoofy4vrcwKpjnZWLdDgzjMgMRCkepWf6mMZfatOXz+gv0hYkcutgi5MMJ11 pc1aqCbReXXu+VMkM/wV/t3kIsJk4+0= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=gR2qnZxm; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf02.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.182 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192196; a=rsa-sha256; cv=none; b=ynUAMrAWqaLf0m091L83wYpM8fjIvyktLZUc7gfeQcNkhU7K30m5z46EXNMxEa/DgPxyK4 uLFc/OohJVt7XPbiKrn+yAzH+3Jt+L1+9kpirmbzbvlczEUQ3QDDKxF/6TwkYqUnSVXT8Q XbRX9vo42TnfvdV8a+olLzCnMNgWSzg= Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-1b8c364ad3bso8862125ad.1 for ; Mon, 24 Jul 2023 02:49:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192195; x=1690796995; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9Za/Hz+nmH3G3JzZh25LzFiu0ZOWgA3znFTLEp4oxTw=; b=gR2qnZxmoz280cmZWcXiSCLKKkR1JfAp12ElTfYwqMrNTp8JCp9ZKZRXrFwOkcY/Sb CrbcisbKWYe3aY6B3pvGdH/dVnCF0vGzFeD5T1Yk3y+VfaQjIO+EZahaao1fjNd/BZoI apuMNV19Cpy+f53Y3adNFJ3coCvNEOiZFJQcm8nd+dDkCN4T/1IxyvGyE+UJ4ZlCp1aB v/6FaBWqZJevgDX1XD0OMGqFb23jKwI+/PxmuakBM9m0V+vk+xlBE1r0FaEXeTkyqUfe vbAcs9nc+KNDOrB0YDxGRMugv4K0wSAyub+4ZaUHe2Bm2guChHPn7IXXTJaLQIHDrakU MiWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192195; x=1690796995; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9Za/Hz+nmH3G3JzZh25LzFiu0ZOWgA3znFTLEp4oxTw=; b=GixU2fZzsaxYhrpfIG3FPhAxG/dPepV/ETIZbMKvF66Dx9+rfBmstEUFV+6u0E58vo PvZtWtewaJsQDqeoVQT2WOmHo6CyHRtT8o6z05LWv8oAvbxcpD2E05B++RzbEHMIpi8i gbm9bBlaDhDH5J/NuNjRs3nOMCPdwglorfnFgvkNK6g7TaYMtcE5m1FCTDqsa9ybOkRQ cIrBwYehVcSfUF0gvPrv4+ieneWhfd7x4nIvA7M8FwEBOB7xAl/67vqupG4iPFHd5C86 yc1XSE9T9d42CKXFm5DA/VRswmH/XbMA809UyRPyNUmlykaHnhX0UpgqkquVVSOErBqV bp4w== X-Gm-Message-State: ABy/qLb6QFHp6n2PyqGHZ2HrkGoQxJrJpxUcLVufGdru+3hAVSxYbdo8 bL838FQA3Obm28+DElTWUiQjKQ== X-Google-Smtp-Source: APBJJlFYiQjYsesoLBIGYzIbaqvqBpGNnPrMVt+9gbe/8vvXchqG9OkxYsLP3NQiA5NgJtO6rGDrrQ== X-Received: by 2002:a17:902:e80a:b0:1b8:50a9:6874 with SMTP id u10-20020a170902e80a00b001b850a96874mr12325717plg.5.1690192194956; Mon, 24 Jul 2023 02:49:54 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.49.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:49:54 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 24/47] drm/panfrost: dynamically allocate the drm-panfrost shrinker Date: Mon, 24 Jul 2023 17:43:31 +0800 Message-Id: <20230724094354.90817-25-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 0F9D88001B X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: c69fcdot8wm5d5mb3ax4q8zsq3syhjf5 X-HE-Tag: 1690192195-965587 X-HE-Meta: U2FsdGVkX189JwhN+jTsUoVSaWUq68ut4Yfc+2F9WXJdvml5PKzt7H9VBPvH+nsyS+zY6JUzpJJRD79EiABrO4lLAV/cU4jSQPVIMfiOh2Iz48yz3g+Vj2qYC2P6bg7BBpWvtXDC7GD40oXUGyl6Vz/7weyUXLPdysaalxWFd10hl1VX0mDCySFdTU5z6gQ4gQWfXA18hVWUQkLUCAOcgTTvEnKpt9Yh2XxPdcoEIs0li97I+Ft6AZHcxcuSTXwkgV9Hn02X0EYw3mVyxQ+MTXDG6a7Nz1GMO234agpI41wk2PvspuzJtLX3Rz1jUVLL4Jvchgh3x//+peXnleYj80zdO86H046gPV7mOaUz1ffSHwXPsGcPysukuWCZPdFRHukhHV7LAAwgXQJwYmL3UPBkMrKwgYe2ily7TuE8QKaoUur70l8eifUP/+QlpDv4VxZPG4GCNMiXZ+oX3zWZ/eSGxxoqyS3B1H+Nuo6AAR1XGlEAZQ1riL74cLq5DT30k5AiuXbtTS3/hE2NPF4+l/bkuP81fq7JOqSA1QXI5cN5IDIfYIkK9mQ8SqZjH2XFGRHZBc0MXXMI0wQlDX/GgN94mX2wlIvrkepAw9vUK+m/++lPsTpwT6AA0fS3T0ufCrPH9TkC0pch5oHkkm6psG0TxExAYiwohjiEs7DUgDKUklDXDCcUa6nyCa4bM2eAEHD353DlDHP7uaK9wCOCHXPsU0lKFVniwM+rlrN+EPdT1DEv01rDKN9IQt6YEvU8q7vNabnAV2HL3lDUry5uObX5slOq6kg7P9zhopG/by7LXHm0ohxm4JUifAMXxTckxzXlfiAheUPtqML/kSgKSI5bLaT+8cj03GueoNXINz0zMTh/y1duO6umQRoopQG5SufTbKLFHHLu8mtyXYeW0TMZVmd9pfiONEwTvWFMRaVUqWIz77LTcMlbaSeodK1InsJRsFDUDEZnDlSUvkC R2Z14KVC jjsQg1TLVUpaO89BumHzSNsst1/4SqJbc8jliYQAf3KABAFPFekoJihv05o0DZ3SYym/rHcuN3eu0qsZVppNbG3aW7UeRf7GwBIfvHPhTgDZyfal4ogIoD3W3iHQDJmRurTPZprpW9sEaKFz5QYCtOab4p6Tu/IOj4yItjQiUDhtIYBHsiX2TsvcAL18iGkOxu2uwuwGpoKFWftHQUdr0ez7sX+N9uEud1TqQpaiWOOaXRbzCAbCSIB/9nEaTOMvkDSDDuAK2/js9j75zy2oPACqdE/Kk20xMqxV1NPIp34MM4olPwlnAWoTut+6KC8NCMXYtZVKs4I8WosfYxQye9+TY3LlK8bGKB0pMmNA82hNRSdK4S+pv8Bq1PHZKYhpkmr2ZaPZv3KW9X5vMF7sK3dFtnIllCDPSOZzr 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: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the drm-panfrost shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct panfrost_device. Signed-off-by: Qi Zheng Reviewed-by: Steven Price --- drivers/gpu/drm/panfrost/panfrost_device.h | 2 +- drivers/gpu/drm/panfrost/panfrost_drv.c | 6 +++- drivers/gpu/drm/panfrost/panfrost_gem.h | 2 +- .../gpu/drm/panfrost/panfrost_gem_shrinker.c | 32 ++++++++++++------- 4 files changed, 27 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/panfrost/panfrost_device.h index b0126b9fbadc..e667e5689353 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.h +++ b/drivers/gpu/drm/panfrost/panfrost_device.h @@ -118,7 +118,7 @@ struct panfrost_device { struct mutex shrinker_lock; struct list_head shrinker_list; - struct shrinker shrinker; + struct shrinker *shrinker; struct panfrost_devfreq pfdevfreq; }; diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c index bbada731bbbd..f705bbdea360 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -598,10 +598,14 @@ static int panfrost_probe(struct platform_device *pdev) if (err < 0) goto err_out1; - panfrost_gem_shrinker_init(ddev); + err = panfrost_gem_shrinker_init(ddev); + if (err) + goto err_out2; return 0; +err_out2: + drm_dev_unregister(ddev); err_out1: pm_runtime_disable(pfdev->dev); panfrost_device_fini(pfdev); diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panfrost/panfrost_gem.h index ad2877eeeccd..863d2ec8d4f0 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.h +++ b/drivers/gpu/drm/panfrost/panfrost_gem.h @@ -81,7 +81,7 @@ panfrost_gem_mapping_get(struct panfrost_gem_object *bo, void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping); void panfrost_gem_teardown_mappings_locked(struct panfrost_gem_object *bo); -void panfrost_gem_shrinker_init(struct drm_device *dev); +int panfrost_gem_shrinker_init(struct drm_device *dev); void panfrost_gem_shrinker_cleanup(struct drm_device *dev); #endif /* __PANFROST_GEM_H__ */ diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c index bf0170782f25..9a90dfb5301f 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c @@ -18,8 +18,7 @@ static unsigned long panfrost_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) { - struct panfrost_device *pfdev = - container_of(shrinker, struct panfrost_device, shrinker); + struct panfrost_device *pfdev = shrinker->private_data; struct drm_gem_shmem_object *shmem; unsigned long count = 0; @@ -65,8 +64,7 @@ static bool panfrost_gem_purge(struct drm_gem_object *obj) static unsigned long panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) { - struct panfrost_device *pfdev = - container_of(shrinker, struct panfrost_device, shrinker); + struct panfrost_device *pfdev = shrinker->private_data; struct drm_gem_shmem_object *shmem, *tmp; unsigned long freed = 0; @@ -97,13 +95,24 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) * * This function registers and sets up the panfrost shrinker. */ -void panfrost_gem_shrinker_init(struct drm_device *dev) +int panfrost_gem_shrinker_init(struct drm_device *dev) { struct panfrost_device *pfdev = dev->dev_private; - pfdev->shrinker.count_objects = panfrost_gem_shrinker_count; - pfdev->shrinker.scan_objects = panfrost_gem_shrinker_scan; - pfdev->shrinker.seeks = DEFAULT_SEEKS; - WARN_ON(register_shrinker(&pfdev->shrinker, "drm-panfrost")); + + pfdev->shrinker = shrinker_alloc(0, "drm-panfrost"); + if (!pfdev->shrinker) { + WARN_ON(1); + return -ENOMEM; + } + + pfdev->shrinker->count_objects = panfrost_gem_shrinker_count; + pfdev->shrinker->scan_objects = panfrost_gem_shrinker_scan; + pfdev->shrinker->seeks = DEFAULT_SEEKS; + pfdev->shrinker->private_data = pfdev; + + shrinker_register(pfdev->shrinker); + + return 0; } /** @@ -116,7 +125,6 @@ void panfrost_gem_shrinker_cleanup(struct drm_device *dev) { struct panfrost_device *pfdev = dev->dev_private; - if (pfdev->shrinker.nr_deferred) { - unregister_shrinker(&pfdev->shrinker); - } + if (pfdev->shrinker) + shrinker_unregister(pfdev->shrinker); } From patchwork Mon Jul 24 09:43:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323760 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 8ED68C0015E for ; Mon, 24 Jul 2023 09:50:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 292836B0075; Mon, 24 Jul 2023 05:50:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 24290900005; Mon, 24 Jul 2023 05:50:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0E351900003; Mon, 24 Jul 2023 05:50:10 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id F22D76B0075 for ; Mon, 24 Jul 2023 05:50:09 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id C040380947 for ; Mon, 24 Jul 2023 09:50:09 +0000 (UTC) X-FDA: 81046034538.20.F0AAC2E Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) by imf17.hostedemail.com (Postfix) with ESMTP id E7EC34000B for ; Mon, 24 Jul 2023 09:50:07 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="amQ/RyxG"; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf17.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.177 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192208; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=5tyryk3a6lKy52HCDJ7LTSnMns1BMfalny9tATaKfF4=; b=JdSZL8c8uKMp4CwkdQ0fimKZQMsEL0styGdLZOKxTJc2xEvAWpfow3JY+6ULi0KRuQPlVg pWmxUNO/IetFNA+DLkZhRZQ7w2bd37K8z3qCOCFR/1K2/rPWBGTwkoaeAzAlqy5p/gVIuX TFIL+5VYpiGsseu3tKv1to5edl6hA58= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="amQ/RyxG"; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf17.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.177 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192208; a=rsa-sha256; cv=none; b=qKUP9fq6XhE6fHo6SzUnGY49LMX4AulIBDKuEAdtufp1nUTKNq9Ytd8G7Y1FY/KGFS/x8Y Izws9f8bDQfTTH1aAGFn9uu13eNc3b3VNeWYNGh4n58gRDOE0t2UWW3mkDnEZvAXYwNo4A T1SvAmzcudzBRYLAmH1zHGL/V3gyzR8= Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-1bb91c20602so2230895ad.0 for ; Mon, 24 Jul 2023 02:50:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192207; x=1690797007; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5tyryk3a6lKy52HCDJ7LTSnMns1BMfalny9tATaKfF4=; b=amQ/RyxG43H24ZUKc8otE5jiO+PYmxLlS/jMlPB0P6LNf3YwKIyMMGT5x5GETrJzMq RUBPJl4XNLYJOZfW+4QQddSzJ1AOcHQOg+iS5NlIsw7P4JxkBKv7P6vm/OPtlqHKc3hY SLjp5JA2uLEQMXCeF85H9FjbP+u1neEShB4g/q4BDTYJUem7uHrE3aZx7t8/OvBixlxe PbLUlPG8K2MumMSz8pDMF7zGqwESYJNwxt0dJLhsSfALoKSzpnkM0Hd7rb9gY0+HtLOP 61X4fPzjkMASXPftIRT+bLKVEY2jgFRxsHYQZDL2GJ8BmZMhp7tc/64KlMZKvh3Rfksj 0TFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192207; x=1690797007; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5tyryk3a6lKy52HCDJ7LTSnMns1BMfalny9tATaKfF4=; b=c8EJBvjAoTgPr8PpUoEB7xW5Zqus7Gwf69bPF2z8vQIHR+7sGX1XiiCZErqPuvsZDh s6kXRXnahjieEoCI98t4AbmYj7zgh2AObb8Op1t+V9hTHwbWAEYbSqEhbbrs9vHo6eW5 SSZvfZP0UltYj8/+6WmrmxDnKSv74wD6h3nPKchmgAXBwdGq+0v0LblZGDh7hKD8YqQx 0eLPDVTFYMZqKMg0NDjt9XXiP0FZ0qBom/iXffdETdGFjXpvVS6tXm0GFbEcqkXHugYD p4jUabWgC2GpFKYrEQxMSy/4H8DxMpAdJvNp1fms5amG5StX8QHVEUw8HoR90GMVXT45 TAqw== X-Gm-Message-State: ABy/qLbdqECoEjeo7PZJj0JQz0Edqm5s6Tcia7Pdr+pN9Dh5OwsMexs2 JIo+h/t6R5CHswh6V7a3KjEDlA== X-Google-Smtp-Source: APBJJlGNSrKSFiHfBgDCDwymx1T6XElAyTc+fmhNn0a9fde+MwuOtWNaHmnJx2SRiMlK6zefGJ37qA== X-Received: by 2002:a17:902:f682:b0:1b3:ec39:f42c with SMTP id l2-20020a170902f68200b001b3ec39f42cmr12377411plg.5.1690192206827; Mon, 24 Jul 2023 02:50:06 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.49.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:50:06 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 25/47] dm: dynamically allocate the dm-bufio shrinker Date: Mon, 24 Jul 2023 17:43:32 +0800 Message-Id: <20230724094354.90817-26-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: 5eqg8re876wb4n3wqz9bynqzek5af3i4 X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: E7EC34000B X-HE-Tag: 1690192207-712608 X-HE-Meta: U2FsdGVkX19WVARuIAIuxHlCTzA3lmt8+IQncjsXVhu9xhq7mFCejx5LDsvPob1hDqcVqs/XGdInA1ftwjUOPLJDz5aq7GybFAhiKFudVU614TrsvFjwtdBUN24cw2BUy4A98OgaBQOtoXKFgDnYUqg5899MX/P7VdxHlDVkR0khdg5hGUeSaZ63Ax1sOaXYfVRBLUUUu/M/4ljpB15T/pHfBFKumx4AwwYxpbbCxyNJGWkm8YdUh2ahpposEZpjzik+7cIoX3sT3vnunsyvC8A9nqyBzpng8Iku3qEDsrN/1DKg1ylKDjoIjne8NO0PTv8cVEnwQ6IJ5fQXQwTtLxWEcqXuMP//Hij4QjrREbsUlal80YQc9ea4PSMpdC8C1h20n3eGL9VC3h1aFg96bEy8t13bbpGZDLn5l4x+WPrw3G7f3PKtvoPY+8GK40XSX1eb7m6GyTyc7DHkadKNIJl8UrE8bP7uhjJuY5mPLvMhe6r1NL6danhe+S3BWMbgCQbAmu3E+Y23XGqegf8huqniA21GsduMIYaH4souvl5PfOKtNvcQG8YIJTTaKZCd3jRI7oauygr4DA9Xs7UHamMzAuRxt+yVRkumcLGpYFnjcuJj2ZCXbdlK22msDuppl0Z1qmKgvKg3PmXH2LtAmPgjRtUxodKmGiB1uj0bzWOWM4XrASvBSmlUiS0Vi9E/uI7p4drsOaDCPjLHdgwsvbRfIdUYOq/Vs4Pa9pJLYttkh0OVfWcOSrfRRNQ7J3UZqiYghZX3rxEdZ+AgzsXxbQNke0SSc2tSBFUhBD5ZJpzj+d0YntJNoLVKvTnJSr6dHxpML6qJ6P1PM+lnkXntkUd13NewIY14Unf+kEp7tloVoiXPdYN5RSs9x9BrtMCNMz51Xg7+1QBsmKsVgUBt2P83pjULNePV1uJrqIdHtQdWh8KlSH6TqBfAnAEpcBaBChMyxgmeOzqYS5azg0R dNbXzsWw euFeZ8H96Q5PoZlCaSlRfKPFNVBY8CJ9b90OkujCceMr9O6mncp/x9hjpRubVUqIAIZrCOOmRDOkE1uQn4awOmmQBuz90m5R6qZ8lR6VnyxvxA5Rb1KeLvlBR6OSp7Lsd6QF8DAmWQSWHA0lyW9hoUMSwnC94zfSZFePoLyh9dYdQoExE1zEC1pYHsIpoHwim+Gvx4n8araVurbcFIqbUwij2Ub027YrPdIx4Zc4Fv2Rxxk+o5hF32fY20d8iElhxT+lYbLBO0KtzQ5OxnS0LzHBs/TsF/+ZpU01DXqX3gI+yFnr8AxH/jXN9Tbu8sSQfn1UaY7AW5t+kS6ndeTOP3owIJXpYUIjufxe1RLorivBCwsIAvD68x3buFUQkkTW1txg22h98kpg5fFgUcMg4nf+Bj2iuA2jRgS5N 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: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the dm-bufio shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct dm_bufio_client. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/md/dm-bufio.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c index bc309e41d074..028e30a4b2d0 100644 --- a/drivers/md/dm-bufio.c +++ b/drivers/md/dm-bufio.c @@ -963,7 +963,7 @@ struct dm_bufio_client { sector_t start; - struct shrinker shrinker; + struct shrinker *shrinker; struct work_struct shrink_work; atomic_long_t need_shrink; @@ -2368,7 +2368,7 @@ static unsigned long dm_bufio_shrink_scan(struct shrinker *shrink, struct shrink { struct dm_bufio_client *c; - c = container_of(shrink, struct dm_bufio_client, shrinker); + c = shrink->private_data; atomic_long_add(sc->nr_to_scan, &c->need_shrink); queue_work(dm_bufio_wq, &c->shrink_work); @@ -2377,7 +2377,7 @@ static unsigned long dm_bufio_shrink_scan(struct shrinker *shrink, struct shrink static unsigned long dm_bufio_shrink_count(struct shrinker *shrink, struct shrink_control *sc) { - struct dm_bufio_client *c = container_of(shrink, struct dm_bufio_client, shrinker); + struct dm_bufio_client *c = shrink->private_data; unsigned long count = cache_total(&c->cache); unsigned long retain_target = get_retain_buffers(c); unsigned long queued_for_cleanup = atomic_long_read(&c->need_shrink); @@ -2490,15 +2490,19 @@ struct dm_bufio_client *dm_bufio_client_create(struct block_device *bdev, unsign INIT_WORK(&c->shrink_work, shrink_work); atomic_long_set(&c->need_shrink, 0); - c->shrinker.count_objects = dm_bufio_shrink_count; - c->shrinker.scan_objects = dm_bufio_shrink_scan; - c->shrinker.seeks = 1; - c->shrinker.batch = 0; - r = register_shrinker(&c->shrinker, "dm-bufio:(%u:%u)", - MAJOR(bdev->bd_dev), MINOR(bdev->bd_dev)); - if (r) + c->shrinker = shrinker_alloc(0, "dm-bufio:(%u:%u)", + MAJOR(bdev->bd_dev), MINOR(bdev->bd_dev)); + if (!c->shrinker) goto bad; + c->shrinker->count_objects = dm_bufio_shrink_count; + c->shrinker->scan_objects = dm_bufio_shrink_scan; + c->shrinker->seeks = 1; + c->shrinker->batch = 0; + c->shrinker->private_data = c; + + shrinker_register(c->shrinker); + mutex_lock(&dm_bufio_clients_lock); dm_bufio_client_count++; list_add(&c->client_list, &dm_bufio_all_clients); @@ -2537,7 +2541,7 @@ void dm_bufio_client_destroy(struct dm_bufio_client *c) drop_buffers(c); - unregister_shrinker(&c->shrinker); + shrinker_unregister(c->shrinker); flush_work(&c->shrink_work); mutex_lock(&dm_bufio_clients_lock); From patchwork Mon Jul 24 09:43:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323761 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 61E1CC001DF for ; Mon, 24 Jul 2023 09:50:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F159E900002; Mon, 24 Jul 2023 05:50:21 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E9F776B0080; Mon, 24 Jul 2023 05:50:21 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CF116900002; Mon, 24 Jul 2023 05:50:21 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id BA7486B007E for ; Mon, 24 Jul 2023 05:50:21 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 8D4AAA0A0F for ; Mon, 24 Jul 2023 09:50:21 +0000 (UTC) X-FDA: 81046035042.16.CD24C79 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) by imf14.hostedemail.com (Postfix) with ESMTP id B0A0A100009 for ; Mon, 24 Jul 2023 09:50:19 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=YTfPugmH; spf=pass (imf14.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.172 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192219; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=tx0FAlNIhhphM8SETf+9243EVHMgBeYNK+AXzmxIezQ=; b=xDQUFAoo4KvwE3gcE+/Hy6PaivuXhKK424O1FjRKmKr6p2llgl2MHgpJ76jaL7X207tDRV X5D62+LZtkzxTGUHUyeXMyUs9H+i28Xt8N6+Xcg55g8uW3cSd2UtRIGafbyrwWm1/pcuw1 IS9cLUc1mMDhQXS7bFrxVnkct+iR+14= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=YTfPugmH; spf=pass (imf14.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.172 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192219; a=rsa-sha256; cv=none; b=qOz9DenvngizDYM/eX7pRb6cnmiu4Dpe2RKDgcRnHUVoPE8x23QggAjZWAGn90RH4M1yze pJy3iARGeQtLqO/WtA81K8G6lQJ8edYcYkzL84veim+el2FtG8BFhoPqbn0TwgNuBNOtqo NY8TjE7Xsd62JIkzNW0JW+hutzLqdRo= Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-1bb85ed352bso2239145ad.0 for ; Mon, 24 Jul 2023 02:50:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192218; x=1690797018; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=tx0FAlNIhhphM8SETf+9243EVHMgBeYNK+AXzmxIezQ=; b=YTfPugmHCk5Giro4CjFOmzbKkI7HJdV0vsDB4TzS6mGnPQKEUemoxYTNWrdu/E93kj 6rb1na84A/nf6JJQgZLRucXt2LbXOJbRmcuphszkqRQsFezxcJpi7w4b7fLRmYCBPcZF 4l9Jesyer1cnHOeAOuu1atoBtGOF2Hi89J+wuYgFZbI4os99VTzsysgcXEMrYAOOTtWx pJJhhqbwlv5qn9Pf+scc/easkuZhqJ5AueYpxd4sdsrGo5W3f8JKXrqMpLvSxxgZLh3E 1PGhTx/OpgjsdMBthM6uSfqb5CFC4LVij0h3lS8QWwDKGMYakkpMlhcXlyLOkFlcnv5i ndxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192218; x=1690797018; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tx0FAlNIhhphM8SETf+9243EVHMgBeYNK+AXzmxIezQ=; b=GXh5w6Of4XlpLXOuo5c+SHW4IvPnpyQWrVaCssLF9yLHKSK3T7jUWVZwRmhwjtKQ4e BctaZSHJnfehHVWqC2nEz71k3kVSPtCo7kdjFNNRpPNMldvC8r6UixCxKehufoucxBJB xG5llQgcQASvkYY4PFBLYQdI1Gv2lxPbZemx2UcI3ptL4Qvh6PxGok/VCCMJ8bO04Qxn ZBfzLk/BD88rZlN/vuIykjHV+WH7ePFWiiljATEM8qt9Jmf8Cxuec4T32FyeJrxnmFfY zLCjEOxg5xhE4BLrpo6uFVuQD2L4js2oQRxZXp70LLloFCeRNE4NkJF8Z0w5Mm3MB7HD bA4w== X-Gm-Message-State: ABy/qLalG5TUjGuO8ts1Q7zE3/HwRss7/4BfvJQ1M1Y3RsNlHz7+dhw7 VLNcQoQcb/hgFiQ4eRtsIzPTIg== X-Google-Smtp-Source: APBJJlGW4+fw6ZDbsnwnWtlRY7yHkFW5IEHW5elDNTPh+ZvgkUhUSx4grfoYhobvAlLuy2pBiwekLg== X-Received: by 2002:a17:902:dacf:b0:1b8:9215:9163 with SMTP id q15-20020a170902dacf00b001b892159163mr12201959plx.6.1690192218573; Mon, 24 Jul 2023 02:50:18 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.50.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:50:18 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 26/47] dm zoned: dynamically allocate the dm-zoned-meta shrinker Date: Mon, 24 Jul 2023 17:43:33 +0800 Message-Id: <20230724094354.90817-27-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: B0A0A100009 X-Rspam-User: X-Stat-Signature: r8yhfzojqak6rzcjdzrwoixfogc6usbe X-Rspamd-Server: rspam01 X-HE-Tag: 1690192219-315460 X-HE-Meta: U2FsdGVkX1+X0FFqTbXbim+sQzwkILpFUaQrDoS2opjZwDk3wvqsxRLKifek1GsZvgKO2fT2tygAGv0XQ/G3H+bLszkaRHYhQ56UG9fDS53oOZShnPsi9fbf2wrdAhnX3DonR6oE0t5gOr0Lm7LrE+9RWoQP71UnHNvSfIddOZyiNYIkjhDZuh2ON9Ray7LGIAEzxdlFUbonyzhbRxHFuk+DypBs9AeAz2/o3WGtsij4PG/8Tdc9RlOTUTRc2NSSnReaIvLMmfEA6MvGXqb/9SVsgrgfQycx563ua4dewroOTyB1k6JX6zZBbEYp1qarkploO4Wn6TtoIGtbKBzKPhjjO/7eIqBKnPqBeLXUxKAeGqUd+XGN/eSbRlxTBsJdYvfluTTFhlTKWhQLhAMgZ6+HAdcPIWP9hpwp/0b0/1yIMBOtQ5066TaxA7/UDcT0qhWlUYQJIJNWeL3GhBPqypER5EcnQrHx/ViAoZaknli+UqrWD02MSETwCXlmLA7fx6Aoa4dGNRsJd9ysjGO8VecEL3ZUNmSbaIQ5+fc2Anhsp6+oy23rZN9rSouFODWTSO1ziUBwYiuIUJTphhF1r357dJx+KDMuqLwxdbFD4fwOE1idobzhGfqlXIdc6WIPU5sjV2aKwiDVCFS8022rO9r4klgGdVkptPARcmSTyBISzPRdP1X7XOQG/uh0Bkhqx9JSyHXUFrjKvRv3GYZ5yIRaYpwB4au/V6g14UzEfT5ooFHinB0zpN4ic9OOrZgq5rMX3gKdIvjtTgXmfUouIuqTw0mdxBB16CUzg4czcSASOkYJB3RJcDQf+jFm6F/HTdwMa51LnLolAMHikNRP3RktV7PvKkrEfjzmouIySvsogg3jO75cJyYMVtNB16EPh0SkdCO1+bV54EwiVDBWPIK+CKhKlRFOtb5cpy1H9Zv2lJFyNvuQqc6pvOqI0QApYc5G8jhXEffsNwRmvlJ O/WC+D8w QjDMtQl2Ov6bCLrZsDIvKz1Wiok//gSsYUFkUPJsWkq+ayWrUVWfKXE/4G25JazqkkbT5Im4y+ifpCMqf37BUVwRw2TOK5uffChExaPFrBoE5IfQFQHyiXBGPwSI/vKdDTFynLdqBKTGwJ9s7nia2VsS7i3sxwyFq9HIbmaC7Jkmo4vBtuBq811XsYmbj25VP85BUkkcJJo4pOJLJf2MV49V0MP532wDmmuO65/3IJmddkqKgL/bgZPgD5xBYaLeHJElMIdimSXTD7tuXgQdfEQwQWl+jpEDHrjKTTVwwzBrktA8lHcxxuDhnkPrXttVq84UcUaAFIuuYcCL30g8Lg3Otm51xzf40rahfPaSqcxXTUMCLKYwr0USasJc0s4hANvI5z8nkLCDVqQNvBqoXbMilAhrDDCBaQJ6F 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: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the dm-zoned-meta shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct dmz_metadata. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/md/dm-zoned-metadata.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c index 9d3cca8e3dc9..657f274e4e84 100644 --- a/drivers/md/dm-zoned-metadata.c +++ b/drivers/md/dm-zoned-metadata.c @@ -187,7 +187,7 @@ struct dmz_metadata { struct rb_root mblk_rbtree; struct list_head mblk_lru_list; struct list_head mblk_dirty_list; - struct shrinker mblk_shrinker; + struct shrinker *mblk_shrinker; /* Zone allocation management */ struct mutex map_lock; @@ -615,7 +615,7 @@ static unsigned long dmz_shrink_mblock_cache(struct dmz_metadata *zmd, static unsigned long dmz_mblock_shrinker_count(struct shrinker *shrink, struct shrink_control *sc) { - struct dmz_metadata *zmd = container_of(shrink, struct dmz_metadata, mblk_shrinker); + struct dmz_metadata *zmd = shrink->private_data; return atomic_read(&zmd->nr_mblks); } @@ -626,7 +626,7 @@ static unsigned long dmz_mblock_shrinker_count(struct shrinker *shrink, static unsigned long dmz_mblock_shrinker_scan(struct shrinker *shrink, struct shrink_control *sc) { - struct dmz_metadata *zmd = container_of(shrink, struct dmz_metadata, mblk_shrinker); + struct dmz_metadata *zmd = shrink->private_data; unsigned long count; spin_lock(&zmd->mblk_lock); @@ -2936,19 +2936,23 @@ int dmz_ctr_metadata(struct dmz_dev *dev, int num_dev, */ zmd->min_nr_mblks = 2 + zmd->nr_map_blocks + zmd->zone_nr_bitmap_blocks * 16; zmd->max_nr_mblks = zmd->min_nr_mblks + 512; - zmd->mblk_shrinker.count_objects = dmz_mblock_shrinker_count; - zmd->mblk_shrinker.scan_objects = dmz_mblock_shrinker_scan; - zmd->mblk_shrinker.seeks = DEFAULT_SEEKS; /* Metadata cache shrinker */ - ret = register_shrinker(&zmd->mblk_shrinker, "dm-zoned-meta:(%u:%u)", - MAJOR(dev->bdev->bd_dev), - MINOR(dev->bdev->bd_dev)); - if (ret) { - dmz_zmd_err(zmd, "Register metadata cache shrinker failed"); + zmd->mblk_shrinker = shrinker_alloc(0, "dm-zoned-meta:(%u:%u)", + MAJOR(dev->bdev->bd_dev), + MINOR(dev->bdev->bd_dev)); + if (!zmd->mblk_shrinker) { + dmz_zmd_err(zmd, "Allocate metadata cache shrinker failed"); goto err; } + zmd->mblk_shrinker->count_objects = dmz_mblock_shrinker_count; + zmd->mblk_shrinker->scan_objects = dmz_mblock_shrinker_scan; + zmd->mblk_shrinker->seeks = DEFAULT_SEEKS; + zmd->mblk_shrinker->private_data = zmd; + + shrinker_register(zmd->mblk_shrinker); + dmz_zmd_info(zmd, "DM-Zoned metadata version %d", zmd->sb_version); for (i = 0; i < zmd->nr_devs; i++) dmz_print_dev(zmd, i); @@ -2995,7 +2999,7 @@ int dmz_ctr_metadata(struct dmz_dev *dev, int num_dev, */ void dmz_dtr_metadata(struct dmz_metadata *zmd) { - unregister_shrinker(&zmd->mblk_shrinker); + shrinker_unregister(zmd->mblk_shrinker); dmz_cleanup_metadata(zmd); kfree(zmd); } From patchwork Mon Jul 24 09:43:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323762 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 490E1C04E69 for ; Mon, 24 Jul 2023 09:50:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D8E8B900003; Mon, 24 Jul 2023 05:50:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D195B6B0080; Mon, 24 Jul 2023 05:50:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B91E5900003; Mon, 24 Jul 2023 05:50:33 -0400 (EDT) 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 A89796B007E for ; Mon, 24 Jul 2023 05:50:33 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 8266E1209DF for ; Mon, 24 Jul 2023 09:50:33 +0000 (UTC) X-FDA: 81046035546.17.480B176 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) by imf15.hostedemail.com (Postfix) with ESMTP id 85AFDA001A for ; Mon, 24 Jul 2023 09:50:31 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=HTXrSeoR; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf15.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.50 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192231; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=h5Pgz5o85vjRJX2NAYGHXGIfrVWxEYXMNean3UujJOE=; b=NwffXQGFh57uemF9UjjKE34zS9F6PnTBYKpcE8IwcCww983gAKTeT+kr+7+B6jHFZi3ux3 ZNlNyjnZ+s5OPBhkwoGeNXYnMqi5oAvUIFnjJ/f6eAPfG2zKMwYvULk8XmU5KAxhwAMKis yRZtXkH+Ed3NUrRcstE84MLbHUz+G8Y= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=HTXrSeoR; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf15.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.50 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192231; a=rsa-sha256; cv=none; b=BT77GmK8Qg0me4Bd4mppdKz43ilfhY3A1JhCLO39oti6oRrhyotMqUJg6nXuWdC7YrmdiT RuMNYCh6xYB8Sv31HwZL7AC8hwBenHAnDBgagnEmLB5nlhA7puYZpAu7OFNfg8LGOJFJur U/jcZmriU5zuTh30MKh5DUUAUJRVN/o= Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-2659b1113c2so536274a91.1 for ; Mon, 24 Jul 2023 02:50:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192230; x=1690797030; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=h5Pgz5o85vjRJX2NAYGHXGIfrVWxEYXMNean3UujJOE=; b=HTXrSeoRNfCylQUvp3rA93XfC5B9ZAm1jE2rq6Hxhf34WiOMuxDD1meCGjwu9EwIX7 ZbtHbS4fRmsyA8f1AQ95KeA8pk2Wu8dqsEYadFuPM8kR0aC/DghUlOU1O4pFRVVN27md Jz3ZRGJgXj2574vm45/AlAwiQEEVW+fNcrUB9gqDXxsp5xfvZzaaREkRLWgNT154mbaN kLE4oZiRvqBvE8wXvErAyC7133TniCzwa8RrEDkzsepAqin0to9X/dlSZmLYhsSlZCfb 1LIBzBngTPhlUQBluPspeHfucBGL5ud/FkBEqD4eyTXeqLx9y9KdZjNraR8njMzNn3Wl 0XdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192230; x=1690797030; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=h5Pgz5o85vjRJX2NAYGHXGIfrVWxEYXMNean3UujJOE=; b=SHyTMafrx3NK5aHZauYZUI7sOiG7CepcATxkhIuQJfYZQ4EW9bJbwqcIgnQOo6BaaN VWDx8pVW13foEXck5JgqCyExQBvy7hvWiy0WthNVqG4aNiGVLD3LsQav1pJXlxTdsmkK 5oJF1t9SSWzPujsn0jQXD9kfVdX/cKozgqYlNQXcBtAM3BY5iJqUYY5cGJt8g1xR0Q2U zWK2d6fEI296Hqa0FXN4YqZrT3mdoEoiVLj9KFK9GyIIVAP/lLttI0vhbGT5jq9OBVV2 oVSOp3OYbNOVq6qsY35qWhx7vK5+WfOSXsOrzn2gU8k0z5iFPJeEYFI+2qhvVIYdxSYX wMuw== X-Gm-Message-State: ABy/qLbllQN8yKq9svkB8jtWC30w2D8iUjdhUl8CNVg9qywjV5fgiMZI kZbDsqOkBit0pFbgiGpDLdvz8w== X-Google-Smtp-Source: APBJJlEuFsN94AIprk7ia8ABwlM0Slt2XXWIAtSq+6lqm1qdEZFYXWzDVMuJVyeP2h9BJXp/48ZO1g== X-Received: by 2002:a17:90a:5a4c:b0:263:1e82:2dc7 with SMTP id m12-20020a17090a5a4c00b002631e822dc7mr8465919pji.0.1690192230524; Mon, 24 Jul 2023 02:50:30 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.50.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:50:30 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 27/47] md/raid5: dynamically allocate the md-raid5 shrinker Date: Mon, 24 Jul 2023 17:43:34 +0800 Message-Id: <20230724094354.90817-28-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 85AFDA001A X-Stat-Signature: ncqygs1zh3qq3zujxzyt1w3zeztqeje4 X-Rspam-User: X-HE-Tag: 1690192231-181280 X-HE-Meta: U2FsdGVkX19krKiPI4j7ZWcGawLiKFAiB7QX9mWO4DOMHw/4v1aNMtiiFXW8vJj4xv2knxIs32ksDryWczbvAEaQsG9iC62v+83CWEBTYP5iXsZUIPtCllhJyCbojCT3rv52VYnaP3klriiUVh0x+6jIHL+eYqMp1qegXz83kWvc9XqjX3owfiIfjZozfueHFeHjs9lMBlkXqwxd0KRs8JHCows6XPm8qMGXV4OQmZlOZsyfFsjNH5hpXoCUizLLYzyXBbOWbP9SyQeCKvNasd3v5yoWtEDgLlvpVAqtNSK87EYvvfqRt+fLQwJ1rkPPF4LBYjD6WAmDSG8bNU/aEw0994aAKSP/2bcQMMzRTKG8Rm0xC4giP7l7365MEEh3TXfzZpr4HTXmgiWAUhyI3fNHbrKTUieTAdIFBHV84TIJDukPCARu3wt+KWW09Y/4rl2dTgyqkP4PzjlTA33BZI26n08OnWVLHXHRaH2tIMt60Mc49eBm24tQn9tYO5EBEDYlz8WZC5B7ljjXqXGzS270iDd68LduVNYnkg0b1K9/1Gfgtz/GediVMFcmOPBSipFMFd/21wlQk+Ae1CaRUvr1Tp08sxlO88sGUZ7aS4JGiCR5wDaKGC32mnOrp/8UGtIa6Djg927dQdn9BXvSVz9uAxaOuN/p6pB9no1cjz+2ew7zBH7wKVPuq8/BLrrXCLMM296gjuaHb07oyMr9QKdnYELShejZvxaXcXx8jt+yQT4HxjKCA5BmEAeq82sqLzB/gvLtNLMVW1ynry5i9mkjgPrW8Nco83vGE6jIrg7erWZvm8j115Btf1Cw61HE4uy9qYm04mIexgpbuUJEN/dNOgTKWgjYwgPGnwDZb8eKOXDYA8mYN644MUioI7cWiJof48j8So0dASczRS/bLRF/YvCIYhB96ZsIVzmEjmSzXfyW9KwhMbf28PIG/uxToUx+SmZTJjaF5GKaAZ9 eEvLuAyC OPf4H6SWiiAChNwyo/+h6yvnwze2kIzaG/4GEjXlSMhiHi8VCTKmo4SBFuHQTSiFOTCjRGFEP9HFdq5HVlh1anxlrWavw7laWU1IX6FirH0qcPjjGD+uwqubZHPxwLXlKfkc0gb67Sf6prr5g3Jg07rGGqTd3VBaYKOiLd7+Yqh9q3cGRaGx/MGPjBmyXVY1W5HtaNRLJHTMUhdCGEobCoZDCh+GBHujPeUAIhMcA/wQQ7XPKHUiF0V3SYtLJlL/+m8GbvUZlVUGOiDDs85Ll6kTn9cJG3YDWxLYii2In+GI/tPGtKQdFYdbEUVobRW4wTe33GwVQtJ/eE1VZD8DoHSL7UarHO8qPSCG6xG5ZypslvMCdM72MC34mHcXGG6h271a5Qb7XsXwqd6rOeOzWvIV65orUy/u33IqK 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: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the md-raid5 shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct r5conf. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/md/raid5.c | 25 ++++++++++++++----------- drivers/md/raid5.h | 2 +- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 85b3004594e0..12443dfb7aeb 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -7414,7 +7414,7 @@ static void free_conf(struct r5conf *conf) log_exit(conf); - unregister_shrinker(&conf->shrinker); + shrinker_unregister(conf->shrinker); free_thread_groups(conf); shrink_stripes(conf); raid5_free_percpu(conf); @@ -7462,7 +7462,7 @@ static int raid5_alloc_percpu(struct r5conf *conf) static unsigned long raid5_cache_scan(struct shrinker *shrink, struct shrink_control *sc) { - struct r5conf *conf = container_of(shrink, struct r5conf, shrinker); + struct r5conf *conf = shrink->private_data; unsigned long ret = SHRINK_STOP; if (mutex_trylock(&conf->cache_size_mutex)) { @@ -7483,7 +7483,7 @@ static unsigned long raid5_cache_scan(struct shrinker *shrink, static unsigned long raid5_cache_count(struct shrinker *shrink, struct shrink_control *sc) { - struct r5conf *conf = container_of(shrink, struct r5conf, shrinker); + struct r5conf *conf = shrink->private_data; if (conf->max_nr_stripes < conf->min_nr_stripes) /* unlikely, but not impossible */ @@ -7718,18 +7718,21 @@ static struct r5conf *setup_conf(struct mddev *mddev) * it reduces the queue depth and so can hurt throughput. * So set it rather large, scaled by number of devices. */ - conf->shrinker.seeks = DEFAULT_SEEKS * conf->raid_disks * 4; - conf->shrinker.scan_objects = raid5_cache_scan; - conf->shrinker.count_objects = raid5_cache_count; - conf->shrinker.batch = 128; - conf->shrinker.flags = 0; - ret = register_shrinker(&conf->shrinker, "md-raid5:%s", mdname(mddev)); - if (ret) { - pr_warn("md/raid:%s: couldn't register shrinker.\n", + conf->shrinker = shrinker_alloc(0, "md-raid5:%s", mdname(mddev)); + if (!conf->shrinker) { + pr_warn("md/raid:%s: couldn't allocate shrinker.\n", mdname(mddev)); goto abort; } + conf->shrinker->seeks = DEFAULT_SEEKS * conf->raid_disks * 4; + conf->shrinker->scan_objects = raid5_cache_scan; + conf->shrinker->count_objects = raid5_cache_count; + conf->shrinker->batch = 128; + conf->shrinker->private_data = conf; + + shrinker_register(conf->shrinker); + sprintf(pers_name, "raid%d", mddev->new_level); rcu_assign_pointer(conf->thread, md_register_thread(raid5d, mddev, pers_name)); diff --git a/drivers/md/raid5.h b/drivers/md/raid5.h index 97a795979a35..22bea20eccbd 100644 --- a/drivers/md/raid5.h +++ b/drivers/md/raid5.h @@ -670,7 +670,7 @@ struct r5conf { wait_queue_head_t wait_for_stripe; wait_queue_head_t wait_for_overlap; unsigned long cache_state; - struct shrinker shrinker; + struct shrinker *shrinker; int pool_size; /* number of disks in stripeheads in pool */ spinlock_t device_lock; struct disk_info *disks; From patchwork Mon Jul 24 09:43:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323763 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 1CD53C0015E for ; Mon, 24 Jul 2023 09:50:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A5BD16B0075; Mon, 24 Jul 2023 05:50:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9E404900005; Mon, 24 Jul 2023 05:50:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 85D74900004; Mon, 24 Jul 2023 05:50:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 776CF6B0075 for ; Mon, 24 Jul 2023 05:50:45 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 4DEAD1209A8 for ; Mon, 24 Jul 2023 09:50:45 +0000 (UTC) X-FDA: 81046036050.26.AD4E3EC Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) by imf28.hostedemail.com (Postfix) with ESMTP id 6F813C0016 for ; Mon, 24 Jul 2023 09:50:43 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=XqHXKo6v; spf=pass (imf28.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.176 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192243; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ZDFCq+3UkmhmTN0HM4/h2IKWPu86Pd5FvtdYemXQxRk=; b=1k+/GBAabGprPayDR2nRjt/PlTFJGErplmDwPLGXv1CCmxaj6080OgG3Up89erSA8DmcP4 erSb2NAlQC4OBO0yAS8L/IRf5hP/VV/sK4jm5/YmIvjjWsN0eJZH7mPD/Q/w4pZkbKTTbh DIV57fpgXUU8lqLGT6DI4LfeOwTgOvc= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=XqHXKo6v; spf=pass (imf28.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.176 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192243; a=rsa-sha256; cv=none; b=24W+66kRIerzm0M9/fYCAD97NC0yueJyilXIS3SwSAWWfUtQEz6xSl43thGOTUGlwVO+u5 q9Br1oPNCbiQAq4cGkwPKIjhnmaiIt4cgWPIwWRItfUz8KBzAzUR7PGpNhOpDeZl6et+Tn VRZkhnQbqpaNbZbw7XEbcbTN9BgAX24= Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-1bb91c20602so2232135ad.0 for ; Mon, 24 Jul 2023 02:50:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192242; x=1690797042; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ZDFCq+3UkmhmTN0HM4/h2IKWPu86Pd5FvtdYemXQxRk=; b=XqHXKo6vbgHHpc6RhHf64kOEkWmd4DwF9S3G2HlcDNVprLbMgrziPLHmF3/SloAlTi M4qErsaBI3Xm//ZP8dUEW0qhn54k8U+Wqiz5Z3pGQ/Kj67wHGAvT2pzICXrQ4EWgGi4s SU7OWwibP9GfdaanTmVVTd7EGnabpaclCsU9Kc2UxrRFm4MGqpHvMAQuuWz3XkPdgRtX h20Y8gEliJsCmA8XQP0mFOD72LdPGTY+615jy3RfIBkDojgIRwF3RNuCELN3vZVJJ3vk B2oIbMm9U2+ETc6xL/s4Xuc7N8cOCExDDhuoZilq51tIchlhwDinGVhSK9NnH/LxlRAX CyQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192242; x=1690797042; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZDFCq+3UkmhmTN0HM4/h2IKWPu86Pd5FvtdYemXQxRk=; b=Qukcyi9CMznr6ibqiSKPOTU44se+MUMACegfAQyuHJjKkuaNQgdH7lHzMiKbhJAk0Y POZjeOYTN827MT8gpe2rrnL2CHH/YoFhHW0hEKAoS3MQ/TaQq5sSmPm8PPYZLhqbxLTz IBi8X5fPJpztOqrRMnF+TL/CFBQ38l4Gf2L0XaAnUZdq5vapduBeA5blSoZCqokFWXMn DCEjytEH77oUY596DgxSCCvvtL+cLeTPNA8MA9RVb94LS55H2Ao+ud000Q/hgApg3Irx HzC7gP2frJMOLQMd6HqeO1Q8YOwSu13W+zghTX6EzyHb1nVN2ZZ3bMsI+z9Nil7dMFbU dy/w== X-Gm-Message-State: ABy/qLYu6lFApHMiASAntHKzt1+Po7xM+XdLh0HDSoqZMpo4sZM+i3eq 9Bt8bvzmXavpaXuy6xIOk9wrCw== X-Google-Smtp-Source: APBJJlGR+n0mPlGVKvsXqmDpjqybpKJnY8gMKNhLgc/3jSHzBMUiGDHHAqX91CFo21fNITu34xNtfg== X-Received: by 2002:a17:902:ec8b:b0:1b3:d8ac:8db3 with SMTP id x11-20020a170902ec8b00b001b3d8ac8db3mr12344607plg.6.1690192242411; Mon, 24 Jul 2023 02:50:42 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.50.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:50:42 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 28/47] bcache: dynamically allocate the md-bcache shrinker Date: Mon, 24 Jul 2023 17:43:35 +0800 Message-Id: <20230724094354.90817-29-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 6F813C0016 X-Rspam-User: X-Stat-Signature: 77w8jyfaqp34bdmuo589h3u3rxzebreg X-Rspamd-Server: rspam01 X-HE-Tag: 1690192243-355533 X-HE-Meta: U2FsdGVkX19AwB232p0Yi3nMaPaAJezYfDVfzzRUWSDoEiWdrPJHpThEveB+LO4snDe6ddEe6Gl4cBMUEKezPnbeljISnf8JDjnxWx3n6a3W/o0ZFqNuhdOP5g8d2ybllWR2t2NFWPzglcJawWu8RVXzGl0XXgehUGV1s9LTow1TTAvYx2qPjol370MjZylvXeyjaRvvyVOIxC97cEUayYXmWU5G9mve/98MhvpZOGmrzTfVHyiC8rYL9gqg4/4v6Hf25q0K3SoChdtO24SSSpebvo/IVptH/XAlMNvt9Cd807a+BftB/447igNg6SXIrQnb6g5yxd7s88nfe4Ck14nYT6aco3Hb3wE7vsuvCMQcEkDuXaM76CM67/6WJv7zpIhH+dJ8bRYeo8HX83UuL1GyzpJBhtD8qKocY0zVBvM3iwGrA2JFJAhuc8nRbHK8YfgZbVwFcKb4BdcNIIZeG5I6+XRjz5btXYLSFSgWzR1K2nKHnSqBfacdVXLBRS3kf0tZY5vRLEFdwwOPjQYB/Mftu9PE/JFCrcMHH9n3ALrDMbUp3m0mkXM1rkWOZOn7Upjjg7m9/yxOzzbXYoNVodSdqvzVGKxy2PfL/CA5L7OrrVTAO2n94PYqtHpmDW4dsVEBd1dWVPcDDasE+eMOhDEtM0BxpdDakZ7SEtN/V2LEyN0Oe4i00FjpUkKZTlVVhLeSw9SusHsyxXkNXrkpFy+DcTvS1tUbEthRyo9I8Tus60u7H/hfIEdVgEVzCk746kSHsh7KGLFB7aSh1mFUqcBM9prkT5kWLp/PR6OVdHCAe7U/7WCULeNvpqp1Mo8XRmslGY0bHhc6tRssn49ULUpokY/EL+ihFL3iCFxnavM/bw44gY/P74dvBmmMZKYexTlXmsW3hlFHszk6MI1BIovs5EWSm8xi5WtDJf1Cmogm+ZwxZjY+D1Y80rY5aueZrU3xUBBIvcr6t8V0I7S +vdnQZ9A A7PJcnuW/Lz8YIbh1x92yYqsWZfMnTmmnJySspisC4Fr/zbhyE6x/zM4B4Cvyux+3cMJ+ORnlATi8DH+adbIqckjlptQKoh2Uw7F5M08+Sqs90NJm+VEbsJOPd73qCE1gNAT6WTwXjoYilxn2TPHkGO5HbEYvKpMrsXY7t6cQwoCIfSmzEbkYNcb65pH6+PxzjKF30VNCP3GoMMfQUr+J0TLKx9YLDcEscw/1dGObc0FJ6jMuvhmDTGQstAkbe8es6F24p7lJmxmRdKSFoKrD+spIB+bJlB2F/kj6Owhhzcv1NMQbsQl3jUU14wN4snct+PYOHaM2nDmJZQHXP3NjbFy+GwuNbIRPhz5WvD7ZTXfwfZscwOqodH5+1LEQjT/dxa8sUYjPLzzwfg6UYTF36vus6DYpG12ldV7t 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: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the md-bcache shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct cache_set. Signed-off-by: Qi Zheng --- drivers/md/bcache/bcache.h | 2 +- drivers/md/bcache/btree.c | 27 ++++++++++++++++----------- drivers/md/bcache/sysfs.c | 3 ++- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/drivers/md/bcache/bcache.h b/drivers/md/bcache/bcache.h index 5a79bb3c272f..c622bc50f81b 100644 --- a/drivers/md/bcache/bcache.h +++ b/drivers/md/bcache/bcache.h @@ -541,7 +541,7 @@ struct cache_set { struct bio_set bio_split; /* For the btree cache */ - struct shrinker shrink; + struct shrinker *shrink; /* For the btree cache and anything allocation related */ struct mutex bucket_lock; diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c index fd121a61f17c..c176c7fc77d9 100644 --- a/drivers/md/bcache/btree.c +++ b/drivers/md/bcache/btree.c @@ -667,7 +667,7 @@ static int mca_reap(struct btree *b, unsigned int min_order, bool flush) static unsigned long bch_mca_scan(struct shrinker *shrink, struct shrink_control *sc) { - struct cache_set *c = container_of(shrink, struct cache_set, shrink); + struct cache_set *c = shrink->private_data; struct btree *b, *t; unsigned long i, nr = sc->nr_to_scan; unsigned long freed = 0; @@ -734,7 +734,7 @@ static unsigned long bch_mca_scan(struct shrinker *shrink, static unsigned long bch_mca_count(struct shrinker *shrink, struct shrink_control *sc) { - struct cache_set *c = container_of(shrink, struct cache_set, shrink); + struct cache_set *c = shrink->private_data; if (c->shrinker_disabled) return 0; @@ -752,8 +752,8 @@ void bch_btree_cache_free(struct cache_set *c) closure_init_stack(&cl); - if (c->shrink.list.next) - unregister_shrinker(&c->shrink); + if (c->shrink) + shrinker_unregister(c->shrink); mutex_lock(&c->bucket_lock); @@ -828,14 +828,19 @@ int bch_btree_cache_alloc(struct cache_set *c) c->verify_data = NULL; #endif - c->shrink.count_objects = bch_mca_count; - c->shrink.scan_objects = bch_mca_scan; - c->shrink.seeks = 4; - c->shrink.batch = c->btree_pages * 2; + c->shrink = shrinker_alloc(0, "md-bcache:%pU", c->set_uuid); + if (!c->shrink) { + pr_warn("bcache: %s: could not allocate shrinker\n", __func__); + return -ENOMEM; + } + + c->shrink->count_objects = bch_mca_count; + c->shrink->scan_objects = bch_mca_scan; + c->shrink->seeks = 4; + c->shrink->batch = c->btree_pages * 2; + c->shrink->private_data = c; - if (register_shrinker(&c->shrink, "md-bcache:%pU", c->set_uuid)) - pr_warn("bcache: %s: could not register shrinker\n", - __func__); + shrinker_register(c->shrink); return 0; } diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c index 0e2c1880f60b..45d8af755de6 100644 --- a/drivers/md/bcache/sysfs.c +++ b/drivers/md/bcache/sysfs.c @@ -866,7 +866,8 @@ STORE(__bch_cache_set) sc.gfp_mask = GFP_KERNEL; sc.nr_to_scan = strtoul_or_return(buf); - c->shrink.scan_objects(&c->shrink, &sc); + if (c->shrink) + c->shrink->scan_objects(c->shrink, &sc); } sysfs_strtoul_clamp(congested_read_threshold_us, From patchwork Mon Jul 24 09:43:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323764 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 230A3C001DF for ; Mon, 24 Jul 2023 09:50:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A34D5900004; Mon, 24 Jul 2023 05:50:57 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9E45E6B0080; Mon, 24 Jul 2023 05:50:57 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 85DCF900004; Mon, 24 Jul 2023 05:50:57 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 76D1E6B007E for ; Mon, 24 Jul 2023 05:50:57 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 42409160A16 for ; Mon, 24 Jul 2023 09:50:57 +0000 (UTC) X-FDA: 81046036554.25.9374BE0 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) by imf28.hostedemail.com (Postfix) with ESMTP id 7892DC0008 for ; Mon, 24 Jul 2023 09:50:55 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=M5PackbL; spf=pass (imf28.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.179 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192255; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=qE79rW9nQFdZueatbKkJSwG7PQvomLDBWPiy7CJ1pOw=; b=rcokaxVqA6syhNTghk7PpQ09dVzE9EAlgZnRPhchYz5aUXXyeKgzWqcFMVtpQ5uZY2PW0U EDnzhaD2cNFchLX7SX/wswz26UXr80ttfkxj2tyGIkpOW/awyZtbLqrxE72X84cty6wjAb UGVwoeeE+zlngJoefupij9NwUX3DqFU= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192255; a=rsa-sha256; cv=none; b=Toqo6FXb/RPXD2FyHSt1BdQzG7Xh2fXKVymuek/o40z0ysYXF5qoq0m01JoMEL6gqKoak0 WDeZ6aNac6OLJKv/pIXS9f4eW5wxsEHyFwZDwPDewJ1rUOOhis2uGBhcrM99lBNcucy5+a XfyMVzQ7sdncQgLf1IadrMOoyYU1/RQ= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=M5PackbL; spf=pass (imf28.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.179 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-1bba9539a23so647595ad.1 for ; Mon, 24 Jul 2023 02:50:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192254; x=1690797054; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qE79rW9nQFdZueatbKkJSwG7PQvomLDBWPiy7CJ1pOw=; b=M5PackbLD4uz3PJU8ZrV6Y6kpl/UkDSiJMWkyeKo1o/QqggjCRDFeggmumRocssEkO U5pgVFb8eWXMORlIOr1ePtq+FK8kOLkQFNqmDuq4b+d33HgRHPfZYHAMUXUlROjpk8+o J1M8uQcskFRR53Czt+aOUFg/PIJgAadgSulzfayHiil7eFnaN+rquA9rpl4WBOKlzYvu UE9+Mze0Myg1eBjhHiRU9V6RNrQVMPxaTSp0Rfud/ExFs8cbE/oAjSNMW4v95hOWnnh1 IBtexczqggdcPw8iGrtFLB0PL+o6pwYWvLTFYmwk22wyiYE0MeWKeaT0SoMLZVVWr3fx Grfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192254; x=1690797054; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qE79rW9nQFdZueatbKkJSwG7PQvomLDBWPiy7CJ1pOw=; b=IrS1ALtY6KWiV/lHY/ov/3iJFmJEBxRkX3xFf8642s5ohw69IWH5q7QrKolWFE1Xt7 orsvPVbh1eXqLUDkOMZkz8pB1Ult2LYoFCGzDSf7ibJzzL8iaQ1DFpaLxprVXE++rbLC bYnPTR1d0o3JdDZ/NX5Xs3JX9g5nVu6DW26bcd3BBkVTdepUbjb77SEwbPh+3aaKBknA c1ciVoQE3M78DMAytCmWdMgASww71TB4BNBZyt4AvFhqRbmON7n0ExICJVnYJN7++sg3 Mz0r2unU43K3M8WFwMsGcnlOFum2WdzrXGEG+syMcks93sVr1UB1CMev7zUg/m7MbYBU lwng== X-Gm-Message-State: ABy/qLYoO6IZNBZC1GgopFFrgM1IMtE774TGKeAeRnV8YyGwakNHaqce rVM+ddTzmpU4tv1aLgLD37wISw== X-Google-Smtp-Source: APBJJlFDDpJsPsXaM9K0eN3GbgFDnugc0MZ81V5AeEkSNRv9osxW0v212MSH0egY7R7+BB7SiCdLdQ== X-Received: by 2002:a17:902:e802:b0:1b3:d4bb:3515 with SMTP id u2-20020a170902e80200b001b3d4bb3515mr12388503plg.0.1690192254453; Mon, 24 Jul 2023 02:50:54 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.50.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:50:54 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 29/47] vmw_balloon: dynamically allocate the vmw-balloon shrinker Date: Mon, 24 Jul 2023 17:43:36 +0800 Message-Id: <20230724094354.90817-30-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Stat-Signature: sg3nj3ktxeiitrk3oo5ufmpoauhycbmk X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 7892DC0008 X-Rspam-User: X-HE-Tag: 1690192255-730568 X-HE-Meta: U2FsdGVkX18L3tuPqKQh8EFK5f/Mjq9DIY+JoqivS70u8qseS5rTFhcTri1XM5c2pVv5pw/grmp1W4gqltD3lzTmBvqAkoCy4Ys1eOnEmexmX/EE3qMULEYG+uVtKzmFkIhjY0b9sXgBXd0giXOfgN5Bq/wTgs5BH5LRdYw7mtkrIe93eR5RYg0Ya+xSglRqmMPbiMh8P4Z6WN2iVpkJ2+3Bcc5AJN1u2W7hauex4opkkqkd87n/1DBnf+uWAn9oNrUKZVYKzchLUNRfy7RV7PNUaRuPPlTXd2SrJo/azSG2SJLrnofma1mEGtCcEzWIWF82vmW1cKSKovjgjFbUBx8dumFaflVCnSqZcN8hWqcFw6H6DVQg5Cd5jvigqFsSblyRwvA6nhTYWdgzRQdYC9v/tQv5y73bKjTWL1QUAOl2ed6tXyvPOGrQrXNZcYGum47pD6BO2o3+K7P1myb2Y/zgulXtXLvnjU9QKMSzVuNao5HPCEK06n/SmuKIejMWSlxOFccL8FvNl+EPjFVeM2Yjm+15mCZ1F0lmD+SwvEURHghZDuMI05dgF1KZUp7s/+0vOo8e7c9/PSiIwhPBQ1RWmEadAwHYT7N9c+pU+IjAx2oBtk/CE+MeIdNRuwslqJqcSeo9I42gN82Bqrb3LqdXn5CuWD8uR0yZv/M9fsPssQ1AEvAUPr1SDe5G0w58KD/iuIAJWX0+vlypU7RmYB+ICrGBAJ3sMEbYSEueMg8rplMQLW69movZ3dgWeypmQWO7+9ljOrW/n/hWzDGV0tE2WfM/gbVSff4nWUz4Te9Xj+J8lRRt0MQAmQUqquIxiuBEjzHk5NW3ILWMxmGwJK34MpDbn7fIXzA0J8OILsdyFt+Xsd4ehe6UbFl6IIVhE6h16IgVK8zAjQkh9t7ZpAhiJG3KbkvyyGUdzu2C4p8Evp+OPGbyJEdSQJrpdccY5VqXsrBTPfsy1D3070r BWQjUeHR k9csnzDB39/H3WmrhgIJT+42jbWfvjN92k8YHi9qKy+a6Z267vuIVgLqEmTh+Khf9jo2/9XYq/b7+nnYt7WgYh3fg9hP9KH8uGmJa2j7PDEGH5VNxhF8JCRql9wVJq7AIbOWKJ7IZBrqq9mHuZpA8kq4+cngqEYpap2JiOSqcn9GDTrss4LGByzkIP4yjlR/H5RnCSNoMQs90FmUdKd2yE3PRiZQ0+S2ya+HmB89O0B1T2SYTd8wUN9ZQgtmklAEFEpoJ7C1ursti1+S6q/UCQ2xys9eY4dhAfFPXsTNSEF9GtuYiLhJmi8MCRf7NizA3o77XZixli6vO9TrwGLurn6w1o+lphIEpFO3tOVbzDNQQvG93xhVB2Rju19sI3XKZviRUYTCvKOjldf1HeyQLpjSSqlVM3ICIqBCE+VqHboEeTX3M2HFfb/3bS4D9pQkEQtmPZSvQJf1G9axDZkviXtVXmw== 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: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the vmw-balloon shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct vmballoon. And we can simply exit vmballoon_init() when registering the shrinker fails. So the shrinker_registered indication is redundant, just remove it. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/misc/vmw_balloon.c | 38 ++++++++++++-------------------------- 1 file changed, 12 insertions(+), 26 deletions(-) diff --git a/drivers/misc/vmw_balloon.c b/drivers/misc/vmw_balloon.c index 9ce9b9e0e9b6..d216d4dc042e 100644 --- a/drivers/misc/vmw_balloon.c +++ b/drivers/misc/vmw_balloon.c @@ -380,16 +380,7 @@ struct vmballoon { /** * @shrinker: shrinker interface that is used to avoid over-inflation. */ - struct shrinker shrinker; - - /** - * @shrinker_registered: whether the shrinker was registered. - * - * The shrinker interface does not handle gracefully the removal of - * shrinker that was not registered before. This indication allows to - * simplify the unregistration process. - */ - bool shrinker_registered; + struct shrinker *shrinker; }; static struct vmballoon balloon; @@ -1568,29 +1559,27 @@ static unsigned long vmballoon_shrinker_count(struct shrinker *shrinker, static void vmballoon_unregister_shrinker(struct vmballoon *b) { - if (b->shrinker_registered) - unregister_shrinker(&b->shrinker); - b->shrinker_registered = false; + shrinker_unregister(b->shrinker); } static int vmballoon_register_shrinker(struct vmballoon *b) { - int r; - /* Do nothing if the shrinker is not enabled */ if (!vmwballoon_shrinker_enable) return 0; - b->shrinker.scan_objects = vmballoon_shrinker_scan; - b->shrinker.count_objects = vmballoon_shrinker_count; - b->shrinker.seeks = DEFAULT_SEEKS; + b->shrinker = shrinker_alloc(0, "vmw-balloon"); + if (!b->shrinker) + return -ENOMEM; - r = register_shrinker(&b->shrinker, "vmw-balloon"); + b->shrinker->scan_objects = vmballoon_shrinker_scan; + b->shrinker->count_objects = vmballoon_shrinker_count; + b->shrinker->seeks = DEFAULT_SEEKS; + b->shrinker->private_data = b; - if (r == 0) - b->shrinker_registered = true; + shrinker_register(b->shrinker); - return r; + return 0; } /* @@ -1883,7 +1872,7 @@ static int __init vmballoon_init(void) error = vmballoon_register_shrinker(&balloon); if (error) - goto fail; + return error; /* * Initialization of compaction must be done after the call to @@ -1905,9 +1894,6 @@ static int __init vmballoon_init(void) vmballoon_debugfs_init(&balloon); return 0; -fail: - vmballoon_unregister_shrinker(&balloon); - return error; } /* From patchwork Mon Jul 24 09:43:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323765 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 1C5DDC001E0 for ; Mon, 24 Jul 2023 09:51:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B1F20280002; Mon, 24 Jul 2023 05:51:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AA7AA6B0080; Mon, 24 Jul 2023 05:51:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 921F2280002; Mon, 24 Jul 2023 05:51:09 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 7F7E06B007E for ; Mon, 24 Jul 2023 05:51:09 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 5E2CF1209DF for ; Mon, 24 Jul 2023 09:51:09 +0000 (UTC) X-FDA: 81046037058.30.77846DC Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) by imf29.hostedemail.com (Postfix) with ESMTP id 85B2D12000C for ; Mon, 24 Jul 2023 09:51:07 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=iUPcJgUM; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf29.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.179 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192267; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=oVZBD26n61nILm1319d0FZlD/fP50Fwp7YtrZB2yUEw=; b=NI4to1UlyMyGVEFYNE13471WeM6cvKDAcUqaPA97Z221lGJm7hq61htHrH1/zGE3hp0ILB SK6y37jrjyFeKqPAzNSIZE/sdxNFXK5fZZwWzfsds+ubWJAXIX7KIZly0WwYQnmMmuehtT gFTZnUMsuHzxCmrqvEx2Ai6nPcuCAXo= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=iUPcJgUM; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf29.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.179 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192267; a=rsa-sha256; cv=none; b=ZFNas7ON4Ovoq6tUGdKVRQgS8zF0GxB4DkMUa1QXpc/LTVFIgEQNuKBy7HsM8TvdnlHTBX L2WrP6gTGZHXO//hO60YRrjnG/NRB70LiX6MPv/TQx+h7a0kItQgXREnRf24ZUB+yy4JEL 1qdhI0LHd/kfe4vF9XfWaZrfy17y4Ng= Received: by mail-pg1-f179.google.com with SMTP id 41be03b00d2f7-51f64817809so328153a12.1 for ; Mon, 24 Jul 2023 02:51:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192266; x=1690797066; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=oVZBD26n61nILm1319d0FZlD/fP50Fwp7YtrZB2yUEw=; b=iUPcJgUMyrTLwgrjrlC+a27y9vEWwy56+puOu64xedJv2ncHtSqDNqiSeynerud5CA SLWVqH1nGCnKkpkX8dkzmoG0eMRym5h6Xzfw/4y3ynxDe9x5fP4GtDEbYlXCEU4KGmnh J8JMlwHQENpmCB/IBQ5Kj/D3RaklR5mhQ3KWpjAIq5ncgA2kgZ+m8lyKEtRUg3xIXkRf 1Y+VworbTR0lkfVEfm55Dde1LFRd3k61KtabNyesWRzHMD8tamW6ciBekSSPn4dMEieQ RK4Z2ABaXDMl+MwOvSJ5/Kn72pZwCqkmqC5YhlHMVnLFWPN8jgdPeYJAkwxf5yUyP5GW rA2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192266; x=1690797066; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oVZBD26n61nILm1319d0FZlD/fP50Fwp7YtrZB2yUEw=; b=Lm/dGsHQrpAPr8RGjBdPsTD5CE04Rwx/wWfdFRih7eBSaOmxxvi2MzH1RO/v+9fi26 wCFIyuB8vhd6GRtzH3sLRJ+iqCH8wnCc/FQcn6Y5n8JTWTbRTdpFjrLE6gdcJ+C9R04m 6UNQSTA7RHO4DBHtCQxU0X5OChFSqUT6oPfOxD2QVGG/XShQ20ItLVZVGagWKxP0g3mc eTP9FEP1dfrubFwXERIBYmSWR+yZ5EU8SYCtgOBe5rx1Y/0xZIYnAzWA3YAaptuKRC9q AmBkeuLMGsNVUn577OpzVIinCayHPc2p6z5g7UmjDNYNE6CIqHm82NkNAd2u/o86wNSb sxJg== X-Gm-Message-State: ABy/qLYELImdn0ZTH+DpZWjA2cHMPfsEXpjW9ifWwunepJBx4aXKBoqJ NnIUzaaHHF/R/Q5ZwlBVsSftEQ== X-Google-Smtp-Source: APBJJlFQ+sAFI6LIZ7PgU9puTnlNzbjLYXvmJ0kfMmGkS9XBnuUvcLZ7El1l1GYgUvVEvdh+XgkfrQ== X-Received: by 2002:a17:902:e74d:b0:1bb:ac37:384b with SMTP id p13-20020a170902e74d00b001bbac37384bmr1242952plf.6.1690192266338; Mon, 24 Jul 2023 02:51:06 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.50.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:51:06 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 30/47] virtio_balloon: dynamically allocate the virtio-balloon shrinker Date: Mon, 24 Jul 2023 17:43:37 +0800 Message-Id: <20230724094354.90817-31-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: xpgccuj3idrsf7zofm68b7s7ehhbmqn5 X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 85B2D12000C X-HE-Tag: 1690192267-619816 X-HE-Meta: U2FsdGVkX19KXM6/cx/yJ7cK8fTlyvW7d8yFccuz1UOCGIPk9yLtUAiEtLFaUlvl770V4UFsjZ/8uLJ2c5fR1CZaRxDYJubirs2MirGMl/kp3tR1xOic1PNEfrAVm0WK7odKgHzunf2uR//myOypsp2F8Fq3wqmKFaK9+blzFdbsGQg9XK/LmdBWaqvNxlrtK/08nW6klydMn5TnvB26WD+C0J+5VtKaOc0Zt1j2FbcdTeY9D0yyrUvj5gSkFbwTwDg/uh9TqijYyeVJPC3QmI9b9DefXcRhzFU3TofI37Kewvmo2p/qNH2IesuQlwPrKNB+NzDAOVkdhrpKGxxPTPYIBST53tkiWiLJ6tZEvqcBizbpt22Q7yl6DVjjWbEFqYD+Lezoytbb0vyfecHvMsMd2POteccvasKxwhnxxrck7FZe6Vix8eMrbVcbN9lRuujZGGQiHglEq4K9n6GtP+4Sv7gSuHJUXONU55Aox3cgEbEMM8gVHJ21iEkV5Fcow7TgZLEbdnb0cjknC33yZgyXNyh/OvRn/IcLQkSgm6MhUDUNJEXfCWp4e44+O4ZS1PPAuB7auyWwZXq7nSa7tAYKY88tKdsVW7UOoAifx1nCqHvIGKJxP4jidpugZEiHDIG7t0u+/35YkjrK45adktVgAByuG3i6MO8hCKy6Tz9NhTk4DtulJuZ8ggnW26E3maf3dkHpFkOv357+c4JXFCcYyJIv/8PJz/tGGUx0O4qFHWjV8GuZKJBXzS1iSe1rpCJTHNc50E89CCDkJFvgwcCAbbt4SEgIdrpSVC4rVnRC3f4vFQSaXRuxdkF4aO0nx+HzrPQluiqLMZ3Hx0XD1NhaLNX4OPCvglcoQzzqFvXujpbPW2rAGui3GztoGXruPAVrVbRq01TvcVyBVf0BX4362C/oAGlS3KdvW5YekjKHePkk7xSntYjf8TppAV6i6azqvPfRTYwZmZYniF3 iYf5KYql LMWGhpP01Ndi1RGeRYkJlVVF3p8n0zQ8HQfCXXPOdHivPCDaclXrqjR2aRKIUNuDAaii/TGjLmdHvBis1BXwxTLJGAJbJRNMfnEgkPqUkWFJRpUm3agyzR/L/jjKS8VUWo0gFeOR8pfuifEkVkDHTcEX7FaRZlxkxHd6KU5zJqLW5otWUXI0DqCrqD+wuojKT000KUzWS4RgkRPTq/tHGygU11E+X3TeB9agl6CdpIiwD17ttrOD61l6xsfYjn393benakAjTCu00liX52X7QpRK6LOr4xB8DLLLPf3fDn2/+ZnF7wbdex5GJ66lUfjNY3U5Ppj9Fg0vtHzK0Tt73MhUbatQXtDCt68WMOcjSVnTspz/lHsKvttHkh1FnIkyC8UpkmNSDIAoBDfP4VXeejAkvFjNle9Wkgs5fLjZrn/PEXgkrAYyxZKTjYHlInBd4QWtVaZ0PG9SvroZbqDwrgVLTUQ== 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: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the virtio-balloon shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct virtio_balloon. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/virtio/virtio_balloon.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c index 5b15936a5214..d773860c3b18 100644 --- a/drivers/virtio/virtio_balloon.c +++ b/drivers/virtio/virtio_balloon.c @@ -111,7 +111,7 @@ struct virtio_balloon { struct virtio_balloon_stat stats[VIRTIO_BALLOON_S_NR]; /* Shrinker to return free pages - VIRTIO_BALLOON_F_FREE_PAGE_HINT */ - struct shrinker shrinker; + struct shrinker *shrinker; /* OOM notifier to deflate on OOM - VIRTIO_BALLOON_F_DEFLATE_ON_OOM */ struct notifier_block oom_nb; @@ -816,8 +816,7 @@ static unsigned long shrink_free_pages(struct virtio_balloon *vb, static unsigned long virtio_balloon_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) { - struct virtio_balloon *vb = container_of(shrinker, - struct virtio_balloon, shrinker); + struct virtio_balloon *vb = shrinker->private_data; return shrink_free_pages(vb, sc->nr_to_scan); } @@ -825,8 +824,7 @@ static unsigned long virtio_balloon_shrinker_scan(struct shrinker *shrinker, static unsigned long virtio_balloon_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) { - struct virtio_balloon *vb = container_of(shrinker, - struct virtio_balloon, shrinker); + struct virtio_balloon *vb = shrinker->private_data; return vb->num_free_page_blocks * VIRTIO_BALLOON_HINT_BLOCK_PAGES; } @@ -847,16 +845,23 @@ static int virtio_balloon_oom_notify(struct notifier_block *nb, static void virtio_balloon_unregister_shrinker(struct virtio_balloon *vb) { - unregister_shrinker(&vb->shrinker); + shrinker_unregister(vb->shrinker); } static int virtio_balloon_register_shrinker(struct virtio_balloon *vb) { - vb->shrinker.scan_objects = virtio_balloon_shrinker_scan; - vb->shrinker.count_objects = virtio_balloon_shrinker_count; - vb->shrinker.seeks = DEFAULT_SEEKS; + vb->shrinker = shrinker_alloc(0, "virtio-balloon"); + if (!vb->shrinker) + return -ENOMEM; - return register_shrinker(&vb->shrinker, "virtio-balloon"); + vb->shrinker->scan_objects = virtio_balloon_shrinker_scan; + vb->shrinker->count_objects = virtio_balloon_shrinker_count; + vb->shrinker->seeks = DEFAULT_SEEKS; + vb->shrinker->private_data = vb; + + shrinker_register(vb->shrinker); + + return 0; } static int virtballoon_probe(struct virtio_device *vdev) From patchwork Mon Jul 24 09:43:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323766 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 C3FEBC001E0 for ; Mon, 24 Jul 2023 09:51:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 68B8E280003; Mon, 24 Jul 2023 05:51:21 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 63ADB6B0081; Mon, 24 Jul 2023 05:51:21 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4BFD8280003; Mon, 24 Jul 2023 05:51:21 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 386B06B0080 for ; Mon, 24 Jul 2023 05:51:21 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 0D183B1FFD for ; Mon, 24 Jul 2023 09:51:21 +0000 (UTC) X-FDA: 81046037562.28.415BCBD Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) by imf02.hostedemail.com (Postfix) with ESMTP id 3F57480018 for ; Mon, 24 Jul 2023 09:51:19 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=fRZXTeDP; spf=pass (imf02.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.210.178 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192279; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=xAp7xgO7HdkgEPthzXwizc0Cva5ED0l1RHYipwvkRG8=; b=kyr3jIY+z14QVrw92ljYM4YfcbJo+9tsJa2pH4jMDKAChPwOvaxXe9ZsiNpWE/2Oda9l+X raVV6/S+1EgTI94aHdMLA9rQhcje03k7prfR0SojE2JnXpGGt0J2VuQ4/iEigecBV+Utps FbGx/WSSs0HcWCW5c71P31QNPwZq4eQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192279; a=rsa-sha256; cv=none; b=gXiQfQXxrnjiO0zxLXwKQ/9n2AHkNk3CNrx/1EJQMl+neRD5Guwbj+3Y77FXS2iKiWoK48 Jz6jWMHfsxVhzYjTOaejHOx9Gf+EA1G02EbjA0EWc2Lkza36EoMijAHlA+EKsTGhaSlERX gC3HrlNoM8aBwwgfF5ljSN1loxWmVmA= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=fRZXTeDP; spf=pass (imf02.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.210.178 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pf1-f178.google.com with SMTP id d2e1a72fcca58-6864c144897so1023304b3a.1 for ; Mon, 24 Jul 2023 02:51:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192278; x=1690797078; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=xAp7xgO7HdkgEPthzXwizc0Cva5ED0l1RHYipwvkRG8=; b=fRZXTeDPI05cJ99onG6DHJxkfUMlRPnq7Rn/QLZ0is9nue6C7hI7NNrzzE1XiOtAsL jxaHqrHBeq2Kf9jVwHj0j/XI9pIc497j4STLT+aC4pqDVI/sTYYX/yRdxwUotEPFTVId GY6yzphCUZ5+EFCVJ7JaghU1AWJbzYCjuDnxJCswtZl+SwAhy4mi16E/MR1hRCsGjB+T cO99YDds8K867Aux+2jYQKZaNAhIQlxOtUrunaQPHSUBJtgcDiwvPSTxsjcEQk1O8lD+ xr5m1LPO8Me4hvXm4e3bCHxSQGeRnDCDrCn2S6Pyj7qX4IByYBH740sUkYoEJ/i3i/6k qY8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192278; x=1690797078; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xAp7xgO7HdkgEPthzXwizc0Cva5ED0l1RHYipwvkRG8=; b=fEIcUdVdTnqgslw8crIstjtQi2arE6GrTliJ8+PCwG3QQLTq+/Ns0YDdQB30OmgjOg QX0aS2ridhmsQG+oCzCN/v+bYJStrQJ93h/UohentqEu+rpLM0xadRj3v+Zfh4LOGNtg 3TTQq4ue6AtDtsmffEJd86DT4LCWHWEMIvG/OAGjgZvp8oXZSzIWLj7tHvOoRGFarI4q 5VP2VvIm37xACrOtDM7NpfOqo9gcvrbnCxZ3xB3XoHJWrPEO/j9aj+TnHxYdZe5rgqlZ eo5vQBxuOxoNrXn35nt7N7V7b1P8/C3+5radvNv+55M+OaOREEkPsCaeiCi7u2nLx2Rj 2TNg== X-Gm-Message-State: ABy/qLZEPiHqRES68f1WbUNIXa534xX3YdykBLSoZaTb/5pOxqfiDAwQ T/wlEGK6Vg0lx9NGw0G3cu69VA== X-Google-Smtp-Source: APBJJlHQq2D/WuDC+k4NqN86HhNTJ9MoR7Y5JtfL6V1jvtKqTGYGB1+jpVAvGxo9g3eH8SGsNzYhlw== X-Received: by 2002:a17:902:f681:b0:1b8:a469:53d8 with SMTP id l1-20020a170902f68100b001b8a46953d8mr12728311plg.0.1690192278196; Mon, 24 Jul 2023 02:51:18 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.51.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:51:17 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 31/47] mbcache: dynamically allocate the mbcache shrinker Date: Mon, 24 Jul 2023 17:43:38 +0800 Message-Id: <20230724094354.90817-32-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 3F57480018 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: tzrd895pdrq5ca36wb3g3yshk1n4zqaq X-HE-Tag: 1690192279-610775 X-HE-Meta: U2FsdGVkX18Ucy1SAh/IhaHm8aQv5fFZRP7bDABWLj7fKtIbTbF53CTMLewfusNqlzX6hS7KOyZGCNlqZPcFTWL2JiDlrKjU/zX4SRvC5yIutx5LEFgOztZUbi+xg8ICylqAFxmwutYlLcHIK929B1yOdwh70j8F1Mn5ZYX5sOZ+7lXbxm4AumX7YyZM04ALQQ3xlgIp2ACA6CgEb43tlGAmZZgxb5HFcF14rcNRyyH1ti4wk25dD1lUIe/LIUbLCw0rDsuAv6Z/RF1/tigFHgcFLNyH39zxNOmY81L6+mKBWuqKApclCnx4qAmbBUPScPI1VHE9UIloR5/F+2t+vg1nwuSj3rPGQ+g3GBoUOTRNL/H7k2zNQq/YpjqaDdVrcRxGFqJgxPkFjjYACAoFEm7AWBNBpYz4B8ptA4wtGul5+uz9PcNTzhL6MJtKWzred+XlFnYIsHLPfkS511yLd5oSGgVfTJ6vWGhZLOIuaV6kWfh8x+wWGxDrk/HLzlsQQ8rcZ+hN07oJfiYjpHbzdxl1rZjBnJM3w7guyZ41GS1EM80aVL8iQiiqTaA7PzC1vEDmuf4iS7yHMF3AAb6a3mh3leOSkWg6JsCKQk63+/8YS7fq0DQ7+SiqkbIUlUiHfrG4UfiYnL/thjUWGIYfGdJnHMTMBexkbajZOwfzbleS5NFG2GksJeeMYIC8Sz9YJlHtVDaezE8a9qvKYvkx99ozLv+4zlCDWBPggO6djxP81s9v6CENDROPeA4+f54qFB3uex9NR9QVBgvE4OYYR+tQ63KLo9HndfjbO7m6bu9aLhH70aH734s2aKB0ByLeWo8VBB4u1YZzfcMo1V3jV9Y5CXsAJrKKH8RxwFXziuYwX0TGow16BhCovJuF14z6ttAXYa3R3Z2C46pk9cxBC7d5cb2LMfi+iKKhGGk7bhGGTYmF3fK/MtRitRBeuVvGD77Dy9FuC56nhCSXPkd 7Ump+z9A 8f24uty8y/3jD2SyeeDmubQIQ1vUtvoNFM4bHeBuB/j50xWnF24Y7U3BIXEDziFhhlh/6HXqVUgJtPIU1tzvt108rujPN4wf/pMlgfNqq6CY+ycqzDcNAV+ShPg6/8nW+MnHIuQhMowoxEqu/5RsvaRN7lXFU6CS4lEEc+QGPzcwHHcDyCULD78mf7iwY1PXgK7SCMIyiROdzl7bPWplTO5MEptYdZ1RKp4DvZKA81h31F02TUonknZRaE4+U0KQs6DFp/0oUBf5/SbJbiSqwdACE4tb7TicQHtefrwDsOGOSlBFlbggHbZ7ICI0WjMRc42pz7eJsoY/l4aFz9rkkiD9vA02G3ggHbpCGAd7DhD08B1AULZ2FXk844Wq5/KK5LSoYMD3/4L2V7/itN7nfFF5YGUk97JJcmdF9 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: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the mbcache shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct mb_cache. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/mbcache.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/fs/mbcache.c b/fs/mbcache.c index 2a4b8b549e93..bfecebeec828 100644 --- a/fs/mbcache.c +++ b/fs/mbcache.c @@ -37,7 +37,7 @@ struct mb_cache { struct list_head c_list; /* Number of entries in cache */ unsigned long c_entry_count; - struct shrinker c_shrink; + struct shrinker *c_shrink; /* Work for shrinking when the cache has too many entries */ struct work_struct c_shrink_work; }; @@ -293,8 +293,7 @@ EXPORT_SYMBOL(mb_cache_entry_touch); static unsigned long mb_cache_count(struct shrinker *shrink, struct shrink_control *sc) { - struct mb_cache *cache = container_of(shrink, struct mb_cache, - c_shrink); + struct mb_cache *cache = shrink->private_data; return cache->c_entry_count; } @@ -333,8 +332,7 @@ static unsigned long mb_cache_shrink(struct mb_cache *cache, static unsigned long mb_cache_scan(struct shrinker *shrink, struct shrink_control *sc) { - struct mb_cache *cache = container_of(shrink, struct mb_cache, - c_shrink); + struct mb_cache *cache = shrink->private_data; return mb_cache_shrink(cache, sc->nr_to_scan); } @@ -377,15 +375,20 @@ struct mb_cache *mb_cache_create(int bucket_bits) for (i = 0; i < bucket_count; i++) INIT_HLIST_BL_HEAD(&cache->c_hash[i]); - cache->c_shrink.count_objects = mb_cache_count; - cache->c_shrink.scan_objects = mb_cache_scan; - cache->c_shrink.seeks = DEFAULT_SEEKS; - if (register_shrinker(&cache->c_shrink, "mbcache-shrinker")) { + cache->c_shrink = shrinker_alloc(0, "mbcache-shrinker"); + if (!cache->c_shrink) { kfree(cache->c_hash); kfree(cache); goto err_out; } + cache->c_shrink->count_objects = mb_cache_count; + cache->c_shrink->scan_objects = mb_cache_scan; + cache->c_shrink->seeks = DEFAULT_SEEKS; + cache->c_shrink->private_data = cache; + + shrinker_register(cache->c_shrink); + INIT_WORK(&cache->c_shrink_work, mb_cache_shrink_worker); return cache; @@ -406,7 +409,7 @@ void mb_cache_destroy(struct mb_cache *cache) { struct mb_cache_entry *entry, *next; - unregister_shrinker(&cache->c_shrink); + shrinker_unregister(cache->c_shrink); /* * We don't bother with any locking. Cache must not be used at this From patchwork Mon Jul 24 09:43:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323767 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 B040AC0015E for ; Mon, 24 Jul 2023 09:51:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3A4C16B0080; Mon, 24 Jul 2023 05:51:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3558C900003; Mon, 24 Jul 2023 05:51:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1F547900002; Mon, 24 Jul 2023 05:51:33 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 0FBAC6B0080 for ; Mon, 24 Jul 2023 05:51:33 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id DD0061C98C9 for ; Mon, 24 Jul 2023 09:51:32 +0000 (UTC) X-FDA: 81046038024.22.14912E7 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) by imf26.hostedemail.com (Postfix) with ESMTP id 0B4C9140007 for ; Mon, 24 Jul 2023 09:51:30 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=hOD9KvuI; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf26.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192291; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=oXR+qbQ7FZSOf8H8/XKWyl6GGcPr2+dTjVkbZb7uW4E=; b=dI5JF2z1DIrE73LUfH1wQEuSiYhJcMC694pc/hlT4Oz6BO/OIul/DNCr3BOcImRsVC6SyT /C7kZSyTlg9Qgs08+C65wuy7H6M7imOO4vwcNYRzrHmBLWq9x3nICpckQ10YswVb626nFB 9jpigv30snZk5xlqi8U1gZZtXPSycws= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=hOD9KvuI; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf26.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192291; a=rsa-sha256; cv=none; b=sIFzCXVDXY00OPeucLDFvgbMkL0dFr7wXs9srmfalrVlA1K+wje7NHMJHbXIQ6Ul7VSNEz /CzxsdZYiRkEikQ86qX+kkFH8zRciCwmxmoVNlcqp++eYrbGlkLN3NnbNun34e4WoLavgn zFEn9+B8n7ptgcCzTXotIXQsykvJppM= Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-1b867f9198dso8902065ad.0 for ; Mon, 24 Jul 2023 02:51:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192290; x=1690797090; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=oXR+qbQ7FZSOf8H8/XKWyl6GGcPr2+dTjVkbZb7uW4E=; b=hOD9KvuIa/sVR/XUeit3UEUy4lAv7qisrKP+dY73zqCVNh5USDs3UmvxT9Mu0HPAd/ sQoZTlZIhyjE9hP5yaJCN279yVD9q+u+zszBd3e/RRrSWK4lH9Sj6N23h1hoy3tnMHt9 Prw78GIFByR0J3YK+swLHgojCOBGOspVkhguuywNaBo2olaDrD94vFbNjxafvVNqL5jj kb7wPt4FuUX1Yqc+w6X3ILlcOhkKLx335rMW5M/f76lMo6KZSankQneuXGq4M4YDo1Pw 4QB0FQMF4kEeIJcpti49nOtrs1POFPvCGoLSeyUrx9gHxzPZXlLq/CHz3lcRP0C+66Sl YJZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192290; x=1690797090; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oXR+qbQ7FZSOf8H8/XKWyl6GGcPr2+dTjVkbZb7uW4E=; b=L2FlTTb+j8PBqiBhWysHC0o6NZav5OfKBYYIqjwwFgWFczjCiYxJA8a7fmzHJ8Ptdu 3oUL209AFS67g8TnQdAtt3XD0jou6NFSwCQHIrIbr5xYq9jKNgkeFn1eYp+E6ASwIxCo X7vJwvSt5/jVF7pkqIgEnYG2tnEpqPOMmyN9CAkdohOgL7F51+Wt1qDao0NGpx9hzjnH 22DsJq3t8H83gwv4Lsfb2ZhN9Gqk6xlGJVOMbDCa4ouMzkUwUL2RjRgbQ/5NmEt2DPuD +L6Z4MDJDBdCfKHD2XWyctSixspggbPn+Xs54vDCEnCNgcYl0V/JkWK0dIMPJ4uVjKLi DM9A== X-Gm-Message-State: ABy/qLaFBJh+yIRKFTAoEW5MBhCapfEAihVk8Q+KDiJJk8wipNn4KHSq RtEAVMq7jl/iJZefrI+lCZ98yA== X-Google-Smtp-Source: APBJJlFC05XpXuobjW4LsGQFjmg3Q9TZDeGvX5MkKK/m+2sDEjZkN7MidhVsDpGMtrBJxCeRn4k3XA== X-Received: by 2002:a17:903:22ce:b0:1b8:2ba0:c9a8 with SMTP id y14-20020a17090322ce00b001b82ba0c9a8mr12484346plg.2.1690192289977; Mon, 24 Jul 2023 02:51:29 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.51.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:51:29 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 32/47] ext4: dynamically allocate the ext4-es shrinker Date: Mon, 24 Jul 2023 17:43:39 +0800 Message-Id: <20230724094354.90817-33-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: 74s7zhjjj4qkcszufq1m9hbmantf5cpq X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 0B4C9140007 X-HE-Tag: 1690192290-408213 X-HE-Meta: U2FsdGVkX1+NXY5sF/Qr5m+MpD56og1L69hRCwffpp8yimNMmGODVsvYZJ4Igsb4GGQjBkMDSyH5JM50R+LlB3qxi664SzVBlryolpWzqKh6JJiaQWYUBPzdm1dpzW5nM4lGF3/twdE0WMQI9543G6Tq8+Gy25/DaHJDOCTO3VGOegHoruLhsSkfoLxJJA3N1xLIx9JZmUsvoifBWr6P9Siw23s2/FEZFi55yygYQUvsxNv+bWBRBwm88XMqr1UlyuavfoyejU5c+i7wJkFA7LfaZNPebIF+he7esbjBtL+jC2NDzbM8LC4msOoqj933XLu9f5YkfmrhIN0+JmKyA9IrFHt7u8S0bluNrUgCfim9XW8ZKrCFI0lc5HvQtRt8ILlebv5l4EFePObiKQaYD9CpT7X+HMg2ZvXC0CKpBfHtlgjaunIZz2CReWHotMMHRY/sO584qXsdgPqBWiOyGiKcRT1U/gk1D+VO0EWgMVh8+LHLDtV4z0d+rMNcsZaxvecxZCB98Dv8bcgrUWaa5h+IVfZ0EeaX79YxQPbwaXVjYsnBVSeZd7TOCRH0AaS1d11N+9+K39C0lskp/tcZ4U22vNA7vPNUYvaDOxdSAIPNu/yLFTQZ72QGQDdqTaaCGWI3Plkr/9ySUs9Q3G5lbW5l00luvMU5W42V26gvSORsgaaqaHn6BweCdaHhUMvlqo5RH0BzLluu4ec6g4IO+Up6UNcH+QFovCMhQrg4D8JdQHNKP3RKF/JGbYfSOrWUEED0Wpdc7kJzixniTqjada/k5yfPVGkiRnEAlRCGxjqi/QspIskzAyCcKt7IePOCigaqLFsdbzVIVMS8i0KyGqFHMCpPnDwUSNH6YklkiAyPqKVMhFrVyVRJx+BW/Jluwb7NgCrpkCgavcvSVPcvSZNmqtbmQqj2ScCLXPEm4iqlRSYDlXgaivEbbslSgFUWlo/dCtEbvMyyjHTOYwr 5ZWyVE6X 2RdnGrZMhCL/8Pj7ZsvpHX51zqGAuDg0isWzgvlEQKsSF0Qf5yBhsmN6v4uYu3ZSEG96CUZrGBFuUpQfsJ0tXiQdG2G5WEziQMdglvE/7ovczTQD3d+uz1Eg/Y4OUnb2Ul4RKiCztWHiGAg+KHKCGjgtCVX+cF8wsefsjDbNLNhLfsFlAKtCFK5Q2tfvPYzCN7jwi6N4lzJeHsEpgqRgpY+vco3JKFDHbI/iE/++eNwc4ySB08QKuCq6SZ7a3aF+DMgepwr8Zz/RgONS8ALbKMCryF5MGW++3Ciw1c0rK5DPngvL4cLKUMKAoVb92w64GRyiwIDvFUcZrdML9xB9UPp83xYq5kIWhV16ATkZnV+54xx7XrUgwNRIPCtOWN9HP7ngMoK5Er0Be+j4BFgox+3h2P/bIuK05JFSH 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: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the ext4-es shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct ext4_sb_info. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/ext4/ext4.h | 2 +- fs/ext4/extents_status.c | 22 ++++++++++++---------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 0a2d55faa095..1bd150d454f5 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -1651,7 +1651,7 @@ struct ext4_sb_info { __u32 s_csum_seed; /* Reclaim extents from extent status tree */ - struct shrinker s_es_shrinker; + struct shrinker *s_es_shrinker; struct list_head s_es_list; /* List of inodes with reclaimable extents */ long s_es_nr_inode; struct ext4_es_stats s_es_stats; diff --git a/fs/ext4/extents_status.c b/fs/ext4/extents_status.c index 9b5b8951afb4..8d4a959dd32f 100644 --- a/fs/ext4/extents_status.c +++ b/fs/ext4/extents_status.c @@ -1596,7 +1596,7 @@ static unsigned long ext4_es_count(struct shrinker *shrink, unsigned long nr; struct ext4_sb_info *sbi; - sbi = container_of(shrink, struct ext4_sb_info, s_es_shrinker); + sbi = shrink->private_data; nr = percpu_counter_read_positive(&sbi->s_es_stats.es_stats_shk_cnt); trace_ext4_es_shrink_count(sbi->s_sb, sc->nr_to_scan, nr); return nr; @@ -1605,8 +1605,7 @@ static unsigned long ext4_es_count(struct shrinker *shrink, static unsigned long ext4_es_scan(struct shrinker *shrink, struct shrink_control *sc) { - struct ext4_sb_info *sbi = container_of(shrink, - struct ext4_sb_info, s_es_shrinker); + struct ext4_sb_info *sbi = shrink->private_data; int nr_to_scan = sc->nr_to_scan; int ret, nr_shrunk; @@ -1690,14 +1689,17 @@ int ext4_es_register_shrinker(struct ext4_sb_info *sbi) if (err) goto err3; - sbi->s_es_shrinker.scan_objects = ext4_es_scan; - sbi->s_es_shrinker.count_objects = ext4_es_count; - sbi->s_es_shrinker.seeks = DEFAULT_SEEKS; - err = register_shrinker(&sbi->s_es_shrinker, "ext4-es:%s", - sbi->s_sb->s_id); - if (err) + sbi->s_es_shrinker = shrinker_alloc(0, "ext4-es:%s", sbi->s_sb->s_id); + if (!sbi->s_es_shrinker) goto err4; + sbi->s_es_shrinker->scan_objects = ext4_es_scan; + sbi->s_es_shrinker->count_objects = ext4_es_count; + sbi->s_es_shrinker->seeks = DEFAULT_SEEKS; + sbi->s_es_shrinker->private_data = sbi; + + shrinker_register(sbi->s_es_shrinker); + return 0; err4: percpu_counter_destroy(&sbi->s_es_stats.es_stats_shk_cnt); @@ -1716,7 +1718,7 @@ void ext4_es_unregister_shrinker(struct ext4_sb_info *sbi) percpu_counter_destroy(&sbi->s_es_stats.es_stats_cache_misses); percpu_counter_destroy(&sbi->s_es_stats.es_stats_all_cnt); percpu_counter_destroy(&sbi->s_es_stats.es_stats_shk_cnt); - unregister_shrinker(&sbi->s_es_shrinker); + shrinker_unregister(sbi->s_es_shrinker); } /* From patchwork Mon Jul 24 09:43:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323768 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 75198C001DF for ; Mon, 24 Jul 2023 09:51:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 10D07900002; Mon, 24 Jul 2023 05:51:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 096516B0082; Mon, 24 Jul 2023 05:51:44 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E515C900002; Mon, 24 Jul 2023 05:51:44 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id D71006B0081 for ; Mon, 24 Jul 2023 05:51:44 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id B27FBB1FEB for ; Mon, 24 Jul 2023 09:51:44 +0000 (UTC) X-FDA: 81046038528.22.8879365 Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) by imf18.hostedemail.com (Postfix) with ESMTP id DE36C1C0019 for ; Mon, 24 Jul 2023 09:51:42 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=CEkBmtmF; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf18.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.210.174 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192302; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=GawUpWYlbps61zw2RmUByoW60pYFIoQHHGKJRm38EOk=; b=rxA+UM6noqdHNclX1tOw/R1+jHPjNNVa1uZuL8R0GUlt9jMQVnhOg+FvXrROSC8HC6Qh/6 Vv+zw6B4slMsyBklrOgZEuBeC+ecWPOxItjOsK+U8WqRSLKRa0IRl7EqcYU6hDxqn5oWUW Jv9sgWGAOkKcGr9PifcNhaVh4Vusbnc= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=CEkBmtmF; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf18.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.210.174 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192302; a=rsa-sha256; cv=none; b=0vXO31VkUwcLV0vhtOBlfiXiJKEMs4UPoezFUZD9+heIcEtTfsAskbB98kHnuJim+b6X7a +QWYR6C7im7n4eorgUwILQrNNT+Xn4mHDdc7oNymattwmA8y+z6ctCfs49SRaHJ5ABsRii /iFqZggcB2R7TaHoUwV+HUiYWJ0jO7I= Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-6864c144897so1023358b3a.1 for ; Mon, 24 Jul 2023 02:51:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192302; x=1690797102; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=GawUpWYlbps61zw2RmUByoW60pYFIoQHHGKJRm38EOk=; b=CEkBmtmFVjCzOooXofhUvjxLqUZPvNrcHhpIqNSHKhlsDLi4d+oiaZMcszC7DTpfnA 0KCrn7qf+iMeDsU85frIwtRIJhPWTqjNE2GsFmUKb/AqXZ0cLaskVQ5sfrcUFwEyLRbQ YW+p3CB2iS2ZCJajkrzFZs2UYUV0m+MaHWdbJYgGTL2qMXc2h/u54iHPSNyVPneUBqzK Naf8yW1XF3OE4vVOOlqqaRwu13egTLMed+qZrwvG+Vv4BM3gaUW+md70rTXf2vm8C2IM auGDwQHGheimZXvmz6pG7OCBX8qrzq4/B64JbF2h2WpQYUSLrIvoMQuqshsPKoMXzH6R MZ2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192302; x=1690797102; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GawUpWYlbps61zw2RmUByoW60pYFIoQHHGKJRm38EOk=; b=Bz7LYZP5ongMDL5+fGP8iHuMQfSxB3pPZIZ4d9OP74BtO8kBGfLobjLfTpxlzWHQ0C mmjxMa7pqnOZgCIk473PaRIm38exNtevWoZVn9thTBLwJ6U5JWbMwBPTRGQ6Bvw9RuU4 1e1dBOyIjilebMUMEf6yAIQOTbKqdxZAcwIh5AYGri98f61qjDx7RZEHO8/0jNQaCt1+ m/n7palCMu3lKQgsMWegvZhD8rhZogjwFTPkqWAompAv9NHOz4MtU2G8cng2Vd6+FAYw cWA/MyXwyZXtayOukubCnPK0so3cN/VTa1nJPsyRoOZqGT82mWPGMqnlUe+XyEKd3Z8p Imfg== X-Gm-Message-State: ABy/qLZ0L6zw6SpWrpLVBqpXZDOU0h3K12EZuIHhVz1JAzIbQqxW1xjb VHiLjfGaGvJx8AP40R+Ku+qTrg== X-Google-Smtp-Source: APBJJlEU/vgKmw8Um+e668RIawiv+P3qp/KwZZ/g6Y9wgpINkkaMr3bzWEnObMTDhnOi0EmMOvkuLQ== X-Received: by 2002:a17:903:41cd:b0:1bb:9e6e:a9f3 with SMTP id u13-20020a17090341cd00b001bb9e6ea9f3mr4118075ple.4.1690192301770; Mon, 24 Jul 2023 02:51:41 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.51.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:51:41 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 33/47] jbd2,ext4: dynamically allocate the jbd2-journal shrinker Date: Mon, 24 Jul 2023 17:43:40 +0800 Message-Id: <20230724094354.90817-34-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: cr3cfmx4g8cxa8wykexzdgbeo9jpoa77 X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: DE36C1C0019 X-HE-Tag: 1690192302-45351 X-HE-Meta: U2FsdGVkX19EEvdtXmyHxQX0lo1pIxmKHC8IXSLyqx9Ti/z8OyJ6tGlwv7MvD5NldRl0XjbiL7m0Zu9GlnjUi6k/+ya2Hm5DU6jCm0Pfay7rRnqef/0MXUc8sdQnhMZVIXpX35G09u0Sx4lQtV1wt2a1uD1izp0v5xpPl5OdTPaxauZ3fu8q3LzJXRx6t2cGDQyCpi3jwB7mg8SC65/NbF/cZEpbbSkFynJjpAMxDJFsZaMnbSx+cd8QcHr+DARmljN4ebK0/w6p/6sjXY/jZvAD3dkSSmIh4ka7gQFDjWBy/uvTA+nQZxsuUNNKRw5dSlXbtBMJCkC1jYMHJM38SozAUXuEskUoQdUurVCA6XGk5VZK3tJJEd5WpWwHugaNCol0oU1j66rabZKPOADgJjrKaLxRTwhV5fsGY4WZ46oP2SQ4MhsachHpkCBrBYjSXLPJy+JidIecERQuXNt/8l3dBo26vT3VLj9Ut1/wfY5lgyD86mXFDOc8sUb1fVPNsG9NBNGWasBgjIBxKnf/V7dAPYVCvvTTQ9LpG4MXHo2qywZdEXNWNyaQyA3k6kKKyWoybTgq0Ckh+ytJ6KUYI/Zqx7TAjDzTlyNj5T3l0ZesIQ/dIID8WhbhBusJvHEE7yx9HlZR34bGoqUQGW/2KJvQXAF//jd3XF29MCcGX8p7ZCG/2o+cXhMtXy6LzA4oR4p8lT7FHtta3HucbvBBIZN3mNkEtCZF7veQWWLoVJDE8kvuudJx6QhW5ws1gqmmc4dhiPU7oQDafMErpTv8CrdJ3Ghp0ZUp9dVXpgkGglDajnLT4nMdqNBFltHaApLIiNxqwD/KTjK3ptEk13we21x9NB6sA5vLMDR5Me13jcgRHx4CTgCajFya8kthfAodHEnCh63EcviAWqUCnzmXEAQY1xJPbUDykpzwK4IhrY/TueSRs+baSoVBfbok/LcFj88z+sZmk0nE26vQC2X UNpAKtLp tTOJ3t0T2Y/ccYbdgVhspxAWubk/hgiNO9bAMzoZLYBk3XcSQujF8tpHBSv+Fx6fw/gcpkDuRkevEdUrCj8IkkXEU4KW+8gRRIUh+13ERQl10eB1p4QHLgtws+8iSxxLSBP7T91j8UPSAFI0D72MdBnfpxc9TmpEL1Vmu7UQp2dr0WLtVtK8FfPlHqy/Td22uVsIdRdJhoH2BPcWTK72r07CwRKD5vW2oyfOpsdUBM2xjMpq7GsLoM5+QB6n5ytWsAdVFkrVw9uEto9dj4T4aV2s0rMmDG678pHzWF3cYa51j59G+WAal/qVoC0EUaV+uLu7srR8Ck84AtZedcwnoePV1bACOXOD8dXKVBW/F+2Elx3CXjvC+etp8LNa34faQOqJaavH7vU0L0vYX4a7z+Qxs9lwH9FUvZ9ZC 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: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the jbd2-journal shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct journal_s. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/jbd2/journal.c | 27 +++++++++++++++++---------- include/linux/jbd2.h | 2 +- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c index fbce16fedaa4..a7d555ea06e3 100644 --- a/fs/jbd2/journal.c +++ b/fs/jbd2/journal.c @@ -1301,7 +1301,7 @@ static int jbd2_min_tag_size(void) static unsigned long jbd2_journal_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) { - journal_t *journal = container_of(shrink, journal_t, j_shrinker); + journal_t *journal = shrink->private_data; unsigned long nr_to_scan = sc->nr_to_scan; unsigned long nr_shrunk; unsigned long count; @@ -1327,7 +1327,7 @@ static unsigned long jbd2_journal_shrink_scan(struct shrinker *shrink, static unsigned long jbd2_journal_shrink_count(struct shrinker *shrink, struct shrink_control *sc) { - journal_t *journal = container_of(shrink, journal_t, j_shrinker); + journal_t *journal = shrink->private_data; unsigned long count; count = percpu_counter_read_positive(&journal->j_checkpoint_jh_count); @@ -1415,19 +1415,26 @@ static journal_t *journal_init_common(struct block_device *bdev, journal->j_superblock = (journal_superblock_t *)bh->b_data; journal->j_shrink_transaction = NULL; - journal->j_shrinker.scan_objects = jbd2_journal_shrink_scan; - journal->j_shrinker.count_objects = jbd2_journal_shrink_count; - journal->j_shrinker.seeks = DEFAULT_SEEKS; - journal->j_shrinker.batch = journal->j_max_transaction_buffers; if (percpu_counter_init(&journal->j_checkpoint_jh_count, 0, GFP_KERNEL)) goto err_cleanup; - if (register_shrinker(&journal->j_shrinker, "jbd2-journal:(%u:%u)", - MAJOR(bdev->bd_dev), MINOR(bdev->bd_dev))) { + journal->j_shrinker = shrinker_alloc(0, "jbd2-journal:(%u:%u)", + MAJOR(bdev->bd_dev), + MINOR(bdev->bd_dev)); + if (!journal->j_shrinker) { percpu_counter_destroy(&journal->j_checkpoint_jh_count); goto err_cleanup; } + + journal->j_shrinker->scan_objects = jbd2_journal_shrink_scan; + journal->j_shrinker->count_objects = jbd2_journal_shrink_count; + journal->j_shrinker->seeks = DEFAULT_SEEKS; + journal->j_shrinker->batch = journal->j_max_transaction_buffers; + journal->j_shrinker->private_data = journal; + + shrinker_register(journal->j_shrinker); + return journal; err_cleanup: @@ -2190,9 +2197,9 @@ int jbd2_journal_destroy(journal_t *journal) brelse(journal->j_sb_buffer); } - if (journal->j_shrinker.flags & SHRINKER_REGISTERED) { + if (journal->j_shrinker) { percpu_counter_destroy(&journal->j_checkpoint_jh_count); - unregister_shrinker(&journal->j_shrinker); + shrinker_unregister(journal->j_shrinker); } if (journal->j_proc_entry) jbd2_stats_proc_exit(journal); diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h index d860499e15e4..9fdc02565c24 100644 --- a/include/linux/jbd2.h +++ b/include/linux/jbd2.h @@ -897,7 +897,7 @@ struct journal_s * Journal head shrinker, reclaim buffer's journal head which * has been written back. */ - struct shrinker j_shrinker; + struct shrinker *j_shrinker; /** * @j_checkpoint_jh_count: From patchwork Mon Jul 24 09:43:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323769 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 BDEB4C0015E for ; Mon, 24 Jul 2023 09:51:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6154E900003; Mon, 24 Jul 2023 05:51:57 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5C6526B0082; Mon, 24 Jul 2023 05:51:57 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4676D900003; Mon, 24 Jul 2023 05:51:57 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 36A1A6B0081 for ; Mon, 24 Jul 2023 05:51:57 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id EB84A14098C for ; Mon, 24 Jul 2023 09:51:56 +0000 (UTC) X-FDA: 81046039032.25.7A621D6 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) by imf20.hostedemail.com (Postfix) with ESMTP id 157241C0021 for ; Mon, 24 Jul 2023 09:51:54 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=MYmDAyGv; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf20.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.174 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192315; a=rsa-sha256; cv=none; b=eBPWIZZdlt/NAI2U3uxX15uoLRc3wL3XyDsNw+H7BCoD9HTn4lK4EkJ/b0/9xDkANP1eZy xLksHsLhoV+ba9G3WhH32aKTMmAEIFLvnIzQb/8QPe4XQanMtDf6BCH0HiKxz7vgOgCN0/ 1jT80JCUyrXc3upbF0wAR1FeyMmxevE= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=MYmDAyGv; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf20.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.174 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192315; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=PA74NunQFszlW8RpIb5KtNwL3Pn/7Z7EgMABUrgFylU=; b=qInruldmEzxlwnMvUm8ZinmeAHpMcLmCpCEqgakiK2XOaJSB4hD/iOeqEHA77ZVMBrWaKV +tyN+5PC/MaZSZohszWesHwmrcVvbUDaQBEsG8w+xWcEbm07XEZBYBZWsodxtmx1PIbevh 3vqryXPaNtWRsHG9jIAcx9HqBpJOUC4= Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-1b867f9198dso8902835ad.0 for ; Mon, 24 Jul 2023 02:51:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192314; x=1690797114; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=PA74NunQFszlW8RpIb5KtNwL3Pn/7Z7EgMABUrgFylU=; b=MYmDAyGvaH9GjafGte5f0TqZMkJr1oOT14uK/VKNPTh5pL/iKc3PiGablFSi+5BT6j IoiecGUe64uKw3y+vWs1lCbpf+OS9Yo3W5ff0ikkPf2ge+l7stczNwhOHnzI0pWwe0pR lVNgWWN8Ky8FgqL+6zRdvqLPNCTDQIHpWVlJaoIShaPfmtqGQzyTwxIkhTW3kzeSVUEW pkx6P9lBjvJg8+YzkWuV4dortMmGbLFDq9Rqdx9yF/c/I9SkCHMY1GOIepMBE1qemRK8 tj0ZHDeO3eQ44eBpUz+g2//5n58O5w8P6EZtbtl6ceWITIkCg8pCfKcJD8vlFyZIVhW5 jR1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192314; x=1690797114; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PA74NunQFszlW8RpIb5KtNwL3Pn/7Z7EgMABUrgFylU=; b=UpUH0ZVOd/Bd1zcp5i1klT20RXnLSNwUrBZGWLqcb0i+8J1mg8VRsUh7nMhjlkGCpo dxnS9eHgl5Lu8RLYK+HtT6UhcpdJ4+QU/yRyx4+xuk72pgQSMyKF4y6y0UPxFOYktyAy JMes6CkjQJFCZz3GIETZKReNJlbzV9bTnmAtS1OYQ6I/btoeClSX5ueYcUCJsPD7R43j SNvM0dH7fgI73r87HQdCmHQ3oeAhkvZpxnu/x+/tgQFaYznsoSiH7xb7YfBu0UCh44MM 6TzKNGyG3XHvzMsvLg0myswrVfbgZyNx+8ULXP+BhHHiBpGj3ZTkyvBezOqaW+69Nh2b uscg== X-Gm-Message-State: ABy/qLayRG5CTyltV2FnW6Ep29Wa+5jTW+Y5krVfDtn2zebrOEw+P8PE ntxQAvsim8swOw7QEW6iqcJN5Q== X-Google-Smtp-Source: APBJJlG2oOvKNbqCVYKCsLLrFI6N3Peh10WK+D3LiX3VUR0Gh2vD9sbZ8AKvOgxEZEiSv+Xi5/CKrg== X-Received: by 2002:a17:902:d4cb:b0:1b1:9272:55e2 with SMTP id o11-20020a170902d4cb00b001b1927255e2mr12377128plg.3.1690192313997; Mon, 24 Jul 2023 02:51:53 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.51.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:51:53 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Chuck Lever Subject: [PATCH v2 34/47] nfsd: dynamically allocate the nfsd-client shrinker Date: Mon, 24 Jul 2023 17:43:41 +0800 Message-Id: <20230724094354.90817-35-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 157241C0021 X-Stat-Signature: 4au44qud89pgh8x7y5p5aj3dg5i5xop8 X-HE-Tag: 1690192314-460443 X-HE-Meta: U2FsdGVkX19WKqO0oBZlrHhVletRcbXonB0t5WDUqFlwNSAez2aoUj0EpCD+VGHYcRnGiZe3BtQudl/DG9+/lmctkOzk4Sp7jU+lLKkZ6IMjaTWm6De1K/27GLXFJFb0WOfBfIReP6uchZwNnQgsFIUDwJPL1n8mm7IdM/NqyB3ai/Lzp8JvKgLEL5019cswznyOvtXlxTEZcCM9R/2LVWdc+OMtioSYYJIRz1ovj89ksMQaWZ63N0K41CptUhg9S4xtelMX4n8iEIeIdsKoXhtYmkrtqcm+5SSXn06iuiit8iPVba+U6brbWm/dzPLVALjG2Iab0h+zA46PYX2IH8eFOX5Kh+wez51bBPYtNovG+b/Qarna2AeMpcU8RztlCOLlkdwQCSmjfCbxzOSpRdfqjSEdws8OfIcZ404CE21VtKslbF6eDR0F1fxo4i0Q6wmySoAhZpmzzEQXgw8FDtRTtMBAeBaJ9wRBBNIir0jjyLevF8sloS+Tqx04Z6o4GHyDKAkJTehRk3NfM44+T5XICakg2wf6Ulvpv72D9mkehKpajZZp9c0ZKNYfejkAw416g4FJsM1G5fruB4h2wO4fLy9Io7m2ZwngzibcUL0dWYMR70fWlkBGX7VE5PxVcfMezk78kyxksuaNAX9sib8jKfqB4c8dXzvdLTwe/P7o8UL3+/bS7NszpX6l7OyrLUvv4/AMfDP/3hUKhog3UT1K4nrbkvH+NdsHaJVlPVAgJ50noL7pKM2l9EwnZ8Lvx9jZ0olDwi5AU8W0vPMn+QM3HRBG5ZEcS5jt6i46RUhKke7Wn9MDWEwgBBCAlyv6OYP+DriPD4H7C2Wq6EpZxsJut0skyLD/NaJ5y3/yc8wubOOPNNkhvR0MWfQvyOIQUBA9aO5Fakj0vkf/zvy8PpKjEZLOOHB5KxT1ExgULz4CaLPCeouzRxH4+gHrLSga8UgjAoJNKSx0KJ/rhbT bksnN1qI Pv/zYXz90bRWq5au22nYmF17E1PhA2Fa3D6Rvn0/9e727fcbo/o2BzQ3hvCHABRHQLmQnvPsywwDVV9Eao7VCT6Qk/T+2BkXLSrFBP0zgYhmLnpvlUg9jxyKaPvPudCX+gsweKpUcs6pAxNwepr/8/PlIJHO9OllKUHi4Cuj0j7sLKFGer8tiQ3e56AS9xGj3Qsu63e/A0nNyPb/dNcQOfeX9wgCRezRO0uHXS/NIoFkTBy9jdvPhnSvPXf8L2EICUQ6dw6pkLn4ggj9yUmbjO2He0pZdemuDxK9ZrQgsSnoRT90WDFK71Jl+jbdvdrhluVir3Xhxjg524cxmEFZr8l2+KGjHOyLaNtBJGGIqxNe2U+VnS5nsi/1BkyRYgVwACNgE3PbmgsCwAlvxYMoi/2cuSldpejmwWOzqC3BE8OgE9Gi4X13Gf12r+g== 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: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the nfsd-client shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct nfsd_net. Acked-by: Chuck Lever Signed-off-by: Qi Zheng Acked-by: Jeff Layton --- fs/nfsd/netns.h | 2 +- fs/nfsd/nfs4state.c | 20 ++++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/fs/nfsd/netns.h b/fs/nfsd/netns.h index ec49b200b797..f669444d5336 100644 --- a/fs/nfsd/netns.h +++ b/fs/nfsd/netns.h @@ -195,7 +195,7 @@ struct nfsd_net { int nfs4_max_clients; atomic_t nfsd_courtesy_clients; - struct shrinker nfsd_client_shrinker; + struct shrinker *nfsd_client_shrinker; struct work_struct nfsd_shrinker_work; }; diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 3339177f8e2f..c7a4616cd866 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -4388,8 +4388,7 @@ static unsigned long nfsd4_state_shrinker_count(struct shrinker *shrink, struct shrink_control *sc) { int count; - struct nfsd_net *nn = container_of(shrink, - struct nfsd_net, nfsd_client_shrinker); + struct nfsd_net *nn = shrink->private_data; count = atomic_read(&nn->nfsd_courtesy_clients); if (!count) @@ -8125,12 +8124,17 @@ static int nfs4_state_create_net(struct net *net) INIT_WORK(&nn->nfsd_shrinker_work, nfsd4_state_shrinker_worker); get_net(net); - nn->nfsd_client_shrinker.scan_objects = nfsd4_state_shrinker_scan; - nn->nfsd_client_shrinker.count_objects = nfsd4_state_shrinker_count; - nn->nfsd_client_shrinker.seeks = DEFAULT_SEEKS; - - if (register_shrinker(&nn->nfsd_client_shrinker, "nfsd-client")) + nn->nfsd_client_shrinker = shrinker_alloc(0, "nfsd-client"); + if (!nn->nfsd_client_shrinker) goto err_shrinker; + + nn->nfsd_client_shrinker->scan_objects = nfsd4_state_shrinker_scan; + nn->nfsd_client_shrinker->count_objects = nfsd4_state_shrinker_count; + nn->nfsd_client_shrinker->seeks = DEFAULT_SEEKS; + nn->nfsd_client_shrinker->private_data = nn; + + shrinker_register(nn->nfsd_client_shrinker); + return 0; err_shrinker: @@ -8228,7 +8232,7 @@ nfs4_state_shutdown_net(struct net *net) struct list_head *pos, *next, reaplist; struct nfsd_net *nn = net_generic(net, nfsd_net_id); - unregister_shrinker(&nn->nfsd_client_shrinker); + shrinker_unregister(nn->nfsd_client_shrinker); cancel_work(&nn->nfsd_shrinker_work); cancel_delayed_work_sync(&nn->laundromat_work); locks_end_grace(&nn->nfsd4_manager); From patchwork Mon Jul 24 09:43:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323979 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 27B70C0015E for ; Mon, 24 Jul 2023 09:52:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B94AE6B0080; Mon, 24 Jul 2023 05:52:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B4479900005; Mon, 24 Jul 2023 05:52:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A0C12900004; Mon, 24 Jul 2023 05:52:09 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 9186F6B0080 for ; Mon, 24 Jul 2023 05:52:09 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 6B5831A0A23 for ; Mon, 24 Jul 2023 09:52:09 +0000 (UTC) X-FDA: 81046039578.30.4333CD4 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) by imf20.hostedemail.com (Postfix) with ESMTP id 92A481C0028 for ; Mon, 24 Jul 2023 09:52:07 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=MYlwTJTD; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf20.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192327; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=qeaWGlGrVDaX2KSqXlTQooW5ZfkYFYzGyaP55BE4cnU=; b=RGMogfGrdGKvMiPH3TPHt4CoB6hNIeLMQMqV8nMhQKQWRERNpwZP+pPnQRmOAFU3VWPnRV ej9aLbDNE7Cnt55qiVY2WNOrHRYaOkMF5EkLWiafBKT3wXsBzfs7EzBhCBDi+sdy2pvrYu RuC6h6oSavzaWVDKjtzIM/+mblx/Etc= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=MYlwTJTD; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf20.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192327; a=rsa-sha256; cv=none; b=HDr6CIS4x+DeFQuu1Xcb0yybvqdRRFX886KwBR7X7XZK0MPRtS/KHIWCz+/2FZj5arWtlN sb2EMPgzR/NiYO67C5pEdOlNCf+p0UtF9/dP3Y8ALqRlxU4YXZvgCCwskg/dEg2QLFhp/9 bvzNjNs/C485s1PeDeP6VfcTy7j3HmM= Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-1bb85ed352bso2244465ad.0 for ; Mon, 24 Jul 2023 02:52:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192326; x=1690797126; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qeaWGlGrVDaX2KSqXlTQooW5ZfkYFYzGyaP55BE4cnU=; b=MYlwTJTDVI5/f6YJJ9Nwh1CY4YhZi9eIC1CDJ1DyRv9Yzapo2flup5nLWK31JnUya4 nBXhF3/ntFof+B/fxcNos4rU1mzgGFLQ8Lg1m/538+UmVUHxLn3bg+L91E4ru1Ihz2SO fg9POOKigTONSVFBbdLssldTbubSNv45ceOMMBLo6zHqMufpuf+dUVAHstr1v+ZhEIZv x1+X0S8QyRpTexUJuKkZ0porur2Qn5WvwI7n+FLWGO6xDxD7qp5+8q7izmU/Mh7qiSRk rbyb9tE1M2c/q9e5ktmfo/oyhVwb3xP8FRqJ8O/XNvBFPXNgfLRfxzZPysC6pDcVak9y az4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192326; x=1690797126; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qeaWGlGrVDaX2KSqXlTQooW5ZfkYFYzGyaP55BE4cnU=; b=RBXYz6J8KROgflFowB5LX1RZd6s+nOvHaISJbiPzTe6BqKwqZsHeykDd4D5O9BbqcQ Wvbi7cPXwr4Ybosb0YraZGowo9CiBINU41v/DpsnpzMt1nPGWPkEGJPiNbVEX2t3wsrH YRbhV4arZuVZkkKi/M2XD9TSV15qx8r9T58IpYmz1hJG04NovTQReOQV0qLfmg8NV4qc NqbW/WKq5N6SWTaTKHjC4wWOz/fWnkHduVV/uYr64kkoIcBgka+oTtWCFoathizfJVFW sFC0/m0gT7PLDdltiANOl7n1U4RydZGf1c7PUqeIgoMRrGo3Ou3OAeG3IBPNNK/BFRXV R3FA== X-Gm-Message-State: ABy/qLZo0ACt1EuDXeXhU4jI0xN1WSYQJwBVnXLwQ1p+UceArrPwoiFg Ka5jbNjmHqP/7v6ejxz+4r3LLtqzjkOTMZj/xXA= X-Google-Smtp-Source: APBJJlEv/cxcU4CX85hgEplaAz1eX7+5tW063l2dwuRz+2PjFKejJ2gbKnkgXcFETviQG8sX+JGIQQ== X-Received: by 2002:a17:902:ecce:b0:1b8:b55d:4cff with SMTP id a14-20020a170902ecce00b001b8b55d4cffmr12430579plh.2.1690192326485; Mon, 24 Jul 2023 02:52:06 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.51.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:52:06 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Chuck Lever Subject: [PATCH v2 35/47] nfsd: dynamically allocate the nfsd-reply shrinker Date: Mon, 24 Jul 2023 17:43:42 +0800 Message-Id: <20230724094354.90817-36-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 92A481C0028 X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: ujzzt7ecem7s8xrm6igqaxzo153f8gqc X-HE-Tag: 1690192327-730187 X-HE-Meta: U2FsdGVkX19ww5H3zWtXMEMNF5B1bmGc1HS1dBzT3gbKVXs0D68/WeClYg0fwTOT88A7BuJ/b7zDHym6JP51nMHZ2tZUolKr8OqgcD53EWhHJsYVDjxWuOywv4QaUwxgmBR1eu9EyTGXcNjBH0OFb9XAKTQfYZfZWVLhgkQQGHQsTZbM1L7vYcOtT2Wq62Z1j8Ox66ryO4oDmTEJPrXvWa6qiI1P/tT2MOpqLlAQtkMoRtexTOaJPk8e7I05ZWOtNF9O5asinO6S1Irg48j9vtmcUjuWCDfo9q1lQI89CS3CgZ1X1hSIK3/lcFOMasgGKQfPagdMQaAbxwElTMz8geN7oV7Uk6Gb3QuvV80wIhUymD99cw9LxnTH5QBYaz6Voue8e3MfGffpXmWvydIh29uVz4Vls0lGwzKxBVnRKlzxHyXiIizqgxCIljVftGsyy+OF5C1f4j9rQHqTCsv1lv2+JNkizlQYCYz/g1stxfssaAxM2lbENGzLq2H8LE21/YocrktRjwxm129rjpRAIxaletWSjOX5jZmxrltXCTkMTMG7qYBlfjh7yeueAn1OOYscTSyk4Kt9TwOCNRrX0cfuisSiRPvsjDOTX13VclqHuAFLV8YMl15ofzx52PKqamUuyymvNgqf4iegE138Rx/yTPY0/qF2A9czhB8JtVfzNiZsvSl86X5JYaZF6/9+lLq9i/cmVt/DEHKoU9RUMfelRFQdEXpEAOktXmVTnR8gy7uFcjFEcnYH6M2IRm6z8gR9cSPCEFnhghbzWmqg/0rA6KbpADd7kGJbulNQVAgHu1Cr0U781YfZe+tR0YaJgfWhNBorQHaL+Y485YLzocnaXZd0ocouk5b+1WLfS1Cm2L8SdZ/axqLbNZNlhxB7nLA3Fbmg8illbs1vXsHWUfXz5SloOoZ1ND7rZRKWG1m5j51c8Vgb5iuXYvdZLAB1vsZS5kPV5+uefeHFrnk o4m/fIDQ 44SstOQvodUq5CbkzWXZ8SZgMiwtJqp3+gGuKDQTh8zNQVMN/7B8dNet3W5a+2L+zEXyQjp64zdURK/FAVlzxymcBvEydScNYGgZEzb8gDEBuOVysrezNffQpEr2fi37wBuVt6ifdvj5WgNMdYPZzQ3EAFZwy0ViVH8askDI/HDO2dCRhl/vjNh2OlcXSC+Ky/HXbhtHn2e6dNoKqTLs+cQiE0tatcWSPymd03T3xn7fKiFbdWQGENn8WsHK0LhmUDMlz+HNovnHilYVFWTofNg1q4UJNhR2C2GvTjyKxwEq+KJk4z1XlVUeHp4bSepCfV2zjziEW1nBspodwwoN0zKms+9IfpE0ErjDdMm4occbcKjvYdGpahh/25VdaQLUfktet6IILIAftzzjQ40ix2L8Rw2MRYuHYC8f2jggtUymxZMdV4WlDAIm60A== 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: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the nfsd-reply shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct nfsd_net. Acked-by: Chuck Lever Signed-off-by: Qi Zheng Acked-by: Jeff Layton --- fs/nfsd/netns.h | 2 +- fs/nfsd/nfscache.c | 31 ++++++++++++++++--------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/fs/nfsd/netns.h b/fs/nfsd/netns.h index f669444d5336..ab303a8b77d5 100644 --- a/fs/nfsd/netns.h +++ b/fs/nfsd/netns.h @@ -177,7 +177,7 @@ struct nfsd_net { /* size of cache when we saw the longest hash chain */ unsigned int longest_chain_cachesize; - struct shrinker nfsd_reply_cache_shrinker; + struct shrinker *nfsd_reply_cache_shrinker; /* tracking server-to-server copy mounts */ spinlock_t nfsd_ssc_lock; diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c index 6eb3d7bdfaf3..9f0ab65e4125 100644 --- a/fs/nfsd/nfscache.c +++ b/fs/nfsd/nfscache.c @@ -200,26 +200,29 @@ int nfsd_reply_cache_init(struct nfsd_net *nn) { unsigned int hashsize; unsigned int i; - int status = 0; nn->max_drc_entries = nfsd_cache_size_limit(); atomic_set(&nn->num_drc_entries, 0); hashsize = nfsd_hashsize(nn->max_drc_entries); nn->maskbits = ilog2(hashsize); - nn->nfsd_reply_cache_shrinker.scan_objects = nfsd_reply_cache_scan; - nn->nfsd_reply_cache_shrinker.count_objects = nfsd_reply_cache_count; - nn->nfsd_reply_cache_shrinker.seeks = 1; - status = register_shrinker(&nn->nfsd_reply_cache_shrinker, - "nfsd-reply:%s", nn->nfsd_name); - if (status) - return status; - nn->drc_hashtbl = kvzalloc(array_size(hashsize, sizeof(*nn->drc_hashtbl)), GFP_KERNEL); if (!nn->drc_hashtbl) + return -ENOMEM; + + nn->nfsd_reply_cache_shrinker = shrinker_alloc(0, "nfsd-reply:%s", + nn->nfsd_name); + if (!nn->nfsd_reply_cache_shrinker) goto out_shrinker; + nn->nfsd_reply_cache_shrinker->scan_objects = nfsd_reply_cache_scan; + nn->nfsd_reply_cache_shrinker->count_objects = nfsd_reply_cache_count; + nn->nfsd_reply_cache_shrinker->seeks = 1; + nn->nfsd_reply_cache_shrinker->private_data = nn; + + shrinker_register(nn->nfsd_reply_cache_shrinker); + for (i = 0; i < hashsize; i++) { INIT_LIST_HEAD(&nn->drc_hashtbl[i].lru_head); spin_lock_init(&nn->drc_hashtbl[i].cache_lock); @@ -228,7 +231,7 @@ int nfsd_reply_cache_init(struct nfsd_net *nn) return 0; out_shrinker: - unregister_shrinker(&nn->nfsd_reply_cache_shrinker); + kvfree(nn->drc_hashtbl); printk(KERN_ERR "nfsd: failed to allocate reply cache\n"); return -ENOMEM; } @@ -238,7 +241,7 @@ void nfsd_reply_cache_shutdown(struct nfsd_net *nn) struct nfsd_cacherep *rp; unsigned int i; - unregister_shrinker(&nn->nfsd_reply_cache_shrinker); + shrinker_unregister(nn->nfsd_reply_cache_shrinker); for (i = 0; i < nn->drc_hashsize; i++) { struct list_head *head = &nn->drc_hashtbl[i].lru_head; @@ -322,8 +325,7 @@ nfsd_prune_bucket_locked(struct nfsd_net *nn, struct nfsd_drc_bucket *b, static unsigned long nfsd_reply_cache_count(struct shrinker *shrink, struct shrink_control *sc) { - struct nfsd_net *nn = container_of(shrink, - struct nfsd_net, nfsd_reply_cache_shrinker); + struct nfsd_net *nn = shrink->private_data; return atomic_read(&nn->num_drc_entries); } @@ -342,8 +344,7 @@ nfsd_reply_cache_count(struct shrinker *shrink, struct shrink_control *sc) static unsigned long nfsd_reply_cache_scan(struct shrinker *shrink, struct shrink_control *sc) { - struct nfsd_net *nn = container_of(shrink, - struct nfsd_net, nfsd_reply_cache_shrinker); + struct nfsd_net *nn = shrink->private_data; unsigned long freed = 0; LIST_HEAD(dispose); unsigned int i; From patchwork Mon Jul 24 09:43:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323980 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 458F3C001DF for ; Mon, 24 Jul 2023 09:52:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D90CE900003; Mon, 24 Jul 2023 05:52:21 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D677B6B0083; Mon, 24 Jul 2023 05:52:21 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BE247900003; Mon, 24 Jul 2023 05:52:21 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id AE9F46B0082 for ; Mon, 24 Jul 2023 05:52:21 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 73DAB160A15 for ; Mon, 24 Jul 2023 09:52:21 +0000 (UTC) X-FDA: 81046040082.30.1A98A77 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) by imf11.hostedemail.com (Postfix) with ESMTP id 5681140016 for ; Mon, 24 Jul 2023 09:52:19 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=SzORXV42; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf11.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.180 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192339; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=TdB9rRMLZCcd9e2nqCLYXDwhc2GYqBzgLTOCktFYsxc=; b=x0iCl9iAPZI8Pt/BYc4LbJ3kLvGXCljCo3p9chvMF0lgRez3hwBs2oUCR+8Dhg3x9Qvqgj m3SUhbKeyaSemiR2VK7Mg8O66/RwAsSk0sC/Xl3PKXdG+LUVYzKhArOjFDTkEibMc/KBII 0FkVCRrx9YT9uiLrja5dOP487b6XdFQ= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=SzORXV42; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf11.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.180 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192339; a=rsa-sha256; cv=none; b=pAno50tnec6lDplb6wqGadM7opMgzJx5gYSQnPFWYGD2U2ZuSx1+oXczZJDNhvVbP8XxV5 W1z9nR32JLVKkaEGg9LAIziX40ReNIBLCuB80S4s/YSG4domFkod+cwOpzjVVBDjegs2AX K4sjg4dDHgtXig1ntHdcwytOkosXO0s= Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-1bb85ed352bso2245095ad.0 for ; Mon, 24 Jul 2023 02:52:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192338; x=1690797138; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=TdB9rRMLZCcd9e2nqCLYXDwhc2GYqBzgLTOCktFYsxc=; b=SzORXV42/Rkrz0ySbtFMuCZ6EcMdlaXWidsXVoP9Bu4SkfHmgah3BXDWmdOJP2Jiax xVX2Gq7sqO/lSpvZDt7FPW8ckXc5rBx+Fp5rDETVHg5ZRmLyKjmjXPxU8j82DsT8nUX2 +lBD1pmTVNRo9p32tv/6gOZ/Sm5LO6qba/fn4oF55QYMtV6ZQw4pMeuXt6qQbAj1PWKP V84//RahuYbQGXKjJ1xGWfF0qil0oc/qVmx4ZoBZqcIV2GTe+3GnYm52uVamfvVOgPBe 7qmhYlAe5+lFDhiCToVYO6NYEZfnOgPlX7bqwkW4eIRa2R40yUO4E7ouwBizzc4Majgp WMAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192338; x=1690797138; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TdB9rRMLZCcd9e2nqCLYXDwhc2GYqBzgLTOCktFYsxc=; b=GcPifCJiVplLyvMNWkYYXh8p0nUOBMic9O0QBmjw3kSR34qvx8Kdrc+k3MHK2kBuV1 OpfQAOVvuYQooCNvIAyyEJAEnz1B0Ve+uFP5dkp/cQ2qB1GRAWqfQbLePPSHVrSBOwGp 4IaFYkmq5JEVjcKOFoz6jiflmj3YqvXK2Ti19M30WNsTb6TV4XaVU+0nfKSSp/wn6+Tq bA0Vhj/MgNUqPWhkGTl/cC79uErUbsfE7o8eg39OV1VrGvl90vuodHlTOQfbPORqVhw/ QHYOHj1LCzRWcUZpLOCwnVr7nZWauHwPDDMokrWUT+0bVW/roJcaApsUnF6jh1jX0eLh yqEQ== X-Gm-Message-State: ABy/qLbGe8s8E3FWUqPdqBpI1N95PbXmGZh7Gj1/lTb4yMeB9uEmsiJ7 kvEz8GKxTRzyms+G7/DwSrFQog== X-Google-Smtp-Source: APBJJlGv61W8KGqFtJwXjT0bM91VjHnubPgHDdaymusYtIYliDl3QXXildbsEKZFPobYebqub0cGDA== X-Received: by 2002:a17:902:f681:b0:1b8:17e8:5472 with SMTP id l1-20020a170902f68100b001b817e85472mr12096259plg.1.1690192338295; Mon, 24 Jul 2023 02:52:18 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.52.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:52:17 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 36/47] xfs: dynamically allocate the xfs-buf shrinker Date: Mon, 24 Jul 2023 17:43:43 +0800 Message-Id: <20230724094354.90817-37-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 5681140016 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: jid3x6inky1wn8uw533zrsgiysenarh3 X-HE-Tag: 1690192339-578431 X-HE-Meta: U2FsdGVkX18f/mLZpGnPy2siy69zrNiOAl+9QnFoUmlMRcBTwhCF/PGhrYEWdPFL9MCfxbCKEhdJ57OImaHyMheubfJFE0LauMGwpcWA9BCS3TnY0Ds0Zmb5ZABcKn43KhKnxLX0YTYQkXhg8xC3jkUNnkBy18NKSBUGbgU6GZdAZAMxq1Utpk6xkgcviQaW4EVBLPKlL4A58xSxl7cQ37El2Y8BUyoYRIEe1aqFPOPZDJsdWhkbboq41vOZrkXuqHB1xene94cLr6bBp6BbTh6wPquxusHT8+dk4S0+2yCYkb4+5kx8OnGWpMHJDmgYfS7GcJ1w7iqSJZlEcLdQEDsXNzBiUZMeLZ/KZVcrTg9ErF2JTzJ3jdXtfBzqzlkaw0xOF8qcoIgWcaRc20+eCBA0TyBmAXJHIcaUe3iRmlA7qr2k3I85M9rBHOBK/89dYba0KrJ3MuwbFUTMjYsATHuf8S/ZGs6a528DUw7CxISFRN6vOzd2QYUeDz2zLSlbJbYPImbIZj4PBrkBdaSZc04IbGfIYBAqrDkORRxEt7ZGSn0lxRGncjCJAfIQYv7+AmUof3VzR+S4t4GRdbWRTQm6Y3teSaIRQKSq48mNnr3d8CMg2xSKQfeGqQIwH6WW+rF3briuMtJjdCu09uNqAtsDdcQtGT3NLmnX9HWSr6QV3LuG2iupe4/o5R7QqoH5dQLihMwT2lKQSyMwTb1mMC6Z0JEzr8qIHbjbv5QYQk9J8mEnLkVPyDXuR9mkCmO22RVU89Ck9Hj53aKSqQUgBhexhHvk2zXoofZfZeJQYm27sUyQcjZt3feeYgR3khr7g0CS9M82wBOU9LcWm4hGtvvS58zZ9hCdDKIr3k9B9IK2bB1wu3pjdB7Vn3IBMWFzZTVEAil3Tifk+VMkcgDG2hRol0jVdd/ZCfKmmo78HyotLbRx0NHm3ffOSy0C0Cu7O3UySf8SmsSrb2Rko5d C3lwxQXp NMknfHPuOn6VniL680sxICXY//7YoSPOeuA5EhmLeESge1t3MWe+RPOJvXSARsnU0Q3olkZar9iKWADbkBDZ91RldBs2MD0Qg1JG2DByRPoy1HcADRndeRqntqG4XnBRAjwWxqzRA8LWgwhulCKKdW+1Os/07/cR2WSlUy2FvHF1wYeiaonEKJ7+2n/vBVmaPttIwKBnT4IgB3YRI+Ro0KGaOh4LgxCEjjI8aVyQsjaRujC6Eh3WMPTKovs5xsKvswfHO4Q0xxynu1QX+/o7h/FE13f4s8469tfOWzgvpIQWIHQtY9pKL9WLdHYEt7EDgbQ3X83//G3MDR/Kk5ZCkGbQyiys7sPjvfToMw3nTySZVMY0nIYDot/+IYgmwPVlSNYCWtadLY0tiI+5PxnUURyFur0exlm4m326w 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: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the xfs-buf shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct xfs_buftarg. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/xfs/xfs_buf.c | 25 ++++++++++++++----------- fs/xfs/xfs_buf.h | 2 +- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c index 15d1e5a7c2d3..19a0bf6ce115 100644 --- a/fs/xfs/xfs_buf.c +++ b/fs/xfs/xfs_buf.c @@ -1906,8 +1906,7 @@ xfs_buftarg_shrink_scan( struct shrinker *shrink, struct shrink_control *sc) { - struct xfs_buftarg *btp = container_of(shrink, - struct xfs_buftarg, bt_shrinker); + struct xfs_buftarg *btp = shrink->private_data; LIST_HEAD(dispose); unsigned long freed; @@ -1929,8 +1928,7 @@ xfs_buftarg_shrink_count( struct shrinker *shrink, struct shrink_control *sc) { - struct xfs_buftarg *btp = container_of(shrink, - struct xfs_buftarg, bt_shrinker); + struct xfs_buftarg *btp = shrink->private_data; return list_lru_shrink_count(&btp->bt_lru, sc); } @@ -1938,7 +1936,7 @@ void xfs_free_buftarg( struct xfs_buftarg *btp) { - unregister_shrinker(&btp->bt_shrinker); + shrinker_unregister(btp->bt_shrinker); ASSERT(percpu_counter_sum(&btp->bt_io_count) == 0); percpu_counter_destroy(&btp->bt_io_count); list_lru_destroy(&btp->bt_lru); @@ -2021,13 +2019,18 @@ xfs_alloc_buftarg( if (percpu_counter_init(&btp->bt_io_count, 0, GFP_KERNEL)) goto error_lru; - btp->bt_shrinker.count_objects = xfs_buftarg_shrink_count; - btp->bt_shrinker.scan_objects = xfs_buftarg_shrink_scan; - btp->bt_shrinker.seeks = DEFAULT_SEEKS; - btp->bt_shrinker.flags = SHRINKER_NUMA_AWARE; - if (register_shrinker(&btp->bt_shrinker, "xfs-buf:%s", - mp->m_super->s_id)) + btp->bt_shrinker = shrinker_alloc(SHRINKER_NUMA_AWARE, "xfs-buf:%s", + mp->m_super->s_id); + if (!btp->bt_shrinker) goto error_pcpu; + + btp->bt_shrinker->count_objects = xfs_buftarg_shrink_count; + btp->bt_shrinker->scan_objects = xfs_buftarg_shrink_scan; + btp->bt_shrinker->seeks = DEFAULT_SEEKS; + btp->bt_shrinker->private_data = btp; + + shrinker_register(btp->bt_shrinker); + return btp; error_pcpu: diff --git a/fs/xfs/xfs_buf.h b/fs/xfs/xfs_buf.h index 549c60942208..4e6969a675f7 100644 --- a/fs/xfs/xfs_buf.h +++ b/fs/xfs/xfs_buf.h @@ -102,7 +102,7 @@ typedef struct xfs_buftarg { size_t bt_logical_sectormask; /* LRU control structures */ - struct shrinker bt_shrinker; + struct shrinker *bt_shrinker; struct list_lru bt_lru; struct percpu_counter bt_io_count; From patchwork Mon Jul 24 09:43:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323981 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 CA674C001DE for ; Mon, 24 Jul 2023 09:52:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6B2E9900004; Mon, 24 Jul 2023 05:52:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6636D6B0083; Mon, 24 Jul 2023 05:52:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 503EC900004; Mon, 24 Jul 2023 05:52:33 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 3FC6A6B0082 for ; Mon, 24 Jul 2023 05:52:33 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 0B265120905 for ; Mon, 24 Jul 2023 09:52:33 +0000 (UTC) X-FDA: 81046040586.11.9137430 Received: from mail-pg1-f181.google.com (mail-pg1-f181.google.com [209.85.215.181]) by imf15.hostedemail.com (Postfix) with ESMTP id 334D9A000D for ; Mon, 24 Jul 2023 09:52:30 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=T5pLZeng; spf=pass (imf15.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.181 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192351; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=guTIXae/kI3JPez6Art55JYiwmImAmg2GBvF3i236eo=; b=rMCaJiFEjAs/bGGMx2Y7AxNnTa43tfG6buaW1xMWGBP38rS2kISi3fKv/lTI5BSzieVo5M ZIaCWMD9+ugUza3FM2X6R70nfeyLNHMZToOtZw2rVZs0Q7a29OmQZPCJ36Qp81ywMO8+N2 bC6ailWWR+qUyYJ0ft9xhgyt4LPQUpE= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=T5pLZeng; spf=pass (imf15.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.181 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192351; a=rsa-sha256; cv=none; b=KfZECieS1wfHpFQhpuelkH6asISLn6TamdLejRCP6h4Iiey8nUgL7lOguzAtMAnenbvbxC FNkoAGrvbjE4aXflPn20ynjtkbYb4UUjqmAGWvKuK8FMYj6SiivFjGKKX1Z2TIPlMAw7cv 9FlabbUcXe45LGWXDGm+oQgWUgd/WSo= Received: by mail-pg1-f181.google.com with SMTP id 41be03b00d2f7-55b5a37acb6so327166a12.0 for ; Mon, 24 Jul 2023 02:52:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192350; x=1690797150; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=guTIXae/kI3JPez6Art55JYiwmImAmg2GBvF3i236eo=; b=T5pLZeng3kilrZ5OsnvGTDioSzbaJCT88B3/JHb49aZTbZwkP7SQy7bBJoydE9spSc QIxkCjfHPkCmZ3YIN0z+vz21Kuh2hIgEDSPHHynjot/NbMHOuV4niRtD3jI5KIBaaa0O QjmZCafpm4KClLD1lVXUS+elEzy69vq+ucFXQ9CjFJ4T1DxZVWoYTT1w3KSYOQJv3GQd ajkkZaaoOEQUBpPKcbabEPlKAYj8bt1g6LICLF4Sb/Oh/OZdyOCaK9S/uK8Sx83ZxUOS cV5UpYXnJF2ZClJYAKOlUHJYPAwRn2oigN8jrAEhI2JaJXKMB9RmC8T2WtXgjmkuAGWv WtUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192350; x=1690797150; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=guTIXae/kI3JPez6Art55JYiwmImAmg2GBvF3i236eo=; b=joC46KMFRrWhWcZ9KvRb1KA2zShpsK/xLHgVHjFE2QN2XAvlA5K1mqeNEaMqeY43k6 PRGq7qEpjRDWjYH6jME570GdajXhO3pjvb6oFfi2lDbnnMGN0IzInsO8Spnk/RJZ0reT eSFXBKscEOySwrhb+ImpudKiIjmDdGmMV/dCkQ/MbfpPoygc1ZeoDwtfnHTHOvzsUBhh 1w1OwnZ9J/Qfvpg4wiV5PICg7aqcOyjK74KqX4Jxyr18icUgAs0RMiQYLN4iU06NZ2qQ f0evkpChz9mifskF282EnjD6Kr4QxlXvpss0bfUpTL8xNhizFcRZR+DycPHPWONK6oJM HTFQ== X-Gm-Message-State: ABy/qLZH1XbevlCEr2XryvyDqnxob4kYwX1cvc/4dH3ubr6nSlQFO7SE KxaxGLfeEdfOJVv+rtKZqphlpg== X-Google-Smtp-Source: APBJJlHJFdqX7YvzDE87sV65msd4BgjSJaSlmkLSDmv21X9cTIYDURxtd2XgOOda4P7o7DorEuOAJA== X-Received: by 2002:a17:903:41cd:b0:1bb:9e6e:a9f3 with SMTP id u13-20020a17090341cd00b001bb9e6ea9f3mr4119632ple.4.1690192350104; Mon, 24 Jul 2023 02:52:30 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.52.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:52:29 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 37/47] xfs: dynamically allocate the xfs-inodegc shrinker Date: Mon, 24 Jul 2023 17:43:44 +0800 Message-Id: <20230724094354.90817-38-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 334D9A000D X-Rspam-User: X-Stat-Signature: 3krzjgpkof7im3mo9bw7xedt5ayex3re X-Rspamd-Server: rspam01 X-HE-Tag: 1690192350-401692 X-HE-Meta: U2FsdGVkX1+ncS987Sjq95usDU54IjecznoEemz6Pmkfp1ULjDobqF1Depi4wWP/YRITZSojvNeQsi7mlMkHQBWgvOTW1DoZpzEV/mQHNOgR4eoaS3zWosz/WyKrWm5qVJT7LJdFZje7fgfOEA7eG12wHuoPqlBG9oWemM62XRMstXx/y5i53Bz/zpzVMWH/zrU8Yww+F+0VOii9EsKdhEUBLnfk3SHWqND3AkrdkLtRpMq4HwwTOU9cF/agc5LhlTcIaqyrroAzW0xB80l7uYaCiZ8yYFzCehstT4FLgbnov7ath7riavQT56MVRQXj3loGksbg4MQ5mNgy5TyXdoQtzVdm5T/8Uxe9p2RIKvTZdsv1mbpxcnFGhNpApgeJEzVti8nnx3WGABb8jleVSYcHKQm9v6coi2QaPsy5PE4tuyUuAopKFQvt90hvibV1iChzsxlSsFUocbze2+mXs/BeR25/hi9cWTGfvD3Ca2SMNfRsZ+OEVAdgIRNVAUTI/gRq0K/z/gJlDlzvIxdWBhQABCFZd8Y8JtAbHN74/ncGK9/9r9hydPr+CLpCipBpHER6VJI3TKuFrLpjqSz+DqzH9qELVBRc91VFAMzOh1gK4vnqWG9ZiC8oABbkSJRcLwDt1stb6UJxtDbI/ekty8kynSXtRQqAnqBaxBhTs3s2zNL1ZWZCnPttvpWcdIlkevkILPk3Lfnr+0tBnGngq+9KYykv0c17YNfOOOAtszSx7/3Ztw8nROiJdqaRzxhUlhapa2cdJWecAmAulPz3sgzEPqBaT9jDZs9/2usqnH8GfDgrNUNnnLBWWnNYCeY8xCqSFzz2NmBniM5lpb7/Spumal5dbN7ZhaJp9u1eJIAO+Jiek4oDf/tm4kNAQkbGfmVYf6MSRZCr8f41tq6lkfzhmDrHZ3nCKtsMZMalXHx/XUGpCUUZ2VKg2pMYTFUcId/ZqpAyyJtk6F8OF9b GbwVEmlN 2uCTgOQ5kkn7HU95AEA0cAvAofOvDNvO62NlJbzvI/S0gOIGxeHx5ocTyv33MQYkqoktDPBBFSo9QG16MgykwKlGKiQ9/KZfuYt50eEHS7sYq//3ddqwxhY0ueI1xaZz8sLn9P5RLzrxixdFNrvZ10gKaQKCukbTM/Y5mHrq3Z395BsHCyLtBPnH+lsDBQ1rg2mdqmVOyWXog/ul53y8XiPQwGpnqjg8IfNaqdcG3Z11X4NIqzUJaqlCMiKanCfaCjMmoM7vj3ZkUhzbP9kj8WE6mbrWUbLnaR7aiP1dm38g4GJOVu3dOmesdbWg06USLY1+ILS8KXKYdhykxzRkPkbkIbnN2ZcYTev9GDp5JbKoOaoFsFNzywyZm2VcAQjcTDnbkbtkIt1olX5g7Ax4m+Kvywhtal+4Hrofr 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: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the xfs-inodegc shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct xfs_mount. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/xfs/xfs_icache.c | 26 +++++++++++++++----------- fs/xfs/xfs_mount.c | 4 ++-- fs/xfs/xfs_mount.h | 2 +- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c index 453890942d9f..751c380afd5a 100644 --- a/fs/xfs/xfs_icache.c +++ b/fs/xfs/xfs_icache.c @@ -2225,8 +2225,7 @@ xfs_inodegc_shrinker_count( struct shrinker *shrink, struct shrink_control *sc) { - struct xfs_mount *mp = container_of(shrink, struct xfs_mount, - m_inodegc_shrinker); + struct xfs_mount *mp = shrink->private_data; struct xfs_inodegc *gc; int cpu; @@ -2247,8 +2246,7 @@ xfs_inodegc_shrinker_scan( struct shrinker *shrink, struct shrink_control *sc) { - struct xfs_mount *mp = container_of(shrink, struct xfs_mount, - m_inodegc_shrinker); + struct xfs_mount *mp = shrink->private_data; struct xfs_inodegc *gc; int cpu; bool no_items = true; @@ -2284,13 +2282,19 @@ int xfs_inodegc_register_shrinker( struct xfs_mount *mp) { - struct shrinker *shrink = &mp->m_inodegc_shrinker; + mp->m_inodegc_shrinker = shrinker_alloc(SHRINKER_NONSLAB, + "xfs-inodegc:%s", + mp->m_super->s_id); + if (!mp->m_inodegc_shrinker) + return -ENOMEM; + + mp->m_inodegc_shrinker->count_objects = xfs_inodegc_shrinker_count; + mp->m_inodegc_shrinker->scan_objects = xfs_inodegc_shrinker_scan; + mp->m_inodegc_shrinker->seeks = 0; + mp->m_inodegc_shrinker->batch = XFS_INODEGC_SHRINKER_BATCH; + mp->m_inodegc_shrinker->private_data = mp; - shrink->count_objects = xfs_inodegc_shrinker_count; - shrink->scan_objects = xfs_inodegc_shrinker_scan; - shrink->seeks = 0; - shrink->flags = SHRINKER_NONSLAB; - shrink->batch = XFS_INODEGC_SHRINKER_BATCH; + shrinker_register(mp->m_inodegc_shrinker); - return register_shrinker(shrink, "xfs-inodegc:%s", mp->m_super->s_id); + return 0; } diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index fb87ffb48f7f..27c2d24797c9 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -1018,7 +1018,7 @@ xfs_mountfs( out_log_dealloc: xfs_log_mount_cancel(mp); out_inodegc_shrinker: - unregister_shrinker(&mp->m_inodegc_shrinker); + shrinker_unregister(mp->m_inodegc_shrinker); out_fail_wait: if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) xfs_buftarg_drain(mp->m_logdev_targp); @@ -1100,7 +1100,7 @@ xfs_unmountfs( #if defined(DEBUG) xfs_errortag_clearall(mp); #endif - unregister_shrinker(&mp->m_inodegc_shrinker); + shrinker_unregister(mp->m_inodegc_shrinker); xfs_free_perag(mp); xfs_errortag_del(mp); diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index e2866e7fa60c..562c294ca08e 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -217,7 +217,7 @@ typedef struct xfs_mount { atomic_t m_agirotor; /* last ag dir inode alloced */ /* Memory shrinker to throttle and reprioritize inodegc */ - struct shrinker m_inodegc_shrinker; + struct shrinker *m_inodegc_shrinker; /* * Workqueue item so that we can coalesce multiple inode flush attempts * into a single flush. From patchwork Mon Jul 24 09:43:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323982 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 D01F0C001DF for ; Mon, 24 Jul 2023 09:52:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7004E280002; Mon, 24 Jul 2023 05:52:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6B0BA6B0083; Mon, 24 Jul 2023 05:52:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 578C0280002; Mon, 24 Jul 2023 05:52:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 48D256B0082 for ; Mon, 24 Jul 2023 05:52:45 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 1A5DC1C98C8 for ; Mon, 24 Jul 2023 09:52:45 +0000 (UTC) X-FDA: 81046041090.06.D60492A Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) by imf23.hostedemail.com (Postfix) with ESMTP id 1A45F140025 for ; Mon, 24 Jul 2023 09:52:42 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=h3gsG4QX; spf=pass (imf23.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.181 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192363; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=+msSROnlHTbkN8WdS5VhxMSS48DaBcuNUu675bILAm8=; b=DUW+LCdLHaMJvCwJ4cTfkmTDwpGxlQ85EIL3A+em66ReKwTOl1LblgEOgVVyqCGZRM3B1x QiIy7HdqOC6eRAgmOljEp+AHqxA3eO4+VDQAJl9Lj7ULd/MvhS3G1GdDFxBZw2eJhOCcOv BORK9cg94JbaUXhuZ0G5sVcJ5lFlyXc= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=h3gsG4QX; spf=pass (imf23.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.181 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192363; a=rsa-sha256; cv=none; b=18oYPQp9AyPSwuHLxZyb5VUgOShawrssLErVnBsrs4Df+L3DXRe5PcuhqW1+AKsW9rlmcz kKNB8nWMGSl0igReD3LARsBd/wwJoTT4j6NW28IbIlRvTCP5/xTMFBAsKtWnuAyUp1/wry Gi5PLEgn01W/77MJFLQhC6sO0gqsQnY= Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-1bb91c20602so2234745ad.0 for ; Mon, 24 Jul 2023 02:52:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192362; x=1690797162; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+msSROnlHTbkN8WdS5VhxMSS48DaBcuNUu675bILAm8=; b=h3gsG4QXWw/nahqBxLdBCvqi4m8rD0FXz9A20d9YDr1GVweA7QI5gIYRXxeR03F7VF avO+YUz8f1IL6J1uYX1/b0NEPW6FiLuYcPPgWc9sNeFYAy1/jQVonTK3Har+aojJwTqi hQZEwnSV3LL7ecl9UfamsDpZO40zuTjDqPfF5eu13La0YtcWt3KQO54XvrgMZueVi5PZ X9MwcigdTTnwiJ3xQrZgNRbLcfkBdWK7eRH096K0D7h66kc666JHvNvIGlIc1vw99tH0 GAm/hWRvtDUBnuyuOUfh8qzrbwzBKl3sPPd+rGOKnxJaCrXEUUZmWLLd6RNa7iYZg14F z6LA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192362; x=1690797162; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+msSROnlHTbkN8WdS5VhxMSS48DaBcuNUu675bILAm8=; b=RCLjLp4i9UXsZpUDwhSvGAKt21iVK+Zt1xCccLSEkNqFQJFRwlQj/cyEYs9TgTafsE Cgdry+mBhW076ImCdrgu/S0KBIaQ+1DFo+3QI0q5DJKfZiDyEuIccO0mjwvjECpP4aJH uRTwfrHhm2heyFQbu79vUjZPraVUxY3Fvh7fLTwTbQy4nhJVfo8+zq4y+dO9vG6o3N7T QGG0DJdQDHBev7wJcegTtEYJ3LqBSszSDdZSyykRW/yl1gQRy+HTzbbw/naOSBsEF+6p NIyDosYDzE/8f3L6Ut4i7WsZ/MLLoI7OL4iMh7OmGAiE4ETP2uAY5u1J6huSpVGAAv/p 1tlg== X-Gm-Message-State: ABy/qLabMkVX6eoOxkAVJ+O5UIOXLIN94/MNpIql4vkyR3CymkxOYGgG Z0t5QwWMlbZdDS1WYtqhGc7uhg== X-Google-Smtp-Source: APBJJlFjFnMUMe3SYJatR/saB9KY/jkISOdIPz1PLzDLS3adgTzHCnV8/bXf0D4q3OfiSxgFenVrMg== X-Received: by 2002:a17:903:41c9:b0:1b8:17e8:547e with SMTP id u9-20020a17090341c900b001b817e8547emr12208099ple.1.1690192361964; Mon, 24 Jul 2023 02:52:41 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.52.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:52:41 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 38/47] xfs: dynamically allocate the xfs-qm shrinker Date: Mon, 24 Jul 2023 17:43:45 +0800 Message-Id: <20230724094354.90817-39-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 1A45F140025 X-Rspam-User: X-Stat-Signature: h6g8mo9ho7b6r1abar8oezwjst54r6ai X-Rspamd-Server: rspam01 X-HE-Tag: 1690192362-13017 X-HE-Meta: U2FsdGVkX1+wRSyKPjl86Mhkeb8TPN5867486v0NB013bp4ENHA7c46SYNXlD9vH8l7sF0e8U46V4XwErOGFkhi4hkjLl55qvOZHDtvEpkMjoBBJC6+l1J+ZU4D8dZ+8b2KVOH9Q4lFWRL5923zTnnV9kf1i112vD1Lesz82OPD/pTMJxa35fszsV2gwgh/4Y4aHQycpAzCCmyTC3WxHGR+I1FWaKtWOI3FqzWUU+XJt+pwzIMTXondW8Wp72kr4QopYPIFZ5S7gi6unUyrglD++//92S5W41wyScSJmxkP9GR7bfGgBUDdodtCU3Uh1QNctJFFT88PA5crHrKPT2E6Run9kdOxwbHuK+uXzBw5bFcl6HuudhQfTebURAPxDdYtS+xholMoz62vBbFOtjDhNGSYaGHyhSzINsZd+PIwSMhJqBi9NKQd7nIU9x3PDgem42ThoMuRJTiC2vojFt6oWxTO0I0GMlT/kjwSlSaH4H32f2Ix5or3QCUazi3WNTOmT7mfXpNRYw0dofTs8DvEdhv0sBiXrfEsXsxhW8SwqM0+84e/in8JFWkY367TctU4qxB8H0e4TRFA27PN7b5Z0PJIZwzM2Gl2Z/u/VfbDnNZ3/QbMcLmW+ViUSRn2+yLLsAyaGBC8wHyTslMxyXpktGDtQFHLuDlKVDHtXbBqi0J+gC5+NwqhQ/aZtYbvk4lfzDtOU87+YTFNxh0tDTvml4lMxteyaMQg6avQMWu7oZc41JhBMAJw9RINiXZ/89TBhlCTmnjO6bannDbJ5Qar3/0P5lu8BIkkSibeCp5Db3A7UV/z8sEDc/o91m1D2WFJwQRrtupMtnaysb0yv0oW/rVkHymRVlL/aMm1yFaYB5IqkiQhSUFDOvPFtyex78zVJDNqiG2DjGa0yPRF+dE65CFd3cnANCOVVnVjqUxvZJRbwsZpGv+qquL3DiPDQ9J3pUpBqVfWN2haUb/5 8fRNb6cW y9vULPzDjFjLqYKhvMKtyDgmDowXZbn9vk9MMpzkMR0y4bZnLM/aewAFQubeJUKRKFxez/s56C9aWSIv2b9NmdyXW0c3G8SUcbdNW0qC4pHWw4FqBNlhoZFVN3QVa2BxukfMJyHlSVOt0k55xnf1u6sAI5x9YQUSHPHjbBfYhO7UDBkOmQ7YSUDJJ3hyUcpmo6AB2v0TZW/QOENgJN7cDHePduhU+i5TlTABzJOhmiahBD1PE+BLja1MFdqhBqKnOsQtH1RFDdPuj64ACZ7lNC77RLmyM/LYtdUQ8VwuKYN46FdqQhJy7f3UEc8mR5h+HVFvrHjftzXOFwd3fwIfqY6kTgK/HMQd0nHXOgdiyIzHpmjEE9Q4wg+XYzlIeM+QlwJPVPZAeowV3cnC2TM5RLsahbzRkcTVVGExl 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: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the xfs-qm shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct xfs_quotainfo. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/xfs/xfs_qm.c | 26 +++++++++++++------------- fs/xfs/xfs_qm.h | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index 6abcc34fafd8..8f1216e1efc1 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c @@ -504,8 +504,7 @@ xfs_qm_shrink_scan( struct shrinker *shrink, struct shrink_control *sc) { - struct xfs_quotainfo *qi = container_of(shrink, - struct xfs_quotainfo, qi_shrinker); + struct xfs_quotainfo *qi = shrink->private_data; struct xfs_qm_isolate isol; unsigned long freed; int error; @@ -539,8 +538,7 @@ xfs_qm_shrink_count( struct shrinker *shrink, struct shrink_control *sc) { - struct xfs_quotainfo *qi = container_of(shrink, - struct xfs_quotainfo, qi_shrinker); + struct xfs_quotainfo *qi = shrink->private_data; return list_lru_shrink_count(&qi->qi_lru, sc); } @@ -680,16 +678,18 @@ xfs_qm_init_quotainfo( if (XFS_IS_PQUOTA_ON(mp)) xfs_qm_set_defquota(mp, XFS_DQTYPE_PROJ, qinf); - qinf->qi_shrinker.count_objects = xfs_qm_shrink_count; - qinf->qi_shrinker.scan_objects = xfs_qm_shrink_scan; - qinf->qi_shrinker.seeks = DEFAULT_SEEKS; - qinf->qi_shrinker.flags = SHRINKER_NUMA_AWARE; - - error = register_shrinker(&qinf->qi_shrinker, "xfs-qm:%s", - mp->m_super->s_id); - if (error) + qinf->qi_shrinker = shrinker_alloc(SHRINKER_NUMA_AWARE, "xfs-qm:%s", + mp->m_super->s_id); + if (!qinf->qi_shrinker) goto out_free_inos; + qinf->qi_shrinker->count_objects = xfs_qm_shrink_count; + qinf->qi_shrinker->scan_objects = xfs_qm_shrink_scan; + qinf->qi_shrinker->seeks = DEFAULT_SEEKS; + qinf->qi_shrinker->private_data = qinf; + + shrinker_register(qinf->qi_shrinker); + return 0; out_free_inos: @@ -718,7 +718,7 @@ xfs_qm_destroy_quotainfo( qi = mp->m_quotainfo; ASSERT(qi != NULL); - unregister_shrinker(&qi->qi_shrinker); + shrinker_unregister(qi->qi_shrinker); list_lru_destroy(&qi->qi_lru); xfs_qm_destroy_quotainos(qi); mutex_destroy(&qi->qi_tree_lock); diff --git a/fs/xfs/xfs_qm.h b/fs/xfs/xfs_qm.h index 9683f0457d19..d5c9fc4ba591 100644 --- a/fs/xfs/xfs_qm.h +++ b/fs/xfs/xfs_qm.h @@ -63,7 +63,7 @@ struct xfs_quotainfo { struct xfs_def_quota qi_usr_default; struct xfs_def_quota qi_grp_default; struct xfs_def_quota qi_prj_default; - struct shrinker qi_shrinker; + struct shrinker *qi_shrinker; /* Minimum and maximum quota expiration timestamp values. */ time64_t qi_expiry_min; From patchwork Mon Jul 24 09:43:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323983 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 D82ACC001E0 for ; Mon, 24 Jul 2023 09:52:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 74F386B0083; Mon, 24 Jul 2023 05:52:57 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6FFCD280004; Mon, 24 Jul 2023 05:52:57 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5A008280003; Mon, 24 Jul 2023 05:52:57 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 46C2F6B0083 for ; Mon, 24 Jul 2023 05:52:57 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 027DAA09E6 for ; Mon, 24 Jul 2023 09:52:56 +0000 (UTC) X-FDA: 81046041594.29.D586F7D Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) by imf11.hostedemail.com (Postfix) with ESMTP id AF1D44001E for ; Mon, 24 Jul 2023 09:52:54 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=cIXR9ZHq; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf11.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192374; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=9IhUpcns1yxxzymDv5YqZr0WL/UQLCqdNy71sVoDGM4=; b=T1KyDkbvhbQp9rbrzQ494KVet30zkKwF9A7HCsmLyLvPHXa35epChGUmOMYJELie+/nJV5 yS4JZzsTMSD1b/Jvg/z0reLMgEc+ZPikRl50bfLFgH1Zk0hIjL71zWOV9tOdugmDvRuEMO +ka5oXjn+gBVgaT8qfHoiXIkyqZUZyE= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=cIXR9ZHq; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf11.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192374; a=rsa-sha256; cv=none; b=iN82X2cQv1Fz2s9tsk21corLEngZujA/qIpgX4HLR+Xkq+dmX0dsinlCyDv72d/2RXrK/s 7Zsj3KegoPQDqFmdpRUyvus+BaSejYBsu1r+5N+2kDlzeGDCQWcA7RFyCUv4egd3NWFdlj 2JfxP+VvK/PvMvgdBEEZZCa6VSk9CNE= Received: by mail-pg1-f169.google.com with SMTP id 41be03b00d2f7-55b5a37acb6so327227a12.0 for ; Mon, 24 Jul 2023 02:52:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192374; x=1690797174; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9IhUpcns1yxxzymDv5YqZr0WL/UQLCqdNy71sVoDGM4=; b=cIXR9ZHqZERNOWsb2ZEdIjE0QFxOnKivQ/lQuhg52n2dMXmoDDPFPRWm0FPSeKIyTD 9MEjhkMrHdf4N2tIjeBY0uc5lSquXoXdYhiP9qX8UK1EW+X5crHHo79SFmqf55ARZX3O wyO0k7uy2smy2xR1NzKu5/FuAH29r1/9qws6QCy0a0A/Wi9H8QSjdkQwDRNOZuARuvE0 YOjOyD02m78GscpYM7KCycgCs59mpkV1Df2xA3PyuSplvUE6fAmcpCViKcuW1UFX7dOt MJAdKKXTxsI7gYL1+jy4JOfZOmvmuaNL5149/IaptalG+QZNj6invXd818tFo/LPEoBW HvpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192374; x=1690797174; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9IhUpcns1yxxzymDv5YqZr0WL/UQLCqdNy71sVoDGM4=; b=bHd3RNolYBp4ip0pNaUu5dCxuJNwcwR8vE3xr6cVtDr3z5DFn8X97+Liu/x0cZB0mG tTWEoSvE12lTBZ9t6wzM8cKrghzycwWFGG3fLmbHB/rzMdWKiKT5JCa+FR74aidrm81u Cc1hPcU4zDjZXNAZqJr3BwvSKe22UU5z5ZbcmWWX21QeGggql2Xo4bEf7grhi+60F8Ox 9S8tc7CjO2ae6asbZKbDR90x3b1qtBXQCWgaI8JMvLZmZR71//N4/qWSbMgiFr+Eg0fN 729U79z7tSBUsHpyh6zmpsI9+TAx4frZhmJxqhTSVAigUO1Tonyx0cBaNNcwzRP+zuoy Matw== X-Gm-Message-State: ABy/qLamUh0P9oXvDFWBDERWogWH0U9OjsVB2x1A6ZkhXVAYQVvesdVs Q1TlZjLmXhXXmv20w9ZUQXVHsazStJRXFAhQJLg= X-Google-Smtp-Source: APBJJlHBx7nK5g3+kldzxnSt3u+r3r/G3QW+9x74hGsko9rk5z0xsgiAGVczPyEk+gpBI6IeMpdddg== X-Received: by 2002:a17:902:dad1:b0:1b8:aded:524c with SMTP id q17-20020a170902dad100b001b8aded524cmr12547787plx.1.1690192373829; Mon, 24 Jul 2023 02:52:53 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.52.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:52:53 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 39/47] zsmalloc: dynamically allocate the mm-zspool shrinker Date: Mon, 24 Jul 2023 17:43:46 +0800 Message-Id: <20230724094354.90817-40-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: AF1D44001E X-Stat-Signature: z6dko3ym8w66p8quhjuxcz48pibe3t7i X-Rspam-User: X-HE-Tag: 1690192374-398721 X-HE-Meta: U2FsdGVkX19U5F3VT5o68HeAtLMGG3zNO8tx8VmtM1w3Lj0Q6RLsrw5Y5jqMtSo7d+/cGPTF0rZb9YPACIwR/ee+L+BulyRCAfTXwZw7N4OXr4OCIvtZYO0nkPnzk9rT59Jbl2CsmwiMBJGGuXDIrJULtmJz5h00fCW0QCsm6l044z+9FpTq1rIYTdwCaYhYeJr/YALc0pGAJhSFXanR8sGDYirKoi33fjEdK/j90OxxTyhUY0kyYJb02bW4CfPmkPHwopXgss5Cy6Jyr7dnzlW9OG/w3WbiqdZCLAXAkBCVydMPsDzwFdPmRuEC7h8Fz0NQo+EzMhR1OniBTgPBNtD9WmoqqgkwGBnGfpannH6yLspvOoyy9x4kieZVdunDMosyyDEAEcwTX6x+LhW/POicGsL/obTPKpR7P/Js38RCOC7AJFqYU5GjsTH6+U35oafGgyYXgari9VyS/m7RzVz44wF9Q6bq87Wc/dTx7wGivgft8OYu0m1a1oqQ+gmw5uY49vB6tcPaLCzSW/PHH2zP0jumUH4o72i6HH5DX0306SQNuRa6y3VpDH+lsOcaV8nbE2kKtXtMCvQFtwZS+W56CVxBTf35StW/h+p8UelX2g1kRwUuo0rlJwfWptQnArMb7mo/exCEsKfBLRq0EanEq+cKE+bLVa7kuklBTLMhrwN2mH+jZ0+3NdjE38VSHjfB3FGWYGElsh9CXcYejxA4cexszhwEweWFnbThhzl5Q6ESmab8DC5aJM6UdbpbQrGuzvFj4kxaFLA0MBKoa9cqbLULIZqbKyZv6BSq3zUcfYvHmgshmGo+3Duum8olYBr2tKmdkTTyWo+QVxOFzoNRz1b3TTuz8ppw3q2ZE/06SGbRBpoFuvAXrYRwnweaidWJnaT6ZoCmX/BL1adtVhb24tnQ9DW8w4WTfL7Gkm5WmJRrbEzZj7tStvHf/+VzpxL8XF5tGZLMPlQ69d8 KG42P0BR WyL8lNIBVXJPGmEtKvR9Fc3Nzh7sTlZ9BFAXUZM1UKo90XKoBdyt1Juc7beU6HEiMtzTfPM+5ALZ/FMra9KnQ3rIvKgQzuEgUvlnjNucOL/hpT11cIKWAEyKD+LDX6dV07o0pd53sRpsvblN/g52ux6gJTODLZ6eCpn4Kl3+xMJfVkb5SvUz1SVOfR5QZvRl2gkz50iyzjxsby6DQxqLSaTpUyyGwgmXI6fdMXQ7AfJuS5n3uBanbtGkfUNuCZTll3UDJkz49cu780EX5VeV2bIeAHYFqKEevxZ94ykxnEa44jQbNpFPyK9fbBaIJ28jUSQwjHBCeGfpJkL0Y+RmXs1w/5YmNuYm5a09ogZGKaPyh7/mCamaMFGmPfVggmTS9kRA3lBrXryPZR/1aD95sGv+CFBkRTjcOROUeXrhV3d2CrHoX+OASoZUutlGl/5iyARLlJf0w9gCjkbc= 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: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the mm-zspool shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct zs_pool. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- mm/zsmalloc.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 32f5bc4074df..bbbffe313318 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -229,7 +229,7 @@ struct zs_pool { struct zs_pool_stats stats; /* Compact classes */ - struct shrinker shrinker; + struct shrinker *shrinker; #ifdef CONFIG_ZSMALLOC_STAT struct dentry *stat_dentry; @@ -2082,8 +2082,7 @@ static unsigned long zs_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) { unsigned long pages_freed; - struct zs_pool *pool = container_of(shrinker, struct zs_pool, - shrinker); + struct zs_pool *pool = shrinker->private_data; /* * Compact classes and calculate compaction delta. @@ -2101,8 +2100,7 @@ static unsigned long zs_shrinker_count(struct shrinker *shrinker, int i; struct size_class *class; unsigned long pages_to_free = 0; - struct zs_pool *pool = container_of(shrinker, struct zs_pool, - shrinker); + struct zs_pool *pool = shrinker->private_data; for (i = ZS_SIZE_CLASSES - 1; i >= 0; i--) { class = pool->size_class[i]; @@ -2117,18 +2115,24 @@ static unsigned long zs_shrinker_count(struct shrinker *shrinker, static void zs_unregister_shrinker(struct zs_pool *pool) { - unregister_shrinker(&pool->shrinker); + shrinker_unregister(pool->shrinker); } static int zs_register_shrinker(struct zs_pool *pool) { - pool->shrinker.scan_objects = zs_shrinker_scan; - pool->shrinker.count_objects = zs_shrinker_count; - pool->shrinker.batch = 0; - pool->shrinker.seeks = DEFAULT_SEEKS; + pool->shrinker = shrinker_alloc(0, "mm-zspool:%s", pool->name); + if (!pool->shrinker) + return -ENOMEM; + + pool->shrinker->scan_objects = zs_shrinker_scan; + pool->shrinker->count_objects = zs_shrinker_count; + pool->shrinker->batch = 0; + pool->shrinker->seeks = DEFAULT_SEEKS; + pool->shrinker->private_data = pool; - return register_shrinker(&pool->shrinker, "mm-zspool:%s", - pool->name); + shrinker_register(pool->shrinker); + + return 0; } static int calculate_zspage_chain_size(int class_size) From patchwork Mon Jul 24 09:43:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323984 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 94CB8C001DF for ; Mon, 24 Jul 2023 09:53:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3A659900003; Mon, 24 Jul 2023 05:53:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3568C6B0088; Mon, 24 Jul 2023 05:53:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1F70E900003; Mon, 24 Jul 2023 05:53:09 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 0EF9C6B0087 for ; Mon, 24 Jul 2023 05:53:09 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id D69541C97E2 for ; Mon, 24 Jul 2023 09:53:08 +0000 (UTC) X-FDA: 81046042056.24.C34AC7E Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) by imf18.hostedemail.com (Postfix) with ESMTP id 05C2F1C0002 for ; Mon, 24 Jul 2023 09:53:06 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="S2U/TnIA"; spf=pass (imf18.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.174 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192387; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=5g6npGIA+Om/kUVtGYVOvbagC3ZLyiKj4WIBQXCM8VE=; b=jwOvSISNWhE4aKEYLlbVKCMrlgeGySgnD83hHUXzB5xXkLjD/U21O9VcMFTPyi11jcCDGi LBCwjQr87UKpk1q76IG79HvX1oeFYQxkvV14LYRVmpg6sAwihHOt0m3qIw+RJ/rMeqRm0N ilLgbqlOZcWoOQtxVhOUM6xtue/1NbU= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="S2U/TnIA"; spf=pass (imf18.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.174 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192387; a=rsa-sha256; cv=none; b=ecfeHAYZe6HZBbm53Y/km1guQM6mOc2lE0NPToiwB3LKI/v7wHfUX2NUYFYn0ouTMCPmH4 l+9bWVTfRDCMinMwYd9a8XP21R39LCrhgCYWTJAqRaki+PlUCUQiTHgZF6n4m0vPc2tdnp lkTSE/5tTtybe2seB/d5Jq1sUeuU/uE= Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-1b8c364ad3bso8867295ad.1 for ; Mon, 24 Jul 2023 02:53:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192386; x=1690797186; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5g6npGIA+Om/kUVtGYVOvbagC3ZLyiKj4WIBQXCM8VE=; b=S2U/TnIA3BvgIyDkI8CsZ/yGFHKz1H8MS/f3pGlXtajPbbIppzU4ekfHL7vbq4g/ee nkf99zZjxk8j/nQjCgbgKMXC9ObMD83Ww5ZyYdUYjsuItMzxm4Wsn6u5uqxvVJ5NZt73 oOt/92HNqWFmybRGcw0zXn+oMfRVMEsr/DoqAZVnk2ZNsy7sblyXn+NZzmRKVz6cNdRV wWtdi5bD+tAEC91We9COVwQH6n4HnMN8tXvp4wHRFfihGnGQMhJey9Jy141oS1MYMhJE j+pvADu7PynqQJvb+d3VqI6dVhi2sWMN+NPa+E6Stx9k9uciZAdzPwJ0PeFQ9YZYARAb 3C3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192386; x=1690797186; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5g6npGIA+Om/kUVtGYVOvbagC3ZLyiKj4WIBQXCM8VE=; b=FZ+QzLqISUDmmtQe8B/2gYJOKFirAC8t9HZazvZHtIBkgUp2kEIQWuZZ/LXlFY1WA+ Lam2eFhGs75HyGsfp/8o84LsnKAVcn24E4Q2uaK7/K+WX8CH7UbMIO8jgt4VjHvf0BeN 7DzNk41d9/pzrw/zW1KtwkzzgsmgGPRnWEwdO7YeUFvtu3rOnyevuFJFsoWeBOUx8QK9 8Z/qQZbxi9HFNdTYKavYt70mutH1+NKxCidVH8oPPCCn+Lpu6yoDEJe7hKLGJ7pTLEHS qxsSwQVcdd3/aJRKOr2euFhYc8CaTo7UZmtJjLR+hgRuPUx6aGHSXqErz8Svur2abFSo oIGw== X-Gm-Message-State: ABy/qLaX7eH+fTRULOb46zdgFzt+Ni/Sv0rdNdOiuzxe9Lzz12P9luj2 puSefnRVWTbCUOCMMQqfx8r0Zw== X-Google-Smtp-Source: APBJJlEx0UJtyjeglsteyzH1DFG53jEzFogOJaFJ6A1FWxhCOYZ9xoBbTcFIdBRvvwYlgD9HKyyPmg== X-Received: by 2002:a17:902:ce92:b0:1b8:1591:9f81 with SMTP id f18-20020a170902ce9200b001b815919f81mr12186048plg.4.1690192385749; Mon, 24 Jul 2023 02:53:05 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.52.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:53:05 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 40/47] fs: super: dynamically allocate the s_shrink Date: Mon, 24 Jul 2023 17:43:47 +0800 Message-Id: <20230724094354.90817-41-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 05C2F1C0002 X-Rspam-User: X-Stat-Signature: 3bjfcy1txu1pig5nas7zyjigdyp8fm8p X-Rspamd-Server: rspam01 X-HE-Tag: 1690192386-705044 X-HE-Meta: U2FsdGVkX18P2YUzwfEwcOXiFvZ6n63dynEOa4u9SthitFLj/bh+XqDqxpyjK/Pea4QlHQ2con87mfrDJPby1y2FdKYKOIna+qwnOYhreyuM2JQ6avJ2mwMcOtKcHiJb7Q9uu8CSEye0C/3PMLmMxi6QyIaJWVY2/qoaKRLOVhII3TQtAStz8YRwQqzIwvYjgpshTF6gsNEhIFRwcKWwd6NxHfmM4B4jrs6ISnSwT9foVl3QSZ3XssmawAv64df7e9THxfl/lC1nKpZX0EsLbSz+PY2ewaWdCAVx16fD35de0hw097OY1CALcw6/HaBSujHSDRD0x8d0nZdPpe/jCligCaZyg3zHXoBel3MbuEqpph8mMpNUMIGRiyi7niaWLK71eIu8q5MDtax8r60HavzLez6dX0G2TT9HY6O9sUa+lfpyTjjjCVY7miYMptzPxu/Zxr06QYeElrcdYwTEYJPjLAe3v8SG1PyJXmJrfzTwUqi4cFJ9si8vgvWjcg2AmCRDZKihmyWcZDdXFwGblO1hsn47N9tFTxvGnG07hDpHogW69Rr0RTAQ9mwB3SKahqawDVC7w5KXyYhdxE6OnEvef6sb7+KOBAanPv9df3uCs5j8V5Ff1Xkj4LgImYEcmURxcmKZNmJJxccFkui420U9cRhDzao3bPij+NA+5t/QQtjqZRdH3XyKS0I/PSAFUQwqBtDuTBESI/NTfNpxohaEXXji1jV43rKuKZWK2bxQKavo/8MOiMdsrnNDZJ/GlZTb2pyhSxP+WwIs0gQxBaeqwLjBvWt63gbPi2X9Y3GGnUn3/8/G0y7miZsQ8dCFFJk1MtTOKJhzBi2aM3E48CeXiQfA1sO9NOETK5lkC8JDalnh+CLmNl7nJW5g/sLGAjgY+cRORSlwXluiy2GKbppZHAvW7fW4odvPBk1k3TnKwMeIPzcvvCZkxILQv6f53cDfxPbTvMO20mWDmuS /redMY88 AJWl2WLdBBId1gbEGIVZG9IUzy+TuPYWyM8Rv/rYrhl73bfaNSSE5NFc5EIyx92Wa4fxxuTHThPX09Dg2N55CjQW1QwMLDRRBC0MUBgZ1oAEuGAiEiBkhTEgW5k3Of++S/NQhZqmhjkyLzyZBK5JdT9bgFbBJCHjsLvJ0oeQQHQ2mQrO8636/Znu+PrT38+l/Ke8xBxKx9Vj78C4Hu5zZnTnfYUzEKHw90o3v9gCQqLXVXDLUanxZE3gozZPy5inveGwQnWjedRdxJx8CO9Bb9owuv63QAtlgzd4Nz7k3dUJFAbDkeZO0wMvAXEPqYYy8vgZrcXCnl73UYjs1xUq/Itr5mds0nPOOjuvHM8p1wVDB2h8aK/Zbfn8OzohXFv9iaSUxrRz1Wm3mkuxqzhHN0sEtSciBVYE8gqBzNqCNLnOUOQBLXJt8xu4lv8nASKn0eHtqYh9JvnHUoq8PaZjeNBoR9w== 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: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the s_shrink, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct super_block. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/btrfs/super.c | 2 +- fs/kernfs/mount.c | 2 +- fs/proc/root.c | 2 +- fs/super.c | 37 +++++++++++++++++++++---------------- include/linux/fs.h | 2 +- 5 files changed, 25 insertions(+), 20 deletions(-) diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index f1dd172d8d5b..fad4ded26c80 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -1513,7 +1513,7 @@ static struct dentry *btrfs_mount_root(struct file_system_type *fs_type, error = -EBUSY; } else { snprintf(s->s_id, sizeof(s->s_id), "%pg", bdev); - shrinker_debugfs_rename(&s->s_shrink, "sb-%s:%s", fs_type->name, + shrinker_debugfs_rename(s->s_shrink, "sb-%s:%s", fs_type->name, s->s_id); btrfs_sb(s)->bdev_holder = fs_type; error = btrfs_fill_super(s, fs_devices, data); diff --git a/fs/kernfs/mount.c b/fs/kernfs/mount.c index d49606accb07..2657ff1181f1 100644 --- a/fs/kernfs/mount.c +++ b/fs/kernfs/mount.c @@ -256,7 +256,7 @@ static int kernfs_fill_super(struct super_block *sb, struct kernfs_fs_context *k sb->s_time_gran = 1; /* sysfs dentries and inodes don't require IO to create */ - sb->s_shrink.seeks = 0; + sb->s_shrink->seeks = 0; /* get root inode, initialize and unlock it */ down_read(&kf_root->kernfs_rwsem); diff --git a/fs/proc/root.c b/fs/proc/root.c index a86e65a608da..22b78b28b477 100644 --- a/fs/proc/root.c +++ b/fs/proc/root.c @@ -188,7 +188,7 @@ static int proc_fill_super(struct super_block *s, struct fs_context *fc) s->s_stack_depth = FILESYSTEM_MAX_STACK_DEPTH; /* procfs dentries and inodes don't require IO to create */ - s->s_shrink.seeks = 0; + s->s_shrink->seeks = 0; pde_get(&proc_root); root_inode = proc_get_inode(s, &proc_root); diff --git a/fs/super.c b/fs/super.c index e781226e2880..04643fd80886 100644 --- a/fs/super.c +++ b/fs/super.c @@ -67,7 +67,7 @@ static unsigned long super_cache_scan(struct shrinker *shrink, long dentries; long inodes; - sb = container_of(shrink, struct super_block, s_shrink); + sb = shrink->private_data; /* * Deadlock avoidance. We may hold various FS locks, and we don't want @@ -120,7 +120,7 @@ static unsigned long super_cache_count(struct shrinker *shrink, struct super_block *sb; long total_objects = 0; - sb = container_of(shrink, struct super_block, s_shrink); + sb = shrink->private_data; /* * We don't call trylock_super() here as it is a scalability bottleneck, @@ -182,7 +182,8 @@ static void destroy_unused_super(struct super_block *s) security_sb_free(s); put_user_ns(s->s_user_ns); kfree(s->s_subtype); - free_prealloced_shrinker(&s->s_shrink); + if (s->s_shrink) + shrinker_free_non_registered(s->s_shrink); /* no delays needed */ destroy_super_work(&s->destroy_work); } @@ -259,16 +260,20 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags, s->s_time_min = TIME64_MIN; s->s_time_max = TIME64_MAX; - s->s_shrink.seeks = DEFAULT_SEEKS; - s->s_shrink.scan_objects = super_cache_scan; - s->s_shrink.count_objects = super_cache_count; - s->s_shrink.batch = 1024; - s->s_shrink.flags = SHRINKER_NUMA_AWARE | SHRINKER_MEMCG_AWARE; - if (prealloc_shrinker(&s->s_shrink, "sb-%s", type->name)) + s->s_shrink = shrinker_alloc(SHRINKER_NUMA_AWARE | SHRINKER_MEMCG_AWARE, + "sb-%s", type->name); + if (!s->s_shrink) goto fail; - if (list_lru_init_memcg(&s->s_dentry_lru, &s->s_shrink)) + + s->s_shrink->seeks = DEFAULT_SEEKS; + s->s_shrink->scan_objects = super_cache_scan; + s->s_shrink->count_objects = super_cache_count; + s->s_shrink->batch = 1024; + s->s_shrink->private_data = s; + + if (list_lru_init_memcg(&s->s_dentry_lru, s->s_shrink)) goto fail; - if (list_lru_init_memcg(&s->s_inode_lru, &s->s_shrink)) + if (list_lru_init_memcg(&s->s_inode_lru, s->s_shrink)) goto fail; return s; @@ -326,7 +331,7 @@ void deactivate_locked_super(struct super_block *s) { struct file_system_type *fs = s->s_type; if (atomic_dec_and_test(&s->s_active)) { - unregister_shrinker(&s->s_shrink); + shrinker_unregister(s->s_shrink); fs->kill_sb(s); /* @@ -599,7 +604,7 @@ struct super_block *sget_fc(struct fs_context *fc, hlist_add_head(&s->s_instances, &s->s_type->fs_supers); spin_unlock(&sb_lock); get_filesystem(s->s_type); - register_shrinker_prepared(&s->s_shrink); + shrinker_register(s->s_shrink); return s; share_extant_sb: @@ -678,7 +683,7 @@ struct super_block *sget(struct file_system_type *type, hlist_add_head(&s->s_instances, &type->fs_supers); spin_unlock(&sb_lock); get_filesystem(type); - register_shrinker_prepared(&s->s_shrink); + shrinker_register(s->s_shrink); return s; } EXPORT_SYMBOL(sget); @@ -1312,7 +1317,7 @@ int get_tree_bdev(struct fs_context *fc, down_write(&s->s_umount); } else { snprintf(s->s_id, sizeof(s->s_id), "%pg", bdev); - shrinker_debugfs_rename(&s->s_shrink, "sb-%s:%s", + shrinker_debugfs_rename(s->s_shrink, "sb-%s:%s", fc->fs_type->name, s->s_id); sb_set_blocksize(s, block_size(bdev)); error = fill_super(s, fc); @@ -1385,7 +1390,7 @@ struct dentry *mount_bdev(struct file_system_type *fs_type, down_write(&s->s_umount); } else { snprintf(s->s_id, sizeof(s->s_id), "%pg", bdev); - shrinker_debugfs_rename(&s->s_shrink, "sb-%s:%s", + shrinker_debugfs_rename(s->s_shrink, "sb-%s:%s", fs_type->name, s->s_id); sb_set_blocksize(s, block_size(bdev)); error = fill_super(s, data, flags & SB_SILENT ? 1 : 0); diff --git a/include/linux/fs.h b/include/linux/fs.h index b4dca987a5d8..92748fc368b2 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -1231,7 +1231,7 @@ struct super_block { const struct dentry_operations *s_d_op; /* default d_op for dentries */ - struct shrinker s_shrink; /* per-sb shrinker handle */ + struct shrinker *s_shrink; /* per-sb shrinker handle */ /* Number of inodes with nlink == 0 but still referenced */ atomic_long_t s_remove_count; From patchwork Mon Jul 24 09:43:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323985 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 4C35EC001DF for ; Mon, 24 Jul 2023 09:53:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E5492900004; Mon, 24 Jul 2023 05:53:20 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E04DB6B0089; Mon, 24 Jul 2023 05:53:20 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CA5B4900004; Mon, 24 Jul 2023 05:53:20 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id B9D5D6B0088 for ; Mon, 24 Jul 2023 05:53:20 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 8BE04160891 for ; Mon, 24 Jul 2023 09:53:20 +0000 (UTC) X-FDA: 81046042560.06.A30B111 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) by imf30.hostedemail.com (Postfix) with ESMTP id AE9148000A for ; Mon, 24 Jul 2023 09:53:18 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="K/Vgei3K"; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf30.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.171 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192398; a=rsa-sha256; cv=none; b=NY+Zgwpo4V0AthXm/mjMwa1aeqLMxSt0DXpO3UuNsjJO7ZG8KSU/TWUxUVaTK0ZpiM146r wVZaVM5hZfQGIuTq3Cs8B9dck4swEp1oSEQr50xw6g2Y6/w3d6k62xnBMMIbnlbQrzSOB1 a9IkuNwtwmI3azNb0qWq7AGevKz7zU0= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="K/Vgei3K"; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf30.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.171 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192398; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Au95b59SE4lLb756TrNLGg7HOLC+u2MQAxdqgGCdIqg=; b=Yfi/4BtwXB39Q6TK5VrPl0+PB2dUI4VI5IfcmVL0BVhV6ymSIiUMTUVvhHJicI9UL5vKgZ XxYrFCiiXT6hWXQLPx4gn7zQqumNhrxHje5gz/dYuq1EOKVyvWBSxotm2Y+fVXrDS8hTcs EcqnT5qI+y2tbDwFQUeHxcC4ouTES/c= Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-1bba9539a23so650635ad.1 for ; Mon, 24 Jul 2023 02:53:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192397; x=1690797197; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Au95b59SE4lLb756TrNLGg7HOLC+u2MQAxdqgGCdIqg=; b=K/Vgei3KlPsrXtA3sEF6+yHtbBxZ+2xZx/x+lBMlIuJBg5AnMueb22TLJhFLNiGhrq XJ8rDff4cQLwPHBXyitYUyzJQ81uMlYuNrno/Yl2XPJ7mTqFwwu7vFn1NdgAzfOHqVdn II5+ILOauNsftf4HvRNlKd/NnPVQUMPzyMjlj4GtICaEBVuEkL6UBECCLrorLxVLl8kL HJxsj9ZJ8Jk/tR9LKuJiVmnd+Nmc0TutmJdqhqBde7M5Kr8oXqnp3FCO2erCLDx6b0DB 5WEy+sbIcGffcYABxBhgHvq3vNRdUv2ziojVQWEW08nOSj8tZ15Bpl4cXIKs8nuuGoel I/Kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192397; x=1690797197; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Au95b59SE4lLb756TrNLGg7HOLC+u2MQAxdqgGCdIqg=; b=lEqkh9RJFcE6p0XjG3C2yB1MquwlGwZbNb/gBSHwsxhqOeKrI64f83cguBngCC82JM 4Yu+YNNuLvKUfvZOCm+eRpRORD0xS85yB/bM8H/HXvNfnwQDF9QnIuhvy8tvs2oH9aS9 kh+fKo7aT3JK1l3MnlTpZw3qdhVJBRPqqZREjIX14Gi7DHF3uSlsLXAYA8EsSLnrOsmA Xsb1DevhgeXx0Q6AjNNYs3/53+Emz4LNseQqKZ+yGlJ1nmsafQXzUSb6LxdALO3k1bvh cuHzQxPH5lKSDtSjTWVB1u/zCEb+tVHfGViPeeuNKtibzQ/XSmbqsP9ffMuteL+tmCp9 qFrA== X-Gm-Message-State: ABy/qLYZeHD4OhRr+XtYkem+GkfsWVMB+vGS+wAqGPrLkrtegVm7SkGJ QXisRNGxnv/luBtwqDOiV+DPfg== X-Google-Smtp-Source: APBJJlHskHW5r0IhvtSXxnBFmiqfwZejMZbjxfsN1oQLUQ3K2J0HHv3xxnfIpcyIc5BfLUakmxAnBw== X-Received: by 2002:a17:902:e802:b0:1b3:d4bb:3515 with SMTP id u2-20020a170902e80200b001b3d4bb3515mr12393256plg.0.1690192397637; Mon, 24 Jul 2023 02:53:17 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.53.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:53:17 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 41/47] mm: shrinker: remove old APIs Date: Mon, 24 Jul 2023 17:43:48 +0800 Message-Id: <20230724094354.90817-42-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: AE9148000A X-Stat-Signature: hjscqq118a3dxoze48r3buxxrewsnq9m X-HE-Tag: 1690192398-5066 X-HE-Meta: U2FsdGVkX19eQimr5IydB5hXFyBnWxOHZWSjgrKYiSXxCxsPBHd1lfsNWH2+zSshQx9pDePnO20bNNhxtNoJG8w6C2xn0WDXKlCIX/M7UxiP16goCnQ2O2MJDC4/3CpMKTurUF4c9aT1W4oMstvTaOUuCtfQU7aWMRJdYXfR+cRjIO596pwlXk+6m/eONfzzQMw9b2Ep2ZgyTKQtA0d75C+HCPwJ+JmuDJfrleN/CJCWQFtUNUIvolbUjhwwlNmiysGqPJU69jQTfOqn9Jz1qagiZFDWbV2lUvQoLD6Cgmx25K7Vx8+gSuXCfihQhbPsuEw/zho6zIa1ttcxpMBgWG/JPTkk2rlMaNDRiVion0j+eCRALW3p2oZ/hiILWPv6WCrZht8r0nO2/NroTnoTpfO6tlL8HQwKI1aRDLxstrjgOB1F4E2Z1vt/LnQtVXD+GwYoe+VcJhe2MeiO5gcOi9DRGRwRUAs6Bved01AEdogT/lWkCdyYcllvLlqJBXNIeHM8NQeS1226EsfWtn5A+qLOIYsGfFHCRsreEm+Bg517kS57nevPxagYW+bxkN3dknWQmlF026i+hFdJGstBK5Qy9R9uexf5APR2Iw8rqKas9K700nltdieANm+WAAhQkI6pF25HmZtQIxIjoWrkrO+T13NvZm4AtaV9m6z+U5jXMLpNaCN9ISwTZhXaXNmwUX7eVQy1bvDmxKptevc3h0N+u9YFH2KYEpuv4IZvkAYzeyJV2hbF5bCVNRIEaV+UaWBT6TpTrC98L7OLjub8iFt2K7gDID16WmYJuji4mknxQ92iMkBa3ElusoxAZZDDW5iFDEBUgW3cQHxK/PzaqnSftsC3IHM38C9vYFxc2EqJ72XQw3fFs8wJm2hTeCBpg7fFExSIYc8eFDpQauJeeBoME5wapl/oEyQXNkA6OK+PC0yN2aFv/IoDjQWBkUffJkXzerH+QPuSJ9ALkAj XIvIbMJV IrKgZ+Waz/FfjEmLEBQHgtwyXefzQGsZwzhFqUARyWbF+Ssd8nCLEMgtW8DSlNlE8b/Nw9KL6RbBlvGjzQNBidr6H/vcR24r7WRro1HyPp5644vu8q0CZv5T/pr2bncpOXqf7gpeJJq5Ptm0D70oUjlyR9SZJjJMtR17JZlAfJy68c91sD9PKhBOeRpHdTn0nuA7TAtmZcAkxdG2BrVggs6PxJbKRMEkdV2GBb0H5JATWjgL9VIZgN1VT2Ygvc1azRnYzUgVmxi70LGKgMlWn2G5sZz9Sijyvbv5Wpkvu+43oQpNfqZMpuziBEL6nfWUVYthvgfCLHxoeEMGyufo0dxbAbmPZIdjlnHCQvaTU9Sb8OZIaT2ISJ9hSn3Zv6wOM08hYhHL8go5kAflsxGMk+YQzJHp04uLeZrf+ 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: Now no users are using the old APIs, just remove them. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- include/linux/shrinker.h | 7 -- mm/shrinker.c | 143 --------------------------------------- 2 files changed, 150 deletions(-) diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index 296f5e163861..e464b4e9be0e 100644 --- a/include/linux/shrinker.h +++ b/include/linux/shrinker.h @@ -105,13 +105,6 @@ void shrinker_free_non_registered(struct shrinker *shrinker); void shrinker_register(struct shrinker *shrinker); void shrinker_unregister(struct shrinker *shrinker); -extern int __printf(2, 3) prealloc_shrinker(struct shrinker *shrinker, - const char *fmt, ...); -extern void register_shrinker_prepared(struct shrinker *shrinker); -extern int __printf(2, 3) register_shrinker(struct shrinker *shrinker, - const char *fmt, ...); -extern void unregister_shrinker(struct shrinker *shrinker); -extern void free_prealloced_shrinker(struct shrinker *shrinker); extern void synchronize_shrinkers(void); #ifdef CONFIG_SHRINKER_DEBUG diff --git a/mm/shrinker.c b/mm/shrinker.c index d820e4cc5806..2f3635ad1b45 100644 --- a/mm/shrinker.c +++ b/mm/shrinker.c @@ -661,149 +661,6 @@ void shrinker_unregister(struct shrinker *shrinker) } EXPORT_SYMBOL(shrinker_unregister); -/* - * Add a shrinker callback to be called from the vm. - */ -static int __prealloc_shrinker(struct shrinker *shrinker) -{ - unsigned int size; - int err; - - if (shrinker->flags & SHRINKER_MEMCG_AWARE) { - err = prealloc_memcg_shrinker(shrinker); - if (err != -ENOSYS) - return err; - - shrinker->flags &= ~SHRINKER_MEMCG_AWARE; - } - - size = sizeof(*shrinker->nr_deferred); - if (shrinker->flags & SHRINKER_NUMA_AWARE) - size *= nr_node_ids; - - shrinker->nr_deferred = kzalloc(size, GFP_KERNEL); - if (!shrinker->nr_deferred) - return -ENOMEM; - - return 0; -} - -#ifdef CONFIG_SHRINKER_DEBUG -int prealloc_shrinker(struct shrinker *shrinker, const char *fmt, ...) -{ - va_list ap; - int err; - - va_start(ap, fmt); - shrinker->name = kvasprintf_const(GFP_KERNEL, fmt, ap); - va_end(ap); - if (!shrinker->name) - return -ENOMEM; - - err = __prealloc_shrinker(shrinker); - if (err) { - kfree_const(shrinker->name); - shrinker->name = NULL; - } - - return err; -} -#else -int prealloc_shrinker(struct shrinker *shrinker, const char *fmt, ...) -{ - return __prealloc_shrinker(shrinker); -} -#endif - -void free_prealloced_shrinker(struct shrinker *shrinker) -{ -#ifdef CONFIG_SHRINKER_DEBUG - kfree_const(shrinker->name); - shrinker->name = NULL; -#endif - if (shrinker->flags & SHRINKER_MEMCG_AWARE) { - down_write(&shrinker_rwsem); - unregister_memcg_shrinker(shrinker); - up_write(&shrinker_rwsem); - return; - } - - kfree(shrinker->nr_deferred); - shrinker->nr_deferred = NULL; -} - -void register_shrinker_prepared(struct shrinker *shrinker) -{ - down_write(&shrinker_rwsem); - list_add_tail(&shrinker->list, &shrinker_list); - shrinker->flags |= SHRINKER_REGISTERED; - shrinker_debugfs_add(shrinker); - up_write(&shrinker_rwsem); -} - -static int __register_shrinker(struct shrinker *shrinker) -{ - int err = __prealloc_shrinker(shrinker); - - if (err) - return err; - register_shrinker_prepared(shrinker); - return 0; -} - -#ifdef CONFIG_SHRINKER_DEBUG -int register_shrinker(struct shrinker *shrinker, const char *fmt, ...) -{ - va_list ap; - int err; - - va_start(ap, fmt); - shrinker->name = kvasprintf_const(GFP_KERNEL, fmt, ap); - va_end(ap); - if (!shrinker->name) - return -ENOMEM; - - err = __register_shrinker(shrinker); - if (err) { - kfree_const(shrinker->name); - shrinker->name = NULL; - } - return err; -} -#else -int register_shrinker(struct shrinker *shrinker, const char *fmt, ...) -{ - return __register_shrinker(shrinker); -} -#endif -EXPORT_SYMBOL(register_shrinker); - -/* - * Remove one - */ -void unregister_shrinker(struct shrinker *shrinker) -{ - struct dentry *debugfs_entry; - int debugfs_id; - - if (!(shrinker->flags & SHRINKER_REGISTERED)) - return; - - down_write(&shrinker_rwsem); - list_del(&shrinker->list); - shrinker->flags &= ~SHRINKER_REGISTERED; - if (shrinker->flags & SHRINKER_MEMCG_AWARE) - unregister_memcg_shrinker(shrinker); - debugfs_entry = shrinker_debugfs_detach(shrinker, &debugfs_id); - up_write(&shrinker_rwsem); - - shrinker_debugfs_remove(debugfs_entry, debugfs_id); - - kfree(shrinker->nr_deferred); - shrinker->nr_deferred = NULL; -} -EXPORT_SYMBOL(unregister_shrinker); - /** * synchronize_shrinkers - Wait for all running shrinkers to complete. * From patchwork Mon Jul 24 09:43:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323986 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 137B5C0015E for ; Mon, 24 Jul 2023 09:53:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A35AC6B0089; Mon, 24 Jul 2023 05:53:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9E651280004; Mon, 24 Jul 2023 05:53:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 88739280003; Mon, 24 Jul 2023 05:53:32 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 77B2A6B0089 for ; Mon, 24 Jul 2023 05:53:32 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 586911C968F for ; Mon, 24 Jul 2023 09:53:32 +0000 (UTC) X-FDA: 81046043064.15.D0CD870 Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) by imf07.hostedemail.com (Postfix) with ESMTP id 8001640013 for ; Mon, 24 Jul 2023 09:53:30 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=eiUPUGpd; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf07.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.210.177 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192410; a=rsa-sha256; cv=none; b=ZDtmbMImIDZao9F2kUAn67UX1rQhyucpb3giC7vcrL5yMZ4q3jKhb8+BfvqqhizFAc3eEU 7sTb0xakLpvChonbdqZMMD6DRKch8hcvtvLNkZtW3u2mmqOyXQ8XZvCTojiuSlPAS6VhTS iqz2hzYp7LHNu/mdhOwznvfy8vwL5Pg= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=eiUPUGpd; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf07.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.210.177 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192410; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=tgz3Agis5n4s/WxjwmGNRU8p70ZOSlVCE9Y6IFYv5Fc=; b=Vf++8FzFG/wIANEI6o23FCG69XUWBMRHORTcjmFHlmtQnp9bEESz8FbmpkY4EhErfJgsDe L5mL/9GgFCDIB7SSq7u7ZD5VsQX/qhN4fkQBH4xtaih3n5sjQOrFfOghVR/ApuSgxwSd/V yaEj5QS5tOyMXnuwyGiB0yzsSO95xGM= Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-682eef7d752so1028865b3a.0 for ; Mon, 24 Jul 2023 02:53:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192409; x=1690797209; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=tgz3Agis5n4s/WxjwmGNRU8p70ZOSlVCE9Y6IFYv5Fc=; b=eiUPUGpded6z/EEpZ8kcBg2OU6CGo1gYbzczLwywLM+tiNX7NfxZ/UX56b+ECXWGVH v0+fBr9ZR2zpMAlXtEMsjJ0CP0T6ghJOZlIp4XvJRpj8mBoc0pWtxFqlQOAd5pU8ho3C /ZF88/qParVm3q/t2C5C9G6TKSIcK6iTaJcqE2ic3WbFUt7IFInWBxxki/5fOt9V+TbB A3A3KxQQy8HhELpvIDxSXQyR+9LFYaXi6y1sjrAoM0XnjPHdW4Yjr/fiDUUV6qlqOpNO kBdOBkmF9qj5RcGgCCau8brZhsZui1mwOYvY6Yl7YB6A8sVwNtEK8JeAfRs7jSuBenIO iXvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192409; x=1690797209; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tgz3Agis5n4s/WxjwmGNRU8p70ZOSlVCE9Y6IFYv5Fc=; b=aXTnXGs+yHTW0zQHbARcqBt+vVFQJI0c2q/PzH7yOmYtSeZRO1kl4IyRhGb9nXQUQ8 5wU4SmhPNNf9BF24LgJ5YjHrJn6jmZItCMa1miWoeCmGPIXADUXdWexpZgTDPKHgEVWd wlNl1X4sOWNuWtX53lgAmy75xS7nTy8BNbkqWLWEzfoPW8xNdF/FMDetHRD09hP4g3MY VnrhQgIWcHnzKmYXk6BecWhS9LbGmx60BT9afAo6IEMIdA3UCtPqB3m8cpQs8E1iLt7s C8Ubt5h4v8gy2y5SsK16pMwtr9WPLUWRMEk8tme1O7LgP/sREuFw090+ZT/BygiN/MLf FFWA== X-Gm-Message-State: ABy/qLYX05SC3awTaaOw68eWlatmdBcFGWNPiOQgf+IlcM7tkWNrfNSA CJXwLaEcyoTM80CKkl93QBoOkg== X-Google-Smtp-Source: APBJJlGQECD+YmQyidx3CbYp8mtos2ukz3b+adApuBRwpx+yQP4R50i+1wYRdDRgYwf/0cvAmnpMMg== X-Received: by 2002:a17:902:f681:b0:1b8:a469:53d8 with SMTP id l1-20020a170902f68100b001b8a46953d8mr12732513plg.0.1690192409468; Mon, 24 Jul 2023 02:53:29 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.53.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:53:29 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 42/47] drm/ttm: introduce pool_shrink_rwsem Date: Mon, 24 Jul 2023 17:43:49 +0800 Message-Id: <20230724094354.90817-43-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 8001640013 X-Stat-Signature: bwzqt133xjbhbsedghjeh1dwy6d5s5ix X-HE-Tag: 1690192410-166604 X-HE-Meta: U2FsdGVkX1+w6M/cKe1ptTTTAdy2ug/P+vgdFIkuabh0W4PXrukoVQbhiHh7MQov/cnLdNPXFmRc096lDOngZHraqbb5uPq/XKBV5O68hsEdzsRnAy+siJnjSpelyk+KIXY87YisCAWANJzyTfb29PRqFrSPK1wDaFZZ8s3aFzBMZtE3f5ynQ4sFSqRseByJcRO6HmjyXzJvgVW4Vz4VEOQgrn/l4+1J3jCtfYvGyHrXkA89IgHwf2cwAeJ6V159r3+/i2WuvmKV0+IBkco07DMBj7WNwP/V+9j86/cA9TNQsYeUlF8drhAROVZLIEm+bdS38mumiQhUNsd2idhbwco+G+6EKpnc1L793r/smFRKaz5mWHXJ1l63+Tier/HMKjnCf7miJdSB4gzGuHrOO/2jfoNQHOCk5q42dMwL0ot9RzSxAK172u7obRaY6yYXshYy8Oh57qQBJ8XmFVQBfW3jhNResWUmFBbIgH4RqPMxLe7JKKrng/EG9++byqveEdWYhKwid7kbn+FDPDLrQPbC7QMvlkKnVhoKk7eingyBslLDg86ewdu3Tf7kA4ZnW5HjYWxY4zeEkmgXil7ZGgEwOLhv3bdeG1chsXahMAyU3xWsjvu5yrKf5Khzs3Y/l5J3S1GsPEinXprnVEEdsVbOu3nQLQBVHOoIs+9eU0pVarBDR4YByB0dxgYUMpFim0UsclTI0jL98JQ8d7EA/H/EHcXiN2MFTqTpGvD8DPZTKDr+sr7IRgAdSO1QrURdEAUZOzUlTQD0ji9T6olAhrcaAnWi4AnJiRkDuQYNnqNZI9C+XgdoVko/bc2LEzpfvy4nSROU+Mo29v3S6a/zF/TM2gWDRdGdXP0Y6RGrXcE5z/ThagVb56ZHh47sGe/jck5EMzZOzI1KMNFgXn+EY+keRH7IPsg8ULflaZRz1GvH3g4C99E2biwEmFNEtLOXN54VYsJpUXDkDn6rvNe YyJAgHA3 iFzFJX6XD700H7jaMLwSgwbxE4+07rOpgy40PFPvZ6lClDqk6XV6BOKPZnf3GH5UMRUcm32dufoZKUkiigZ8xh5TlIeEYoJ/biQsm9JYt52lpWpnLQeMHoMEJFxN2hoipxdks4eT3C5Nt8hrXENnc3DemMxw0esKSAZOPGTvMeH/mxa+l88QmpHOki+r1e7TB53GrY0f5K2DVl9cOBkl23rlWh81XUvSVmNGil2iXveqsfC0AAmREGBA/1T1KJ0mrVAFhRivpT9v4yhOdcLup9TLdAoRP+Znc7Ona56F6v5JBhwlPMnjlR8qGgJiHW451+H3aoobE1fKfPYmSJQIrDiz20nIfVu/8Wvc9MdQLqJqQ+4N6dcE8Db80uW3G6oKu2JzuzphMzB5rFcvQr0ZGWEsZkgTRQHVpb9m+YASdahanyhpHnanf7k+2eVlEqRR0OQrR0zhtt0XR65xmzrbB23Ilgg== 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: Currently, the synchronize_shrinkers() is only used by TTM pool. It only requires that no shrinkers run in parallel. After we use RCU+refcount method to implement the lockless slab shrink, we can not use shrinker_rwsem or synchronize_rcu() to guarantee that all shrinker invocations have seen an update before freeing memory. So we introduce a new pool_shrink_rwsem to implement a private synchronize_shrinkers(), so as to achieve the same purpose. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/gpu/drm/ttm/ttm_pool.c | 15 +++++++++++++++ include/linux/shrinker.h | 2 -- mm/shrinker.c | 15 --------------- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.c index e1eb73d0b72a..8a35fd48ec46 100644 --- a/drivers/gpu/drm/ttm/ttm_pool.c +++ b/drivers/gpu/drm/ttm/ttm_pool.c @@ -74,6 +74,7 @@ static struct ttm_pool_type global_dma32_uncached[MAX_ORDER + 1]; static spinlock_t shrinker_lock; static struct list_head shrinker_list; static struct shrinker *mm_shrinker; +static DECLARE_RWSEM(pool_shrink_rwsem); /* Allocate pages of size 1 << order with the given gfp_flags */ static struct page *ttm_pool_alloc_page(struct ttm_pool *pool, gfp_t gfp_flags, @@ -317,6 +318,7 @@ static unsigned int ttm_pool_shrink(void) unsigned int num_pages; struct page *p; + down_read(&pool_shrink_rwsem); spin_lock(&shrinker_lock); pt = list_first_entry(&shrinker_list, typeof(*pt), shrinker_list); list_move_tail(&pt->shrinker_list, &shrinker_list); @@ -329,6 +331,7 @@ static unsigned int ttm_pool_shrink(void) } else { num_pages = 0; } + up_read(&pool_shrink_rwsem); return num_pages; } @@ -572,6 +575,18 @@ void ttm_pool_init(struct ttm_pool *pool, struct device *dev, } EXPORT_SYMBOL(ttm_pool_init); +/** + * synchronize_shrinkers - Wait for all running shrinkers to complete. + * + * This is useful to guarantee that all shrinker invocations have seen an + * update, before freeing memory, similar to rcu. + */ +static void synchronize_shrinkers(void) +{ + down_write(&pool_shrink_rwsem); + up_write(&pool_shrink_rwsem); +} + /** * ttm_pool_fini - Cleanup a pool * diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index e464b4e9be0e..23ea9360c5d8 100644 --- a/include/linux/shrinker.h +++ b/include/linux/shrinker.h @@ -105,8 +105,6 @@ void shrinker_free_non_registered(struct shrinker *shrinker); void shrinker_register(struct shrinker *shrinker); void shrinker_unregister(struct shrinker *shrinker); -extern void synchronize_shrinkers(void); - #ifdef CONFIG_SHRINKER_DEBUG extern int shrinker_debugfs_add(struct shrinker *shrinker); extern struct dentry *shrinker_debugfs_detach(struct shrinker *shrinker, diff --git a/mm/shrinker.c b/mm/shrinker.c index 2f3635ad1b45..3c4d3fe2fa17 100644 --- a/mm/shrinker.c +++ b/mm/shrinker.c @@ -660,18 +660,3 @@ void shrinker_unregister(struct shrinker *shrinker) kfree(shrinker); } EXPORT_SYMBOL(shrinker_unregister); - -/** - * synchronize_shrinkers - Wait for all running shrinkers to complete. - * - * This is equivalent to calling unregister_shrink() and register_shrinker(), - * but atomically and with less overhead. This is useful to guarantee that all - * shrinker invocations have seen an update, before freeing memory, similar to - * rcu. - */ -void synchronize_shrinkers(void) -{ - down_write(&shrinker_rwsem); - up_write(&shrinker_rwsem); -} -EXPORT_SYMBOL(synchronize_shrinkers); From patchwork Mon Jul 24 09:43:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323987 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 310ECC001DE for ; Mon, 24 Jul 2023 09:53:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C0A4E280003; Mon, 24 Jul 2023 05:53:44 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BBA8D6B0092; Mon, 24 Jul 2023 05:53:44 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A33F5280003; Mon, 24 Jul 2023 05:53:44 -0400 (EDT) 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 8FF046B008C for ; Mon, 24 Jul 2023 05:53:44 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 64793140986 for ; Mon, 24 Jul 2023 09:53:44 +0000 (UTC) X-FDA: 81046043568.16.A2C7C24 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) by imf16.hostedemail.com (Postfix) with ESMTP id 77461180005 for ; Mon, 24 Jul 2023 09:53:42 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=LP3XX3yv; spf=pass (imf16.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.171 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192422; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=6ldGbVJmWFW3GnmiCRXjaV59N76MCfDcOlWufUCYnHU=; b=a/nuLZx1U3l/54K5kAnzSotd+l+cPjRtoIju1RpxQXE8S+QjuQPnyT9qio47QSUsZN68+a gjocsZ8ZuI8+A+vX+lKTgNqjHbFT9d5EchLS2nh92VqgyVqAAXK6OPb378Swi5uCzTbxtT NW2tR4f97CS4gjKQCU8O2pNq/vt78oA= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=LP3XX3yv; spf=pass (imf16.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.171 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192422; a=rsa-sha256; cv=none; b=IqX4ETuX7duGx2Sw/WHwJi7/TCSgRjXw7is0DzMawcHkSFk6wOPunt5B0lPHfgtR5EvDE+ re5enOMGs81wC8rcV9ChXEFSsxudqZbqIWn6+/KpTdtlgKlkT7wikRxT2wdVeC/98DWeE6 bswtwAU4YsWTx1y1uQdhQKjLHTXh9S8= Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-1bb91c20602so2236015ad.0 for ; Mon, 24 Jul 2023 02:53:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192421; x=1690797221; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6ldGbVJmWFW3GnmiCRXjaV59N76MCfDcOlWufUCYnHU=; b=LP3XX3yvpoIadeMP368Vuuqayp4Ta/i1BL9FbOlpyXFC9Jth7YxMBoCJEisaQr+grg 3RWigoM4pV8g1a44IoOjwdIfgyJeWnyMb+ac5HTGz60msj5A9lsKk39jUryOOABgsj6q NRZKPOQWfuNoIfZARwTwwR3jzsikriSk/yIuSKlxTW1FOKloFG2U7Q2213CsfZ1x3ay5 Csiz7ykGZOw0ljM7V9gidgbk1QL4ELxkt+HpUHKCgXWWmsWCFACQiTx5nvDM48ITzc/6 8FMpz8IkrvxUJpC+bPFHWVmg1zaiQp6UYtoLTk9ZWDMKIwxkwIFj9i5pdjmxt0VAo5YN w3Iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192421; x=1690797221; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6ldGbVJmWFW3GnmiCRXjaV59N76MCfDcOlWufUCYnHU=; b=ezGzAKP4gYa1yDgJDZIl97wwNu98HM156vplCfeNMBCrWHjLPLKhGYxvGUn7bsDCzN 1l2ud3QNjcLkrovX+DYHj8KUXySSQ0jL2SZLgkR24BhG5lbH1gIiDPZwGKTOGSwfFMWI HInGV/7q65snJzBdf4NOTHjO2i2zIoAdrst470gTFUnbrGa//uUVQHqt2pudQ2Vop/m0 5vQTSm+nNztCZkc2K9u1djc5Qxvh0KJ+6Doia/rSUET6caIS95tZJqTWXbGJWPfh365X SVZ8Iv1GdoLOPZnIGhAG6n0BdDuMjc2mmcFAvOYc4dIXXDMsxS2arGr9fpR8CGxp29uk 7U2A== X-Gm-Message-State: ABy/qLapar43UFHSI7IlBkCeJyUos9VY/ipMWQfd+1iIzBzystikCnOj 7cgG04oVc4sASF7Qv7h6yPe3KA== X-Google-Smtp-Source: APBJJlGryO879V9BaBQDHKX8zWib3yCjxEUuCoHfosN5ailAJ/cPY/8UIz/oHWPeLcNN21dHKE1QRw== X-Received: by 2002:a17:902:ea01:b0:1bb:83ec:832 with SMTP id s1-20020a170902ea0100b001bb83ec0832mr8344187plg.2.1690192421320; Mon, 24 Jul 2023 02:53:41 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.53.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:53:41 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 43/47] mm: shrinker: add a secondary array for shrinker_info::{map, nr_deferred} Date: Mon, 24 Jul 2023 17:43:50 +0800 Message-Id: <20230724094354.90817-44-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 77461180005 X-Rspam-User: X-Stat-Signature: 95okekrrjryop9z44457cydnrqj1yyhz X-Rspamd-Server: rspam01 X-HE-Tag: 1690192422-696122 X-HE-Meta: U2FsdGVkX19JELTWc27rUHBruS5TdWGD9UrjtWTf8rtR0KUJyFBpLVMo7P6waEhmcWHJQEo1Vn8og2EarTwuEMLZV8EpsNUSDXCE7fo7evAijS9KBlCLpY9r03lpcNu6NfIzY4g/dsYzXdqFwi9gkgD4Y2TRaxVjZ/M4f6fDrARb5YLnqSKfD+pclUTQiIvt9Ypv0/uIA4ft4SBwmshxVZSj5CgbfwvzsYDbkdsFdFiRdF/0V4BSSEknibRxKwIdAhwanE27gT6AxK6eFjbRWPZfY934WLV8C8gUfBgvPjT13Geq675/69Rl3mh8lFLF+5jygt4qHtwY97ZP8futH6njZFhfg6XCJReGhJcs2EBm9apsrQ3gMmkyKH6a/rrYrFfztUpiBpkNOJ7ARCDyL8CDsTgXvvVnY31X/36VDW9tyZoGz09YnbxnRWZ8CZBW1bWnDcXoXo0HqVj0ulQmZfa1oFbcV4vg+doHDE5l7bTtuExnQvQfxpk9MA+nUEZG4ixFxsEawN/Owptoq2Q2Zf/LknsQB0K158iqraN2EnnPWGpuq8LMmK8H11bgaATtaZXUrmzhwz8SFy6xAYtgsOUNUVo/WHeFY7QP38IPsU28vE6TwUxFH9CLNq8VTWKGEaAPL+ossQ5ZzGJjF8ylvgj+2jb/+8RdP3CbKhQFa+WId53rCos7CWMawWxuYesCdm10RQyt5pISou/txitPwMXrMAFb2/Q7km1TlDBeS4rdcI2gkNl8rgwaFiwCftK+k6yrztJf1FAHbvXr73JQzsKUIsHFaXZA927GwCzVbEdhitIHebJg0qP5+lr//03RwLBcsZiIg23iSr2Ic8RYtRAO9d//H4CRouZ0EHDZ2hMjOgXwlzLl9qyAnNMCiuJtJb4we9vdOlVaUHyE53gPvzxL7FT9kofdghzqaOC6/bTyTWTN5s/VOIEddUhju6CU38j02ovGt0lMYtnt5Y4 TyuJDxTP be4eoVI1Kwra2wr09XwRtRKWsL/XpatXx57JohKx67TbE/P1X1c/uLjEDB52XZIc6Je0YUkUtCGsfpJvgVVJ4yllkF39bqAgMuAD9SyADNmr9BwaqcLwZ1uLX1RpkI6Zbsx3zaZjEkNoH8t1vjEcZQpmqSuZQzlNGLV7V3a3cWZpaqc/Aeu8zfid+Ada8slQWDRSh1PAHpnC0+BNk+9JdlP0bYme/ElHoZMXKtXkYfys9s3ofkHphW1Iqdz2APRg90/mXXC4vLmb8O1a8vd6p+rJJIPI1fJDrFDBJPZ7shdsS4Oo14/qVXnUYA3mq8MSevOqDCY2vXJexNfsGFh2x0wqveRCKCVt4mP4ooOzLEeBsH3IMN31Kfx/2fvNoQ8k0uUrsZB53NTaVfTrECBANa3uVT7PTFocvplk7IEqWJV+aVJDHQkieid+gkl8bRW2DEro8GixFKtaty8DRcriIA2bJ9YV5Nvh1ha5oSPVUaNFsM7ps5E/YHTSILDArlPmlG/gReF7VqSZjZJb8rXaDfjWRCw== 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: Currently, we maintain two linear arrays per node per memcg, which are shrinker_info::map and shrinker_info::nr_deferred. And we need to resize them when the shrinker_nr_max is exceeded, that is, allocate a new array, and then copy the old array to the new array, and finally free the old array by RCU. For shrinker_info::map, we do set_bit() under the RCU lock, so we may set the value into the old map which is about to be freed. This may cause the value set to be lost. The current solution is not to copy the old map when resizing, but to set all the corresponding bits in the new map to 1. This solves the data loss problem, but bring the overhead of more pointless loops while doing memcg slab shrink. For shrinker_info::nr_deferred, we will only modify it under the read lock of shrinker_rwsem, so it will not run concurrently with the resizing. But after we make memcg slab shrink lockless, there will be the same data loss problem as shrinker_info::map, and we can't work around it like the map. For such resizable arrays, the most straightforward idea is to change it to xarray, like we did for list_lru [1]. We need to do xa_store() in the list_lru_add()-->set_shrinker_bit(), but this will cause memory allocation, and the list_lru_add() doesn't accept failure. A possible solution is to pre-allocate, but the location of pre-allocation is not well determined. Therefore, this commit chooses to introduce a secondary array for shrinker_info::{map, nr_deferred}, so that we only need to copy this secondary array every time the size is resized. Then even if we get the old secondary array under the RCU lock, the found map and nr_deferred are also true, so no data is lost. [1]. https://lore.kernel.org/all/20220228122126.37293-13-songmuchun@bytedance.com/ Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- include/linux/memcontrol.h | 12 +- include/linux/shrinker.h | 17 +++ mm/shrinker.c | 250 +++++++++++++++++++++++-------------- 3 files changed, 172 insertions(+), 107 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 58eb7ca65699..1a2e9d15822d 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -21,6 +21,7 @@ #include #include #include +#include struct mem_cgroup; struct obj_cgroup; @@ -88,17 +89,6 @@ struct mem_cgroup_reclaim_iter { unsigned int generation; }; -/* - * Bitmap and deferred work of shrinker::id corresponding to memcg-aware - * shrinkers, which have elements charged to this memcg. - */ -struct shrinker_info { - struct rcu_head rcu; - atomic_long_t *nr_deferred; - unsigned long *map; - int map_nr_max; -}; - struct lruvec_stats_percpu { /* Local (CPU and cgroup) state */ long state[NR_VM_NODE_STAT_ITEMS]; diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index 23ea9360c5d8..36977a70bebb 100644 --- a/include/linux/shrinker.h +++ b/include/linux/shrinker.h @@ -5,6 +5,23 @@ #include #include +#define SHRINKER_UNIT_BITS BITS_PER_LONG + +/* + * Bitmap and deferred work of shrinker::id corresponding to memcg-aware + * shrinkers, which have elements charged to the memcg. + */ +struct shrinker_info_unit { + atomic_long_t nr_deferred[SHRINKER_UNIT_BITS]; + DECLARE_BITMAP(map, SHRINKER_UNIT_BITS); +}; + +struct shrinker_info { + struct rcu_head rcu; + int map_nr_max; + struct shrinker_info_unit *unit[]; +}; + /* * This struct is used to pass information from page reclaim to the shrinkers. * We consolidate the values for easier extension later. diff --git a/mm/shrinker.c b/mm/shrinker.c index 3c4d3fe2fa17..8a1fe844f1a4 100644 --- a/mm/shrinker.c +++ b/mm/shrinker.c @@ -10,15 +10,50 @@ DECLARE_RWSEM(shrinker_rwsem); #ifdef CONFIG_MEMCG static int shrinker_nr_max; -/* The shrinker_info is expanded in a batch of BITS_PER_LONG */ -static inline int shrinker_map_size(int nr_items) +static inline int shrinker_unit_size(int nr_items) { - return (DIV_ROUND_UP(nr_items, BITS_PER_LONG) * sizeof(unsigned long)); + return (DIV_ROUND_UP(nr_items, SHRINKER_UNIT_BITS) * sizeof(struct shrinker_info_unit *)); } -static inline int shrinker_defer_size(int nr_items) +static inline void shrinker_unit_free(struct shrinker_info *info, int start) { - return (round_up(nr_items, BITS_PER_LONG) * sizeof(atomic_long_t)); + struct shrinker_info_unit **unit; + int nr, i; + + if (!info) + return; + + unit = info->unit; + nr = DIV_ROUND_UP(info->map_nr_max, SHRINKER_UNIT_BITS); + + for (i = start; i < nr; i++) { + if (!unit[i]) + break; + + kvfree(unit[i]); + unit[i] = NULL; + } +} + +static inline int shrinker_unit_alloc(struct shrinker_info *new, + struct shrinker_info *old, int nid) +{ + struct shrinker_info_unit *unit; + int nr = DIV_ROUND_UP(new->map_nr_max, SHRINKER_UNIT_BITS); + int start = old ? DIV_ROUND_UP(old->map_nr_max, SHRINKER_UNIT_BITS) : 0; + int i; + + for (i = start; i < nr; i++) { + unit = kvzalloc_node(sizeof(*unit), GFP_KERNEL, nid); + if (!unit) { + shrinker_unit_free(new, start); + return -ENOMEM; + } + + new->unit[i] = unit; + } + + return 0; } void free_shrinker_info(struct mem_cgroup *memcg) @@ -30,6 +65,7 @@ void free_shrinker_info(struct mem_cgroup *memcg) for_each_node(nid) { pn = memcg->nodeinfo[nid]; info = rcu_dereference_protected(pn->shrinker_info, true); + shrinker_unit_free(info, 0); kvfree(info); rcu_assign_pointer(pn->shrinker_info, NULL); } @@ -38,28 +74,27 @@ void free_shrinker_info(struct mem_cgroup *memcg) int alloc_shrinker_info(struct mem_cgroup *memcg) { struct shrinker_info *info; - int nid, size, ret = 0; - int map_size, defer_size = 0; + int nid, ret = 0; + int array_size = 0; down_write(&shrinker_rwsem); - map_size = shrinker_map_size(shrinker_nr_max); - defer_size = shrinker_defer_size(shrinker_nr_max); - size = map_size + defer_size; + array_size = shrinker_unit_size(shrinker_nr_max); for_each_node(nid) { - info = kvzalloc_node(sizeof(*info) + size, GFP_KERNEL, nid); - if (!info) { - free_shrinker_info(memcg); - ret = -ENOMEM; - break; - } - info->nr_deferred = (atomic_long_t *)(info + 1); - info->map = (void *)info->nr_deferred + defer_size; + info = kvzalloc_node(sizeof(*info) + array_size, GFP_KERNEL, nid); + if (!info) + goto err; info->map_nr_max = shrinker_nr_max; + if (shrinker_unit_alloc(info, NULL, nid)) + goto err; rcu_assign_pointer(memcg->nodeinfo[nid]->shrinker_info, info); } up_write(&shrinker_rwsem); return ret; + +err: + free_shrinker_info(memcg); + return -ENOMEM; } static struct shrinker_info *shrinker_info_protected(struct mem_cgroup *memcg, @@ -69,15 +104,12 @@ static struct shrinker_info *shrinker_info_protected(struct mem_cgroup *memcg, lockdep_is_held(&shrinker_rwsem)); } -static int expand_one_shrinker_info(struct mem_cgroup *memcg, - int map_size, int defer_size, - int old_map_size, int old_defer_size, - int new_nr_max) +static int expand_one_shrinker_info(struct mem_cgroup *memcg, int new_size, + int old_size, int new_nr_max) { struct shrinker_info *new, *old; struct mem_cgroup_per_node *pn; int nid; - int size = map_size + defer_size; for_each_node(nid) { pn = memcg->nodeinfo[nid]; @@ -90,21 +122,18 @@ static int expand_one_shrinker_info(struct mem_cgroup *memcg, if (new_nr_max <= old->map_nr_max) continue; - new = kvmalloc_node(sizeof(*new) + size, GFP_KERNEL, nid); + new = kvmalloc_node(sizeof(*new) + new_size, GFP_KERNEL, nid); if (!new) return -ENOMEM; - new->nr_deferred = (atomic_long_t *)(new + 1); - new->map = (void *)new->nr_deferred + defer_size; new->map_nr_max = new_nr_max; - /* map: set all old bits, clear all new bits */ - memset(new->map, (int)0xff, old_map_size); - memset((void *)new->map + old_map_size, 0, map_size - old_map_size); - /* nr_deferred: copy old values, clear all new values */ - memcpy(new->nr_deferred, old->nr_deferred, old_defer_size); - memset((void *)new->nr_deferred + old_defer_size, 0, - defer_size - old_defer_size); + /* copy old values, allocate all new values */ + memcpy(new->unit, old->unit, old_size); + if (shrinker_unit_alloc(new, old, nid)) { + kvfree(new); + return -ENOMEM; + } rcu_assign_pointer(pn->shrinker_info, new); kvfree_rcu(old, rcu); @@ -116,9 +145,8 @@ static int expand_one_shrinker_info(struct mem_cgroup *memcg, static int expand_shrinker_info(int new_id) { int ret = 0; - int new_nr_max = round_up(new_id + 1, BITS_PER_LONG); - int map_size, defer_size = 0; - int old_map_size, old_defer_size = 0; + int new_nr_max = round_up(new_id + 1, SHRINKER_UNIT_BITS); + int new_size, old_size = 0; struct mem_cgroup *memcg; if (!root_mem_cgroup) @@ -126,15 +154,12 @@ static int expand_shrinker_info(int new_id) lockdep_assert_held(&shrinker_rwsem); - map_size = shrinker_map_size(new_nr_max); - defer_size = shrinker_defer_size(new_nr_max); - old_map_size = shrinker_map_size(shrinker_nr_max); - old_defer_size = shrinker_defer_size(shrinker_nr_max); + new_size = shrinker_unit_size(new_nr_max); + old_size = shrinker_unit_size(shrinker_nr_max); memcg = mem_cgroup_iter(NULL, NULL, NULL); do { - ret = expand_one_shrinker_info(memcg, map_size, defer_size, - old_map_size, old_defer_size, + ret = expand_one_shrinker_info(memcg, new_size, old_size, new_nr_max); if (ret) { mem_cgroup_iter_break(NULL, memcg); @@ -148,17 +173,34 @@ static int expand_shrinker_info(int new_id) return ret; } +static inline int shriner_id_to_index(int shrinker_id) +{ + return shrinker_id / SHRINKER_UNIT_BITS; +} + +static inline int shriner_id_to_offset(int shrinker_id) +{ + return shrinker_id % SHRINKER_UNIT_BITS; +} + +static inline int calc_shrinker_id(int index, int offset) +{ + return index * SHRINKER_UNIT_BITS + offset; +} + void set_shrinker_bit(struct mem_cgroup *memcg, int nid, int shrinker_id) { if (shrinker_id >= 0 && memcg && !mem_cgroup_is_root(memcg)) { struct shrinker_info *info; + struct shrinker_info_unit *unit; rcu_read_lock(); info = rcu_dereference(memcg->nodeinfo[nid]->shrinker_info); + unit = info->unit[shriner_id_to_index(shrinker_id)]; if (!WARN_ON_ONCE(shrinker_id >= info->map_nr_max)) { /* Pairs with smp mb in shrink_slab() */ smp_mb__before_atomic(); - set_bit(shrinker_id, info->map); + set_bit(shriner_id_to_offset(shrinker_id), unit->map); } rcu_read_unlock(); } @@ -207,26 +249,31 @@ static long xchg_nr_deferred_memcg(int nid, struct shrinker *shrinker, struct mem_cgroup *memcg) { struct shrinker_info *info; + struct shrinker_info_unit *unit; info = shrinker_info_protected(memcg, nid); - return atomic_long_xchg(&info->nr_deferred[shrinker->id], 0); + unit = info->unit[shriner_id_to_index(shrinker->id)]; + return atomic_long_xchg(&unit->nr_deferred[shriner_id_to_offset(shrinker->id)], 0); } static long add_nr_deferred_memcg(long nr, int nid, struct shrinker *shrinker, struct mem_cgroup *memcg) { struct shrinker_info *info; + struct shrinker_info_unit *unit; info = shrinker_info_protected(memcg, nid); - return atomic_long_add_return(nr, &info->nr_deferred[shrinker->id]); + unit = info->unit[shriner_id_to_index(shrinker->id)]; + return atomic_long_add_return(nr, &unit->nr_deferred[shriner_id_to_offset(shrinker->id)]); } void reparent_shrinker_deferred(struct mem_cgroup *memcg) { - int i, nid; + int nid, index, offset; long nr; struct mem_cgroup *parent; struct shrinker_info *child_info, *parent_info; + struct shrinker_info_unit *child_unit, *parent_unit; parent = parent_mem_cgroup(memcg); if (!parent) @@ -237,9 +284,13 @@ void reparent_shrinker_deferred(struct mem_cgroup *memcg) for_each_node(nid) { child_info = shrinker_info_protected(memcg, nid); parent_info = shrinker_info_protected(parent, nid); - for (i = 0; i < child_info->map_nr_max; i++) { - nr = atomic_long_read(&child_info->nr_deferred[i]); - atomic_long_add(nr, &parent_info->nr_deferred[i]); + for (index = 0; index < shriner_id_to_index(child_info->map_nr_max); index++) { + child_unit = child_info->unit[index]; + parent_unit = parent_info->unit[index]; + for (offset = 0; offset < SHRINKER_UNIT_BITS; offset++) { + nr = atomic_long_read(&child_unit->nr_deferred[offset]); + atomic_long_add(nr, &parent_unit->nr_deferred[offset]); + } } } up_read(&shrinker_rwsem); @@ -405,7 +456,7 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, { struct shrinker_info *info; unsigned long ret, freed = 0; - int i; + int offset, index = 0; if (!mem_cgroup_online(memcg)) return 0; @@ -417,56 +468,63 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, if (unlikely(!info)) goto unlock; - for_each_set_bit(i, info->map, info->map_nr_max) { - struct shrink_control sc = { - .gfp_mask = gfp_mask, - .nid = nid, - .memcg = memcg, - }; - struct shrinker *shrinker; + for (; index < shriner_id_to_index(info->map_nr_max); index++) { + struct shrinker_info_unit *unit; - shrinker = idr_find(&shrinker_idr, i); - if (unlikely(!shrinker || !(shrinker->flags & SHRINKER_REGISTERED))) { - if (!shrinker) - clear_bit(i, info->map); - continue; - } + unit = info->unit[index]; - /* Call non-slab shrinkers even though kmem is disabled */ - if (!memcg_kmem_online() && - !(shrinker->flags & SHRINKER_NONSLAB)) - continue; + for_each_set_bit(offset, unit->map, SHRINKER_UNIT_BITS) { + struct shrink_control sc = { + .gfp_mask = gfp_mask, + .nid = nid, + .memcg = memcg, + }; + struct shrinker *shrinker; + int shrinker_id = calc_shrinker_id(index, offset); - ret = do_shrink_slab(&sc, shrinker, priority); - if (ret == SHRINK_EMPTY) { - clear_bit(i, info->map); - /* - * After the shrinker reported that it had no objects to - * free, but before we cleared the corresponding bit in - * the memcg shrinker map, a new object might have been - * added. To make sure, we have the bit set in this - * case, we invoke the shrinker one more time and reset - * the bit if it reports that it is not empty anymore. - * The memory barrier here pairs with the barrier in - * set_shrinker_bit(): - * - * list_lru_add() shrink_slab_memcg() - * list_add_tail() clear_bit() - * - * set_bit() do_shrink_slab() - */ - smp_mb__after_atomic(); - ret = do_shrink_slab(&sc, shrinker, priority); - if (ret == SHRINK_EMPTY) - ret = 0; - else - set_shrinker_bit(memcg, nid, i); - } - freed += ret; + shrinker = idr_find(&shrinker_idr, shrinker_id); + if (unlikely(!shrinker || !(shrinker->flags & SHRINKER_REGISTERED))) { + if (!shrinker) + clear_bit(offset, unit->map); + continue; + } - if (rwsem_is_contended(&shrinker_rwsem)) { - freed = freed ? : 1; - break; + /* Call non-slab shrinkers even though kmem is disabled */ + if (!memcg_kmem_online() && + !(shrinker->flags & SHRINKER_NONSLAB)) + continue; + + ret = do_shrink_slab(&sc, shrinker, priority); + if (ret == SHRINK_EMPTY) { + clear_bit(offset, unit->map); + /* + * After the shrinker reported that it had no objects to + * free, but before we cleared the corresponding bit in + * the memcg shrinker map, a new object might have been + * added. To make sure, we have the bit set in this + * case, we invoke the shrinker one more time and reset + * the bit if it reports that it is not empty anymore. + * The memory barrier here pairs with the barrier in + * set_shrinker_bit(): + * + * list_lru_add() shrink_slab_memcg() + * list_add_tail() clear_bit() + * + * set_bit() do_shrink_slab() + */ + smp_mb__after_atomic(); + ret = do_shrink_slab(&sc, shrinker, priority); + if (ret == SHRINK_EMPTY) + ret = 0; + else + set_shrinker_bit(memcg, nid, shrinker_id); + } + freed += ret; + + if (rwsem_is_contended(&shrinker_rwsem)) { + freed = freed ? : 1; + goto unlock; + } } } unlock: From patchwork Mon Jul 24 09:43:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323988 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 7A1D8C001E0 for ; Mon, 24 Jul 2023 09:53:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 15CC7280004; Mon, 24 Jul 2023 05:53:57 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 10C2C6B0093; Mon, 24 Jul 2023 05:53:57 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EC8E5280004; Mon, 24 Jul 2023 05:53:56 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id D701D6B0092 for ; Mon, 24 Jul 2023 05:53:56 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 90057A04E9 for ; Mon, 24 Jul 2023 09:53:56 +0000 (UTC) X-FDA: 81046044072.13.4896956 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) by imf06.hostedemail.com (Postfix) with ESMTP id 8E3C3180005 for ; Mon, 24 Jul 2023 09:53:54 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=aakQ9LhP; spf=pass (imf06.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192434; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=XqecqrzcRvoIqXqcLBZrKzE7eAqHgJsLkgEnUCNLJ88=; b=BlHwjIjxVObzyp6JkEmFG+L/Xq9qfZKRMEvOYOwcIGzA3mnD/e1biUCOtm2IGgPALUImMZ a+ttz1eKzhdHBzm4NAHH6Y3yBFJTOXrTrgFsbOOFbZG0HBTHP+vggEDiCOkKdfPwo6Vobv E6ftddyvH1HEQF9hqj0vOY0NbT5+KGc= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192434; a=rsa-sha256; cv=none; b=tvdDUN6df85y6tRs/EW+FCAdEFx4SgxOB59cYAAW6WqHexgzQVOyc6B1Af3LWOzDKnJA+4 ytsdtiEN2/EhJmumjIVFmmuRVCX3kU2tVutPQ/0yhOGCplu3CYhT7SgWEmB2s96fAfGiaU p61Vm7n56B/P6UpwNrUwtyN/G7KsuWs= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=aakQ9LhP; spf=pass (imf06.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-1bb91c20602so2237335ad.0 for ; Mon, 24 Jul 2023 02:53:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192433; x=1690797233; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=XqecqrzcRvoIqXqcLBZrKzE7eAqHgJsLkgEnUCNLJ88=; b=aakQ9LhPKkBsGHyPn/0S1pJ1AXUkQ2pktpKG7ZznaFtfhZEAk2L/s3HFeMgFo9c4sB YjCdA4cfHiRFoAsJ95F8trnyy9W68BXjPI8tIe3KlU9vfvKXQfLc257Tp3k47YEaXxyL cC8ybNo0+Yqlr0HVQKvzqpcMLU5N8q2szwgu3a5mj6YWOtdCVI9Po9J47o5AQImD34oT fsyjFTVrms8ZNz/QF3b8ws2KqbiX0AgcbeBq1tQNUWRWk8x6ugUkj7ouYw4NBJZ4G3AL LTP7v7rQyzLe809XfdRCCXpY5HwbT/Kp7yhBNDkoFUB3AI2hcQHdnuE1yZCegUiWSxuC mo/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192433; x=1690797233; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XqecqrzcRvoIqXqcLBZrKzE7eAqHgJsLkgEnUCNLJ88=; b=P2OgA/0N/WBI6nYkvWyaX71lAfTs7SUWnFGaVvjPYNDoRoXRS1SaQMBLsPiGkEfUjO lA1/xMg3IjgBSoH5nmMfzcS47bzGmSjijHC0Eyd1mEqiqunyzuFfSvvYXf5ndoZLO/OU XkknQVfLQNyHuUFqESPnZayfnHg546w0fwGyN5/Ym+yiqAMprhvFlBP94mR/IS6UZTam k9a4JBKh+y5W8lisiim9t85LPDS2RIvuh1vCXSlSyfIV+nfd4XykOvnc+ic7jLABm+k4 +fYizJcb17B3AtsE1zj+Ub0vDAvO4tvNwH2FllPIl3QFOMwZ1H6CezGmWo+caCU0xE7M KNDQ== X-Gm-Message-State: ABy/qLZ1XUTIT1KW0Xxqg8Z0c5PnOzsPMECYAymAmbBUz4qbUKd1NUZn n3jhgKCpW8tX5eavuHPCA37NYA== X-Google-Smtp-Source: APBJJlHr2sAgfQgo2DnUpmnId7qPkjYXCImwyHrh9U8oeEhs0YzxIvU3vAaX/E5/QdNFkGMDi+4Opg== X-Received: by 2002:a17:903:41c9:b0:1b8:17e8:547e with SMTP id u9-20020a17090341c900b001b817e8547emr12210253ple.1.1690192433168; Mon, 24 Jul 2023 02:53:53 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.53.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:53:52 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 44/47] mm: shrinker: make global slab shrink lockless Date: Mon, 24 Jul 2023 17:43:51 +0800 Message-Id: <20230724094354.90817-45-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Stat-Signature: na7qhqurmschar3boij435c4q8imm9bn X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 8E3C3180005 X-Rspam-User: X-HE-Tag: 1690192434-539817 X-HE-Meta: U2FsdGVkX1+HJV930jnMSu0LYd8qWew3DbvJooHC5D2d1oA50S/81JVWfmXHTrKtPXoN26sv+IFuXapvjxQNzHLZKDzEgzV7sgRPeY1ZsYIKT+5Rkp+Vcerya262VCJs/KoK7x2TAwJek5Ip9oXwd5xAIL22ldZ/wS91IglhSHixofN6T3FnSH5hlfMDuXUM/oB2k7njvgVlWKt7+KAQtErFQEF44SnTQ1f4+Dg51vaJAQih0rvuSICcNufu5crVhgEo2/Fg5eDzg6CpvBoHf7KO6DlZ9gEoMzH1oY4u/KWsEii3v9CTVnojiBRC88M43ZFMPW+Png1qLrLHv485qyHAJq7FRib4pJ2Cnc5PvupK8VYtRP7QH7qC8URHah8SsXmfPkmMb782DmQDwx3lpqdDK+IhvQnT8XTVDnnDAz/8z+WzFSBWbe5vg4NFe64toQIVe4CmfWYhnqydNxHTo4byHasC/QpU4TN+NW1V/OCAl8CVlBG6x9dyUBymmqzD0fvu5v06EkmLffQyp1fohjo7iCm/PwkNa/GIKcZn8YpMnmL+3YCVPNP/oZDA/EBqpG35yZ3Ba+ppADItI/YQSJd3YjRntFGjak/bhn0AkhCccHL5OobrPWdhCUS5Xxkx1zow/RJqMbStZslnkAnE0qQBzAk0m+1woQXB0LtfNchv6vU1WSsBCXnvkikOzpdEr5Vvvo/pUw1XCp4q8Y8+70mF1q7wkEEKQ+pGvYIDk7SCIg/CSs0G1XbF3+k8iILZ8DiLHoCX5brAqoiQzQTfMk380s+9HdsbHJg6gbNcP0AOtBKYG4WlBYc+g8SyCxnpJsT3PSiPidaXv5yhC8z8tpzQtfKA2coFmx8y5TzA73XLIMOPhce/Ub+yExAnCy4Kqza6vRQGEOTsENtbjePb8T9T2yq0ca3U8KJPjDWVnTIPRdnCI27j+fDd0ao4MoFHJQa538KHIDpnghi5JI3 ZJIgiUxZ 05NpX/69V5K8Wr5mfsV7Rn8ybv0nJjq125m17lb1AFaL+BahqN8FCddio2e4yOdt6Po0Reu3hpjI8PETKzNDcQX4RtFZcZwbk/l6Mqe1QXuzbSZeDjaRbIBgWAzNc19HAwcKm5hzF9ZX12nT7NZqtCrqmK133iExw+GrZb9leKscytugY15HNbuk2vhqf4kJYZWI3DKy0QWlAGty+kVSVzfCxxuZTyqjowwTf8+2cFFOZkeZe4DwdahSbPuNNopy/pVotBGHyqXPNatw1ekz/ThGQ8M1JbIII7j2zdP1YfEqlHuuKm80a2by8IjgQzHBTRarwDQBEKb4dJqwjQbKM9QLsz1aTZKmnpLJIwSGTnNO/oozk04xGKU3yjj8zqHEPRLWwvi8u8xDElDdYKQlYXxxs2gixP9iSEd021FeiNPPVXmKhTLAOweXRYFaI6tx4MF/S30w7VzVY7QFZiIL7Zn9QUEkywj192tVWfyHnCgG/lLBl7u6BJmjeBOgI7bHSXGqoNusZPIfx4iy+huc5d5+XfaqUFvzAUaafNVDsqWM5j0YFWrhQuUCyYg== 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: The shrinker_rwsem is a global read-write lock in shrinkers subsystem, which protects most operations such as slab shrink, registration and unregistration of shrinkers, etc. This can easily cause problems in the following cases. 1) When the memory pressure is high and there are many filesystems mounted or unmounted at the same time, slab shrink will be affected (down_read_trylock() failed). Such as the real workload mentioned by Kirill Tkhai: ``` One of the real workloads from my experience is start of an overcommitted node containing many starting containers after node crash (or many resuming containers after reboot for kernel update). In these cases memory pressure is huge, and the node goes round in long reclaim. ``` 2) If a shrinker is blocked (such as the case mentioned in [1]) and a writer comes in (such as mount a fs), then this writer will be blocked and cause all subsequent shrinker-related operations to be blocked. Even if there is no competitor when shrinking slab, there may still be a problem. The down_read_trylock() may become a perf hotspot with frequent calls to shrink_slab(). Because of the poor multicore scalability of atomic operations, this can lead to a significant drop in IPC (instructions per cycle). We used to implement the lockless slab shrink with SRCU [2], but then kernel test robot reported -88.8% regression in stress-ng.ramfs.ops_per_sec test case [3], so we reverted it [4]. This commit uses the refcount+RCU method [5] proposed by Dave Chinner to re-implement the lockless global slab shrink. The memcg slab shrink is handled in the subsequent patch. For now, all shrinker instances are converted to dynamically allocated and will be freed by kfree_rcu(). So we can use rcu_read_{lock,unlock}() to ensure that the shrinker instance is valid. And the shrinker instance will not be run again after unregistration. So the structure that records the pointer of shrinker instance can be safely freed without waiting for the RCU read-side critical section. In this way, while we implement the lockless slab shrink, we don't need to be blocked in unregister_shrinker(). The following are the test results: stress-ng --timeout 60 --times --verify --metrics-brief --ramfs 9 & 1) Before applying this patchset: setting to a 60 second run per stressor dispatching hogs: 9 ramfs stressor bogo ops real time usr time sys time bogo ops/s bogo ops/s (secs) (secs) (secs) (real time) (usr+sys time) ramfs 735238 60.00 12.37 363.70 12253.05 1955.08 for a 60.01s run time: 1440.27s available CPU time 12.36s user time ( 0.86%) 363.70s system time ( 25.25%) 376.06s total time ( 26.11%) load average: 10.79 4.47 1.69 passed: 9: ramfs (9) failed: 0 skipped: 0 successful run completed in 60.01s (1 min, 0.01 secs) 2) After applying this patchset: setting to a 60 second run per stressor dispatching hogs: 9 ramfs stressor bogo ops real time usr time sys time bogo ops/s bogo ops/s (secs) (secs) (secs) (real time) (usr+sys time) ramfs 746677 60.00 12.22 367.75 12443.70 1965.13 for a 60.01s run time: 1440.26s available CPU time 12.21s user time ( 0.85%) 367.75s system time ( 25.53%) 379.96s total time ( 26.38%) load average: 8.37 2.48 0.86 passed: 9: ramfs (9) failed: 0 skipped: 0 successful run completed in 60.01s (1 min, 0.01 secs) We can see that the ops/s has hardly changed. [1]. https://lore.kernel.org/lkml/20191129214541.3110-1-ptikhomirov@virtuozzo.com/ [2]. https://lore.kernel.org/lkml/20230313112819.38938-1-zhengqi.arch@bytedance.com/ [3]. https://lore.kernel.org/lkml/202305230837.db2c233f-yujie.liu@intel.com/ [4]. https://lore.kernel.org/all/20230609081518.3039120-1-qi.zheng@linux.dev/ [5]. https://lore.kernel.org/lkml/ZIJhou1d55d4H1s0@dread.disaster.area/ Signed-off-by: Qi Zheng --- include/linux/shrinker.h | 19 +++++++--- mm/shrinker.c | 75 ++++++++++++++++++++++++++-------------- mm/shrinker_debug.c | 52 +++++++++++++++++++++------- 3 files changed, 104 insertions(+), 42 deletions(-) diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index 36977a70bebb..335da93cccee 100644 --- a/include/linux/shrinker.h +++ b/include/linux/shrinker.h @@ -4,6 +4,7 @@ #include #include +#include #define SHRINKER_UNIT_BITS BITS_PER_LONG @@ -86,6 +87,10 @@ struct shrinker { long batch; /* reclaim batch size, 0 = default */ int seeks; /* seeks to recreate an obj */ unsigned flags; + bool registered; + + refcount_t refcount; + struct rcu_head rcu; void *private_data; @@ -106,14 +111,13 @@ struct shrinker { #define DEFAULT_SEEKS 2 /* A good number if you don't know better. */ /* Flags */ -#define SHRINKER_REGISTERED (1 << 0) -#define SHRINKER_NUMA_AWARE (1 << 1) -#define SHRINKER_MEMCG_AWARE (1 << 2) +#define SHRINKER_NUMA_AWARE (1 << 0) +#define SHRINKER_MEMCG_AWARE (1 << 1) /* * It just makes sense when the shrinker is also MEMCG_AWARE for now, * non-MEMCG_AWARE shrinker should not have this flag set. */ -#define SHRINKER_NONSLAB (1 << 3) +#define SHRINKER_NONSLAB (1 << 2) unsigned long shrink_slab(gfp_t gfp_mask, int nid, struct mem_cgroup *memcg, int priority); @@ -122,6 +126,13 @@ void shrinker_free_non_registered(struct shrinker *shrinker); void shrinker_register(struct shrinker *shrinker); void shrinker_unregister(struct shrinker *shrinker); +static inline bool shrinker_try_get(struct shrinker *shrinker) +{ + return READ_ONCE(shrinker->registered) && + refcount_inc_not_zero(&shrinker->refcount); +} +void shrinker_put(struct shrinker *shrinker); + #ifdef CONFIG_SHRINKER_DEBUG extern int shrinker_debugfs_add(struct shrinker *shrinker); extern struct dentry *shrinker_debugfs_detach(struct shrinker *shrinker, diff --git a/mm/shrinker.c b/mm/shrinker.c index 8a1fe844f1a4..8e3334749552 100644 --- a/mm/shrinker.c +++ b/mm/shrinker.c @@ -2,10 +2,13 @@ #include #include #include +#include +#include #include LIST_HEAD(shrinker_list); DECLARE_RWSEM(shrinker_rwsem); +DEFINE_SPINLOCK(shrinker_lock); #ifdef CONFIG_MEMCG static int shrinker_nr_max; @@ -450,6 +453,18 @@ static unsigned long do_shrink_slab(struct shrink_control *shrinkctl, return freed; } +void shrinker_put(struct shrinker *shrinker) +{ + if (refcount_dec_and_test(&shrinker->refcount)) { + spin_lock(&shrinker_lock); + list_del_rcu(&shrinker->list); + spin_unlock(&shrinker_lock); + + kfree(shrinker->nr_deferred); + kfree_rcu(shrinker, rcu); + } +} + #ifdef CONFIG_MEMCG static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, struct mem_cgroup *memcg, int priority) @@ -483,7 +498,8 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, int shrinker_id = calc_shrinker_id(index, offset); shrinker = idr_find(&shrinker_idr, shrinker_id); - if (unlikely(!shrinker || !(shrinker->flags & SHRINKER_REGISTERED))) { + if (unlikely(!shrinker || + !READ_ONCE(shrinker->registered))) { if (!shrinker) clear_bit(offset, unit->map); continue; @@ -575,33 +591,42 @@ unsigned long shrink_slab(gfp_t gfp_mask, int nid, struct mem_cgroup *memcg, if (!mem_cgroup_disabled() && !mem_cgroup_is_root(memcg)) return shrink_slab_memcg(gfp_mask, nid, memcg, priority); - if (!down_read_trylock(&shrinker_rwsem)) - goto out; - - list_for_each_entry(shrinker, &shrinker_list, list) { + rcu_read_lock(); + list_for_each_entry_rcu(shrinker, &shrinker_list, list) { struct shrink_control sc = { .gfp_mask = gfp_mask, .nid = nid, .memcg = memcg, }; + if (!shrinker_try_get(shrinker)) + continue; + + /* + * We can safely unlock the RCU lock here since we already + * hold the refcount of the shrinker. + */ + rcu_read_unlock(); + ret = do_shrink_slab(&sc, shrinker, priority); if (ret == SHRINK_EMPTY) ret = 0; freed += ret; + /* - * Bail out if someone want to register a new shrinker to - * prevent the registration from being stalled for long periods - * by parallel ongoing shrinking. + * This shrinker may be deleted from shrinker_list and freed in + * the shrinker_put() below, but this shrinker is still used for + * the next traversal. So it is necessary to hold the RCU lock + * first to prevent this shrinker from being freed, which also + * ensures that the next shrinker that is traversed will not be + * freed (even if it is deleted from shrinker_list at the same + * time). */ - if (rwsem_is_contended(&shrinker_rwsem)) { - freed = freed ? : 1; - break; - } + rcu_read_lock(); + shrinker_put(shrinker); } - up_read(&shrinker_rwsem); -out: + rcu_read_unlock(); cond_resched(); return freed; } @@ -686,11 +711,14 @@ EXPORT_SYMBOL(shrinker_free_non_registered); void shrinker_register(struct shrinker *shrinker) { - down_write(&shrinker_rwsem); - list_add_tail(&shrinker->list, &shrinker_list); - shrinker->flags |= SHRINKER_REGISTERED; + refcount_set(&shrinker->refcount, 1); + + spin_lock(&shrinker_lock); + list_add_tail_rcu(&shrinker->list, &shrinker_list); + spin_unlock(&shrinker_lock); + shrinker_debugfs_add(shrinker); - up_write(&shrinker_rwsem); + WRITE_ONCE(shrinker->registered, true); } EXPORT_SYMBOL(shrinker_register); @@ -699,12 +727,12 @@ void shrinker_unregister(struct shrinker *shrinker) struct dentry *debugfs_entry; int debugfs_id; - if (!shrinker || !(shrinker->flags & SHRINKER_REGISTERED)) + if (!shrinker || !READ_ONCE(shrinker->registered)) return; + WRITE_ONCE(shrinker->registered, false); + down_write(&shrinker_rwsem); - list_del(&shrinker->list); - shrinker->flags &= ~SHRINKER_REGISTERED; if (shrinker->flags & SHRINKER_MEMCG_AWARE) unregister_memcg_shrinker(shrinker); debugfs_entry = shrinker_debugfs_detach(shrinker, &debugfs_id); @@ -712,9 +740,6 @@ void shrinker_unregister(struct shrinker *shrinker) shrinker_debugfs_remove(debugfs_entry, debugfs_id); - kfree(shrinker->nr_deferred); - shrinker->nr_deferred = NULL; - - kfree(shrinker); + shrinker_put(shrinker); } EXPORT_SYMBOL(shrinker_unregister); diff --git a/mm/shrinker_debug.c b/mm/shrinker_debug.c index f1becfd45853..c5573066adbf 100644 --- a/mm/shrinker_debug.c +++ b/mm/shrinker_debug.c @@ -5,6 +5,7 @@ #include #include #include +#include /* defined in vmscan.c */ extern struct rw_semaphore shrinker_rwsem; @@ -161,17 +162,21 @@ int shrinker_debugfs_add(struct shrinker *shrinker) { struct dentry *entry; char buf[128]; - int id; - - lockdep_assert_held(&shrinker_rwsem); + int id, ret = 0; /* debugfs isn't initialized yet, add debugfs entries later. */ if (!shrinker_debugfs_root) return 0; + down_write(&shrinker_rwsem); + if (shrinker->debugfs_entry) + goto fail; + id = ida_alloc(&shrinker_debugfs_ida, GFP_KERNEL); - if (id < 0) - return id; + if (id < 0) { + ret = id; + goto fail; + } shrinker->debugfs_id = id; snprintf(buf, sizeof(buf), "%s-%d", shrinker->name, id); @@ -180,7 +185,8 @@ int shrinker_debugfs_add(struct shrinker *shrinker) entry = debugfs_create_dir(buf, shrinker_debugfs_root); if (IS_ERR(entry)) { ida_free(&shrinker_debugfs_ida, id); - return PTR_ERR(entry); + ret = PTR_ERR(entry); + goto fail; } shrinker->debugfs_entry = entry; @@ -188,7 +194,10 @@ int shrinker_debugfs_add(struct shrinker *shrinker) &shrinker_debugfs_count_fops); debugfs_create_file("scan", 0220, entry, shrinker, &shrinker_debugfs_scan_fops); - return 0; + +fail: + up_write(&shrinker_rwsem); + return ret; } int shrinker_debugfs_rename(struct shrinker *shrinker, const char *fmt, ...) @@ -243,6 +252,11 @@ struct dentry *shrinker_debugfs_detach(struct shrinker *shrinker, shrinker->name = NULL; *debugfs_id = entry ? shrinker->debugfs_id : -1; + /* + * Ensure that shrinker->registered has been set to false before + * shrinker->debugfs_entry is set to NULL. + */ + smp_wmb(); shrinker->debugfs_entry = NULL; return entry; @@ -266,14 +280,26 @@ static int __init shrinker_debugfs_init(void) shrinker_debugfs_root = dentry; /* Create debugfs entries for shrinkers registered at boot */ - down_write(&shrinker_rwsem); - list_for_each_entry(shrinker, &shrinker_list, list) + rcu_read_lock(); + list_for_each_entry_rcu(shrinker, &shrinker_list, list) { + if (!shrinker_try_get(shrinker)) + continue; + rcu_read_unlock(); + if (!shrinker->debugfs_entry) { - ret = shrinker_debugfs_add(shrinker); - if (ret) - break; + /* Paired with smp_wmb() in shrinker_debugfs_detach() */ + smp_rmb(); + if (READ_ONCE(shrinker->registered)) + ret = shrinker_debugfs_add(shrinker); } - up_write(&shrinker_rwsem); + + rcu_read_lock(); + shrinker_put(shrinker); + + if (ret) + break; + } + rcu_read_unlock(); return ret; } From patchwork Mon Jul 24 09:43:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323989 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 0AD4EC001DF for ; Mon, 24 Jul 2023 09:54:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 973056B0093; Mon, 24 Jul 2023 05:54:08 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 922966B0095; Mon, 24 Jul 2023 05:54:08 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7C48B280005; Mon, 24 Jul 2023 05:54:08 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 6BD926B0093 for ; Mon, 24 Jul 2023 05:54:08 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 33BE840A65 for ; Mon, 24 Jul 2023 09:54:08 +0000 (UTC) X-FDA: 81046044576.18.8DE13A6 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) by imf19.hostedemail.com (Postfix) with ESMTP id 43A771A0008 for ; Mon, 24 Jul 2023 09:54:06 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=DikUT4CK; spf=pass (imf19.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.177 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192446; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=FywtQwu9mwqdLnpgsxjfsrD11oDXqt6ENbvCNRWNCVA=; b=af9oz1GEbiBSf39y86mWURceXUXL5BRIXbGsGp74MSaGt1eRwYtgUJ4NKxm4BOM/Qh8Mu+ Co7LC3CPRo6pg9RvuD9yo7lMt6fSLi1yEBHPcPQBMYxwjQz6BBtUv2HIXtJUy4SemL6mze iyguOlezPgYsb23jLmw0jDvhF6N1UmQ= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=DikUT4CK; spf=pass (imf19.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.177 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192446; a=rsa-sha256; cv=none; b=0Z6YcQKFe489w9w6P7BOoG2TsNepc6Dn9ZNBNtK8bFiuCGUz8y9yxtvf6qq7V4dMdf4GPl z3g5mdR8W8C+ZR+ooQ91FjC+mVY+8fRZ1EUMjKnbs/LUF2qGBlxm+SC9Zow1CUE/NxhjCG Te2782zBo+AWb1AeUOgV/qDsVh9HZig= Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-1bb85ed352bso2248815ad.0 for ; Mon, 24 Jul 2023 02:54:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192445; x=1690797245; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=FywtQwu9mwqdLnpgsxjfsrD11oDXqt6ENbvCNRWNCVA=; b=DikUT4CKvV9RWn+fl0EOFm95TR3cSja3PlgjCDFqYMWPqMDDzd0vmehY70wgwFHQZD xId6TApEDoayIU5bQp8ozmrUPwrV+fZdWpug1R+OQH5DrriDxnV5YGJ3iOuChC8/ataP +R3gMMBTSe4nwS0xpXqJAoWzm6vYwBlpoaI2H2xyHy5N1Vcg7pPEK5Dz8BrqbjXdo46a BIBOWCEzFcgC3VjgRrMmpjjBZE50INCoJYWq8LivZP/kkdwHaluoJFKZZtpIIdRFhRls Kq/htL25Wjh18OwWW51R+/aE+ahnELBQ5oiFmyJ9PiIhZjCyUAuo6LkxYtq+ZqQ6xAXz Fmyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192445; x=1690797245; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FywtQwu9mwqdLnpgsxjfsrD11oDXqt6ENbvCNRWNCVA=; b=X7KWL9ykN7yR4KLo+/zDprnAVK70OVtlnOypNWeq/Cbz7ptDS2c8cBzbduwTdumeyV 9CzIuw/gjlydPGkrvqzhLx62vJVP/reCC5TvNLQe8AN/H2HGixqrjhRPfY6yFLoxeciH S7DePts3JK54PDmSBWZfwwhzhrICKLlZ4ZRq6PHVpFHZ4EezKpt9qs97lA9pKwoEERaA PVcQmw9AjPTHMKGejOz5+e+71j0lFwp0fYF9A9RuYjMo033fObjGS4V49e59x4NpREXc 4dJbvU8+4q4QxMG8DUCN08ILO+t6rtCLLE7EVA1Mzks8Vz2jDcThoqYltc24NFKfwFS1 l16g== X-Gm-Message-State: ABy/qLYsBlyssUNLUajn6G1t7mh/wPqeIaNwDYQQao2dak4rSi09DMni 85rkY/SXRjxGJUPcATPMx0LLIw== X-Google-Smtp-Source: APBJJlGle8sGTFCIz3U+SEQARZPGtcsatZf97BgxEHL69WWMCLjqGjoS5fsqRbwtJvxWPn7Q2rRfzw== X-Received: by 2002:a17:902:cecd:b0:1b8:70d2:eb3a with SMTP id d13-20020a170902cecd00b001b870d2eb3amr12272091plg.0.1690192445165; Mon, 24 Jul 2023 02:54:05 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.53.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:54:04 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 45/47] mm: shrinker: make memcg slab shrink lockless Date: Mon, 24 Jul 2023 17:43:52 +0800 Message-Id: <20230724094354.90817-46-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 43A771A0008 X-Rspam-User: X-Stat-Signature: xjdyh5amrdr7eez6w91dkn1zfh5zza5p X-Rspamd-Server: rspam01 X-HE-Tag: 1690192446-215424 X-HE-Meta: U2FsdGVkX1/sUMzGJINiwxcwN1Qkx1ZgvuY1Pu1b3u8mfDpMgloPZRkAjyMvna7WCbb7iwNIeGfcC9wZRdqaNfQgD0b+TkwYmgNlU00HFVLW1fV0yAhoatNMjnBbSXykGLF9QzPP/ZBJkixtJ1coYuntCwjXcfPOeOXfmVaiSl0TQ5pTODAewP+gjlG6gemVZ9UHittVLkVPUunHD8HlYlkzfe+NJRCgUnqUz9AhSYkhZG3VRDAGVNoKNqoGguInfTwbphQlmDqaGmZ1peqnB/1tlvzYyYbB7+nnaHrbHA5lFp3sMxAPHXqw0Kq8R6YKwp6KJWcHdjkvpJhBxP+InOSd0bLCJsHEvwaF28S12UpGfeLB8+cBNWCKAGT9Pn6qKwSalhSRTmr3N1rMx524aAexekitGVULXAtABRePRJqcpLYgaIG3vfdwCwUyCdxkbGzF3bIYW+eg5l74xuljxpyQubLXUBDCZCtL1jv8MT3nCDppvScA9rOZw5GveWIvqswBk0x6j9lk/9DMMl7l4ogFfH8mrwrg0wdKFhL9llOqZhx/CRc2so6bscSZahcm8iRJuImcyQ5i+3iU6uopz1KOXHm3i2fR9UIsc2vYQavMw0nBGU8Tp/CwjAGIUcTqxPmTLEdxEYOppxtt3nWq3A80yRcW9g582/tquSOgwkWbGan0Dio1rUmi8qoTwMbmWE0imyLffIEsOIHemDhNNAudRLkKUBFJkOzVV7xkFXZLDh61VJIat0qSV8SgJpwHf8kRg1IVPFwNM00zLMI0QeCnXEfc6kkGqzctNf5t2tp1B/VyIFxRHWfM3slXbXXGfzqDTwy4g57ND68osUr6pUywxnrQC/fYPjosWm1+XI61yOoASiT+i4heyn+mfw/Ur7wgwjlnukpEd6tGdPbrrh5kbaS/HEe+yROXJHPRPcX/zusvvNVG5j45hjWR2muhPtcm7Gb2ZPj4oUe1lqP X9kvVjAv KnrTSANJ7uNT+/+9udPiKor+XVeINaoUpg5RSP2PIoMNd73K8ehQv9h5rwo506ZvEDg8rulRkvlvWgbbmdkyiz0Fe0QkdgpZovFaOxbXUdeImWz5GFP3ZnsHAtqTpJ0r0JDYkHRLVmT/mNnSr4yBFPV0wcQVa8lpC6A6hTEqZSHj8nVGju3MAWT1kKC0CR8HYS1sWU64Jznkmi1xtg5J1UhtNtvmvI8X+ke+C7hjIrZm7j3IvIqPIlvbF+yMJdRkARKGypZXcgd3pM7jObi2v0wkdkvZCgx+LrCqR/T2gZLpidvdBTdwfytObhC6k4BA3HvhXrwbMmnHjM2YeAxqFXMbD3JhqYcr9bGGeSG3YP5eIqqG/73Zfh0JJRXC/rpSRAHg+EEM4+pP0KvJKTXfMX5JU0J80fCnAb/9W 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: Like global slab shrink, this commit also uses refcount+RCU method to make memcg slab shrink lockless. Use the following script to do slab shrink stress test: ``` DIR="/root/shrinker/memcg/mnt" do_create() { mkdir -p /sys/fs/cgroup/memory/test echo 4G > /sys/fs/cgroup/memory/test/memory.limit_in_bytes for i in `seq 0 $1`; do mkdir -p /sys/fs/cgroup/memory/test/$i; echo $$ > /sys/fs/cgroup/memory/test/$i/cgroup.procs; mkdir -p $DIR/$i; done } do_mount() { for i in `seq $1 $2`; do mount -t tmpfs $i $DIR/$i; done } do_touch() { for i in `seq $1 $2`; do echo $$ > /sys/fs/cgroup/memory/test/$i/cgroup.procs; dd if=/dev/zero of=$DIR/$i/file$i bs=1M count=1 & done } case "$1" in touch) do_touch $2 $3 ;; test) do_create 4000 do_mount 0 4000 do_touch 0 3000 ;; *) exit 1 ;; esac ``` Save the above script, then run test and touch commands. Then we can use the following perf command to view hotspots: perf top -U -F 999 1) Before applying this patchset: 40.44% [kernel] [k] down_read_trylock 17.59% [kernel] [k] up_read 13.64% [kernel] [k] pv_native_safe_halt 11.90% [kernel] [k] shrink_slab 8.21% [kernel] [k] idr_find 2.71% [kernel] [k] _find_next_bit 1.36% [kernel] [k] shrink_node 0.81% [kernel] [k] shrink_lruvec 0.80% [kernel] [k] __radix_tree_lookup 0.50% [kernel] [k] do_shrink_slab 0.21% [kernel] [k] list_lru_count_one 0.16% [kernel] [k] mem_cgroup_iter 2) After applying this patchset: 60.17% [kernel] [k] shrink_slab 20.42% [kernel] [k] pv_native_safe_halt 3.03% [kernel] [k] do_shrink_slab 2.73% [kernel] [k] shrink_node 2.27% [kernel] [k] shrink_lruvec 2.00% [kernel] [k] __rcu_read_unlock 1.92% [kernel] [k] mem_cgroup_iter 0.98% [kernel] [k] __rcu_read_lock 0.91% [kernel] [k] osq_lock 0.63% [kernel] [k] mem_cgroup_calculate_protection 0.55% [kernel] [k] shrinker_put 0.46% [kernel] [k] list_lru_count_one We can see that the first perf hotspot becomes shrink_slab, which is what we expect. Signed-off-by: Qi Zheng --- mm/shrinker.c | 121 +++++++++++++++++++++++++++----------------- mm/shrinker_debug.c | 4 +- 2 files changed, 76 insertions(+), 49 deletions(-) diff --git a/mm/shrinker.c b/mm/shrinker.c index 8e3334749552..744361afd520 100644 --- a/mm/shrinker.c +++ b/mm/shrinker.c @@ -107,6 +107,12 @@ static struct shrinker_info *shrinker_info_protected(struct mem_cgroup *memcg, lockdep_is_held(&shrinker_rwsem)); } +static struct shrinker_info *shrinker_info_rcu(struct mem_cgroup *memcg, + int nid) +{ + return rcu_dereference(memcg->nodeinfo[nid]->shrinker_info); +} + static int expand_one_shrinker_info(struct mem_cgroup *memcg, int new_size, int old_size, int new_nr_max) { @@ -152,11 +158,11 @@ static int expand_shrinker_info(int new_id) int new_size, old_size = 0; struct mem_cgroup *memcg; + down_write(&shrinker_rwsem); + if (!root_mem_cgroup) goto out; - lockdep_assert_held(&shrinker_rwsem); - new_size = shrinker_unit_size(new_nr_max); old_size = shrinker_unit_size(shrinker_nr_max); @@ -173,6 +179,8 @@ static int expand_shrinker_info(int new_id) if (!ret) shrinker_nr_max = new_nr_max; + up_write(&shrinker_rwsem); + return ret; } @@ -198,7 +206,7 @@ void set_shrinker_bit(struct mem_cgroup *memcg, int nid, int shrinker_id) struct shrinker_info_unit *unit; rcu_read_lock(); - info = rcu_dereference(memcg->nodeinfo[nid]->shrinker_info); + info = shrinker_info_rcu(memcg, nid); unit = info->unit[shriner_id_to_index(shrinker_id)]; if (!WARN_ON_ONCE(shrinker_id >= info->map_nr_max)) { /* Pairs with smp mb in shrink_slab() */ @@ -211,39 +219,40 @@ void set_shrinker_bit(struct mem_cgroup *memcg, int nid, int shrinker_id) static DEFINE_IDR(shrinker_idr); -static int prealloc_memcg_shrinker(struct shrinker *shrinker) +static int shrinker_memcg_alloc(struct shrinker *shrinker) { - int id, ret = -ENOMEM; + int id; if (mem_cgroup_disabled()) return -ENOSYS; - down_write(&shrinker_rwsem); - /* This may call shrinker, so it must use down_read_trylock() */ - id = idr_alloc(&shrinker_idr, shrinker, 0, 0, GFP_KERNEL); + spin_lock(&shrinker_lock); + id = idr_alloc(&shrinker_idr, shrinker, 0, 0, GFP_ATOMIC); + spin_unlock(&shrinker_lock); + if (id < 0) - goto unlock; + return -ENOMEM; if (id >= shrinker_nr_max) { if (expand_shrinker_info(id)) { + spin_lock(&shrinker_lock); idr_remove(&shrinker_idr, id); - goto unlock; + spin_unlock(&shrinker_lock); + return -ENOMEM; } } shrinker->id = id; - ret = 0; -unlock: - up_write(&shrinker_rwsem); - return ret; + + return 0; } -static void unregister_memcg_shrinker(struct shrinker *shrinker) +static void shrinker_memcg_remove(struct shrinker *shrinker) { int id = shrinker->id; BUG_ON(id < 0); - lockdep_assert_held(&shrinker_rwsem); + lockdep_assert_held(&shrinker_lock); idr_remove(&shrinker_idr, id); } @@ -253,10 +262,15 @@ static long xchg_nr_deferred_memcg(int nid, struct shrinker *shrinker, { struct shrinker_info *info; struct shrinker_info_unit *unit; + long nr_deferred; - info = shrinker_info_protected(memcg, nid); + rcu_read_lock(); + info = shrinker_info_rcu(memcg, nid); unit = info->unit[shriner_id_to_index(shrinker->id)]; - return atomic_long_xchg(&unit->nr_deferred[shriner_id_to_offset(shrinker->id)], 0); + nr_deferred = atomic_long_xchg(&unit->nr_deferred[shriner_id_to_offset(shrinker->id)], 0); + rcu_read_unlock(); + + return nr_deferred; } static long add_nr_deferred_memcg(long nr, int nid, struct shrinker *shrinker, @@ -264,10 +278,16 @@ static long add_nr_deferred_memcg(long nr, int nid, struct shrinker *shrinker, { struct shrinker_info *info; struct shrinker_info_unit *unit; + long nr_deferred; - info = shrinker_info_protected(memcg, nid); + rcu_read_lock(); + info = shrinker_info_rcu(memcg, nid); unit = info->unit[shriner_id_to_index(shrinker->id)]; - return atomic_long_add_return(nr, &unit->nr_deferred[shriner_id_to_offset(shrinker->id)]); + nr_deferred = + atomic_long_add_return(nr, &unit->nr_deferred[shriner_id_to_offset(shrinker->id)]); + rcu_read_unlock(); + + return nr_deferred; } void reparent_shrinker_deferred(struct mem_cgroup *memcg) @@ -299,12 +319,12 @@ void reparent_shrinker_deferred(struct mem_cgroup *memcg) up_read(&shrinker_rwsem); } #else -static int prealloc_memcg_shrinker(struct shrinker *shrinker) +static int shrinker_memcg_alloc(struct shrinker *shrinker) { return -ENOSYS; } -static void unregister_memcg_shrinker(struct shrinker *shrinker) +static void shrinker_memcg_remove(struct shrinker *shrinker) { } @@ -458,6 +478,8 @@ void shrinker_put(struct shrinker *shrinker) if (refcount_dec_and_test(&shrinker->refcount)) { spin_lock(&shrinker_lock); list_del_rcu(&shrinker->list); + if (shrinker->flags & SHRINKER_MEMCG_AWARE) + shrinker_memcg_remove(shrinker); spin_unlock(&shrinker_lock); kfree(shrinker->nr_deferred); @@ -476,18 +498,23 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, if (!mem_cgroup_online(memcg)) return 0; - if (!down_read_trylock(&shrinker_rwsem)) - return 0; - - info = shrinker_info_protected(memcg, nid); +again: + rcu_read_lock(); + info = shrinker_info_rcu(memcg, nid); if (unlikely(!info)) goto unlock; - for (; index < shriner_id_to_index(info->map_nr_max); index++) { + if (index < shriner_id_to_index(info->map_nr_max)) { struct shrinker_info_unit *unit; unit = info->unit[index]; + /* + * The shrinker_info_unit will not be freed, so we can + * safely release the RCU lock here. + */ + rcu_read_unlock(); + for_each_set_bit(offset, unit->map, SHRINKER_UNIT_BITS) { struct shrink_control sc = { .gfp_mask = gfp_mask, @@ -497,13 +524,14 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, struct shrinker *shrinker; int shrinker_id = calc_shrinker_id(index, offset); + rcu_read_lock(); shrinker = idr_find(&shrinker_idr, shrinker_id); - if (unlikely(!shrinker || - !READ_ONCE(shrinker->registered))) { - if (!shrinker) - clear_bit(offset, unit->map); + if (unlikely(!shrinker || !shrinker_try_get(shrinker))) { + clear_bit(offset, unit->map); + rcu_read_unlock(); continue; } + rcu_read_unlock(); /* Call non-slab shrinkers even though kmem is disabled */ if (!memcg_kmem_online() && @@ -536,15 +564,20 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, set_shrinker_bit(memcg, nid, shrinker_id); } freed += ret; - - if (rwsem_is_contended(&shrinker_rwsem)) { - freed = freed ? : 1; - goto unlock; - } + shrinker_put(shrinker); } + + /* + * We have already exited the read-side of rcu critical section + * before calling do_shrink_slab(), the shrinker_info may be + * released in expand_one_shrinker_info(), so reacquire the + * shrinker_info. + */ + index++; + goto again; } unlock: - up_read(&shrinker_rwsem); + rcu_read_unlock(); return freed; } #else /* !CONFIG_MEMCG */ @@ -652,7 +685,7 @@ struct shrinker *shrinker_alloc(unsigned int flags, const char *fmt, ...) shrinker->flags = flags; if (flags & SHRINKER_MEMCG_AWARE) { - err = prealloc_memcg_shrinker(shrinker); + err = shrinker_memcg_alloc(shrinker); if (err == -ENOSYS) shrinker->flags &= ~SHRINKER_MEMCG_AWARE; else if (err == 0) @@ -697,9 +730,9 @@ void shrinker_free_non_registered(struct shrinker *shrinker) shrinker->name = NULL; #endif if (shrinker->flags & SHRINKER_MEMCG_AWARE) { - down_write(&shrinker_rwsem); - unregister_memcg_shrinker(shrinker); - up_write(&shrinker_rwsem); + spin_lock(&shrinker_lock); + shrinker_memcg_remove(shrinker); + spin_unlock(&shrinker_lock); } kfree(shrinker->nr_deferred); @@ -731,13 +764,7 @@ void shrinker_unregister(struct shrinker *shrinker) return; WRITE_ONCE(shrinker->registered, false); - - down_write(&shrinker_rwsem); - if (shrinker->flags & SHRINKER_MEMCG_AWARE) - unregister_memcg_shrinker(shrinker); debugfs_entry = shrinker_debugfs_detach(shrinker, &debugfs_id); - up_write(&shrinker_rwsem); - shrinker_debugfs_remove(debugfs_entry, debugfs_id); shrinker_put(shrinker); diff --git a/mm/shrinker_debug.c b/mm/shrinker_debug.c index c5573066adbf..badda35464c3 100644 --- a/mm/shrinker_debug.c +++ b/mm/shrinker_debug.c @@ -246,8 +246,7 @@ struct dentry *shrinker_debugfs_detach(struct shrinker *shrinker, { struct dentry *entry = shrinker->debugfs_entry; - lockdep_assert_held(&shrinker_rwsem); - + down_write(&shrinker_rwsem); kfree_const(shrinker->name); shrinker->name = NULL; @@ -258,6 +257,7 @@ struct dentry *shrinker_debugfs_detach(struct shrinker *shrinker, */ smp_wmb(); shrinker->debugfs_entry = NULL; + up_write(&shrinker_rwsem); return entry; } From patchwork Mon Jul 24 09:43:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323990 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 15E53C18E72 for ; Mon, 24 Jul 2023 09:54:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A109B280006; Mon, 24 Jul 2023 05:54:20 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9BF4B280005; Mon, 24 Jul 2023 05:54:20 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 86082280006; Mon, 24 Jul 2023 05:54:20 -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 75485280005 for ; Mon, 24 Jul 2023 05:54:20 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 419B840957 for ; Mon, 24 Jul 2023 09:54:20 +0000 (UTC) X-FDA: 81046045080.22.873CADA Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) by imf16.hostedemail.com (Postfix) with ESMTP id 2AE5918001B for ; Mon, 24 Jul 2023 09:54:17 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=dwKlx1oQ; spf=pass (imf16.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.181 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192458; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=CMESg6KcZ1f/x8j8WNeV/0Ezds9kYbd4Innm/bU0Ooo=; b=2VSnt+2yWPJIT+oNF0HWW6JYscgQaZ+3iXUMdoohXNhi0wYkEcyXITchx8/4LNLAxZduLY Z2KnbmN1PWB6/XONUkH4N9bSgtYZQ1lVT8ppV3WQpdxX1wRzAeUPD/5y5TEeslMN5z1ULJ vjdhW09ak5jL8yyiKgakRGF2gpTqjaE= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=dwKlx1oQ; spf=pass (imf16.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.181 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192458; a=rsa-sha256; cv=none; b=H4m0L055T24zDEiExSDicny84TsvMx7LxSrmcVyDWn5EN9lRIl3mciUkbZUpyTqY/hLfPK 5LLelXHBGkLKgn2IZg9WC1ZooYn0homccLx3y/De7/m8WjlGvVY97BgxlI+bahERaSoPVs g7VO/nspWgUuC4czFX+/JX0587rtCjo= Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-1b7dfb95761so5887725ad.1 for ; Mon, 24 Jul 2023 02:54:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192457; x=1690797257; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=CMESg6KcZ1f/x8j8WNeV/0Ezds9kYbd4Innm/bU0Ooo=; b=dwKlx1oQ8gC3FGBisAur+bDXIIsIsnjGtPcpy7zH7OHDzky5UKxSTJ05GXNV3ifxFh uFNY+8ub7jUvRzU2N0mzwWkyUcySnlCtwLD3JQfZApULo5o50SUYvFf7wmqQeUGg+K3w AqzVxAjjzV5PNtSqJauuHxoQULcgDnOjWhlM27zpLCCDDjhxzzb13/oecO1ube7S7m7P 1safwLAq/c10jFTLUU1Xqd0TB13zkKzwSGxlgMOCVqCgGIAn0g9Om1mA4z6ti880Mese Evcqc6hGgzGiGoOdWdO80KWYfeQwXeXM+h1Vq8tuq+SebTbp5eEFtPf8XLS7hjdlVp+9 zxcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192457; x=1690797257; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CMESg6KcZ1f/x8j8WNeV/0Ezds9kYbd4Innm/bU0Ooo=; b=RCWo/NTQWIP50/P/cRrkQtmpvnhdM1zr9pDlixlKQEkOY5rId25I5zWoWeCXrj8CHW 6d2XjUZHpYGN/JolRoU1OU7OYPG9bg3O8bn0YmT25byD4bixsAwZdZqXWZJP5wS1op8q XlIq56DW2QOVEzKI9C+VsIzonVQA/+1ReVjBm3cd2t51M6pm0iZguWVQ0vHwG5KbnOeA 7IWy4br2UL490fPjo8Z94/GvTWxawJervpGiivXRaKNZEqTl42IduBTJ6OmVPZltZTvS 3ufaVY2Adh7vGyivtyaiGPs7UuFVdfua+mw2swORNXUohDH9MEGGLSXWw0Dgp/r43rJg YnEA== X-Gm-Message-State: ABy/qLZ/mq4RA2mIRmRMtyyfXuOvLsSIfm8g/Tx8B+DbCieo9s7/3mEB U6lrahvoHl8/pWKd26feP96s3Q== X-Google-Smtp-Source: APBJJlGXXWR+7sUNZwfELUHGku1GBmb2Z0Up/m3d12N15W4mEcGvzf3zzmR3Y2DB2osG2hV81y8tMw== X-Received: by 2002:a17:902:dacf:b0:1b8:9215:9163 with SMTP id q15-20020a170902dacf00b001b892159163mr12209813plx.6.1690192456927; Mon, 24 Jul 2023 02:54:16 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.54.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:54:16 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 46/47] mm: shrinker: hold write lock to reparent shrinker nr_deferred Date: Mon, 24 Jul 2023 17:43:53 +0800 Message-Id: <20230724094354.90817-47-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 2AE5918001B X-Rspam-User: X-Stat-Signature: wa8cais4ff9hu4pkhznwe51tpohiw6oz X-Rspamd-Server: rspam01 X-HE-Tag: 1690192457-297414 X-HE-Meta: U2FsdGVkX18FNJ9w3H/nU7K09eGvwCTqHEG+QY6p/IJkNyfmlAIfAm6EIPKY+w3QKfvQYtJe65EQYSts3O5tx3Z4V1N5e0EjuO91QBmVWzLPjYlKmBY+dOfrOKYT4wjJ6R9c6P0irer8RRQyXXJzYrjbtYisxiaQrpBdeF0KGSMIfylIf29iRUC4QWVG4c4b5PbTsttRm0/V+eoS9UxoU3nq7uSCvaK6+6oTIhJQDc4HKSN516oyVlkUGYy0tIZpNwdfh7z/LRux/2JaHmMJLxsm4CFw6aeTju1/iiYyKB882lSzhzMidHIhNuoFsfx0qlvCSgwMMVgw3JnSJ7D0NXVlMnc+GDQhKGPJNRr0YgfWe+IDt0VAu2xbPM5OpJcBjCTkC/aRv3GHsf+TUH/9MlOfCvTEHDApDL6WnLzJ5OXOcSkIhIUI+KJigs7H7i6+8lIz0cRznYJQlh23+wy4vlJK5Tj6rs4yokWeJ9TiOlEk5P3pkDh8LxP2Gxs3R9CiU02T9+Mm6nex1D/M9aYQdoPJgHPteKIHGZlw/VdePOx9w9VCX46bhtDW4Bq4BlD930gjN6Oxn4fxxany/sA4BOF2TeT96CR/fMoecUAKZsZnkp5Kz9iu6Vc+ZTkcdhcKl1KSaEZVmulkcdtP9oy0AmKbtzvfmNy6+h/baufgOYOFIPVTQlIt33m4/MGCrpE3SeSXQD2vyofbxHb9DleqpunpDktMdLw2MBBQmAzASA5DC25e+f0KV3bG7NM6FqBwQVChLVYU4u+ZJfH9siovOR1V4Mp795qH/Ql1MH9WdCw1ZTtZ3XsZ7FYy+GPVwHHX9Jjkbxw7bL26AWm2CeFFC8iOUKtks/+NzoC/kuVUV85UHEV+h6hOK4dQne+t3jUv17Mvws6BKcAEBjJx38oKkjXRCo2fdCeiZcyor2XOc8lrkAmaNpGGEbxWXJtTXaflbs/EA1jXRz/20xyMcH8 NNN45Ngm NjYcSFzP0mYpvrpOqYJ5htc/Qct+mVIkP5ybWzqNIuJJ+FN+KYM9iRtDamZG5njpEjRofbbEA9v440u3UvnAM2BeIU8aJaxDsWty3y+R7OrCHU9ck6zYKpgqS/HrA+UpGNe0Xqgh3cikUvbEWc5C5ryUhBqlZgdfbo87Aj+ypG8heVVb+TpQ5pi14uy5z72agXmZzk8aogir0gkj3saWhObqb9Dc0caTPFFQsl+FbzlhxC3E13+KKdDRoRULdC3jYHIudG7asgLBO8L69vWx/+/JeBire27KPCq1ydztmNl6ljQXTdrCBzSHf+SPMfdWMEXVGXbY+c538htTfTi7E+31XSfnwRsYSPHx1YxSy7pmlTqlXT36tI08fcePwBBvlLq1Gn2v2XF+7Wxq9oZRzUq/NvCh/H/2dy2PVXaZGh5XF2KlGdP/H71aQQ4Ky2EwsYCTwHQjGJS2t0rLwptNV/6QpnQ== 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: For now, reparent_shrinker_deferred() is the only holder of read lock of shrinker_rwsem. And it already holds the global cgroup_mutex, so it will not be called in parallel. Therefore, in order to convert shrinker_rwsem to shrinker_mutex later, here we change to hold the write lock of shrinker_rwsem to reparent. Signed-off-by: Qi Zheng --- mm/shrinker.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mm/shrinker.c b/mm/shrinker.c index 744361afd520..90c045620fe3 100644 --- a/mm/shrinker.c +++ b/mm/shrinker.c @@ -303,7 +303,7 @@ void reparent_shrinker_deferred(struct mem_cgroup *memcg) parent = root_mem_cgroup; /* Prevent from concurrent shrinker_info expand */ - down_read(&shrinker_rwsem); + down_write(&shrinker_rwsem); for_each_node(nid) { child_info = shrinker_info_protected(memcg, nid); parent_info = shrinker_info_protected(parent, nid); @@ -316,7 +316,7 @@ void reparent_shrinker_deferred(struct mem_cgroup *memcg) } } } - up_read(&shrinker_rwsem); + up_write(&shrinker_rwsem); } #else static int shrinker_memcg_alloc(struct shrinker *shrinker) From patchwork Mon Jul 24 09:43:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13323991 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 91549C07E8C for ; Mon, 24 Jul 2023 09:54:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1F9DF280007; Mon, 24 Jul 2023 05:54:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1AA62280005; Mon, 24 Jul 2023 05:54:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0226B280007; Mon, 24 Jul 2023 05:54:31 -0400 (EDT) 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 E65B7280005 for ; Mon, 24 Jul 2023 05:54:31 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id AB3AEA0A04 for ; Mon, 24 Jul 2023 09:54:31 +0000 (UTC) X-FDA: 81046045542.16.C072DC0 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) by imf10.hostedemail.com (Postfix) with ESMTP id C9DEAC001D for ; Mon, 24 Jul 2023 09:54:29 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=W9Prg0fD; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf10.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.178 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690192469; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=F/oK6bm2Afi7WKsfFLPLaSlUUie3UdhMRHX1z52bb4o=; b=D+IGCAs3B706K3n3glFhAxMDAYqbYww+UyJ4b2k3QVqPxa1vR+oK8FdHBKEalz0gKuDtYp uNcT2zeILLjeRow4xoesWyKAqw696IZDe4CZ781YgGsR2JsUXgFx++T+zOC7Cj84htF/mE LiJdqeAcmxeWHAgAhCCvtpfHeF7MewA= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=W9Prg0fD; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf10.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.178 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690192469; a=rsa-sha256; cv=none; b=pIjy/rIsTnxEmbDRFeGLmbeRigcQ+ECuIYkj/k+ef8mkLX1iRdaoIXvrJ1UrrRcHaPFPkK TBpFp/3LgqTAK4L0FwC+C1P66UfUFhLXG5RPNGV8M6h8CEDKHidZDmcd7Hceix2n4GkbZf 8sf+bKZne0tjQfpSUE/pbHNs5JnVaKo= Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-1bb91c20602so2238035ad.0 for ; Mon, 24 Jul 2023 02:54:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690192469; x=1690797269; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=F/oK6bm2Afi7WKsfFLPLaSlUUie3UdhMRHX1z52bb4o=; b=W9Prg0fDQM4GlbOp7Efh7k12YSFxbQAIDSIFUNXpcxiaiwsMOqIS9spB+ZW9R8bqkG 2eUk3vAJhRvOfzbc0lzRJ0pjebzRGDfg8mSr9wE4svx2n4tEZzvgmCHhvlLJZaqcPuTF ajZf7zR02a5nB3jGeTnCYDCOv2ZoK+omuzdRQRiU6Gx6ifxD/5gUipR32piSj3zU9ojE giQ5EbsOhgO/nBwZ9hR/Jy1y+NlQ/pZ5vMWcA3q2UVTMdeqbP2Ck3FtJpUlMmobx8vUB vcMI8GxEI7t1W6HxEfOkf8W6IvWEtYrQu4A2vSBZhjnQNuGVAvXWDybi001tXCfDYH7J BNiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690192469; x=1690797269; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=F/oK6bm2Afi7WKsfFLPLaSlUUie3UdhMRHX1z52bb4o=; b=BzmnqwdASsBxS60+Zik0FIf2MZztciwDAqyAp5w6L2979eFOYsOJ1fnqjP9qpgPuHj grWK0n5JTLHUUyjjSbqRqfarXtRc651x4HoG1Jyf1P3VBpwrWr7L+mA0MUrz2ExL+SYu Xv44nf4jEeoUD/R7o4Dml8wxN7xMj9tkGYoD2iHXKXq+3G1i+IU1Vq9hsKBt25/kbibC vFma0e+XetRNI0AXCA427Lqu6STOjOKQY3Ekh9cDAd7MRc/0Tsx45m+A6WvSghFmy9Qd dyhmTULQE3Bb4UvNt0Iv9CeE9H91EfEW0lwN4C+eGTIFH1z10DykJO5ydMFmQTpzblHF wKSQ== X-Gm-Message-State: ABy/qLa+NcY31iyQpQ6Hxy1vzyFKMS3QxspBnAyxT+orb7Bxwmj/mEkg Kjh3MZbXRz8j08XqN9TB/11xpg== X-Google-Smtp-Source: APBJJlFeSJXGwKM1/4Fx4M034iEieIqp39l7VwM/I3gIgSntmWk50xYbsW/3q3bB2XT8c22SamI2Bg== X-Received: by 2002:a17:902:dad2:b0:1b8:9fc4:2733 with SMTP id q18-20020a170902dad200b001b89fc42733mr12483608plx.3.1690192468770; Mon, 24 Jul 2023 02:54:28 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id d5-20020a170902c18500b001bb20380bf2sm8467233pld.13.2023.07.24.02.54.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 02:54:28 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v2 47/47] mm: shrinker: convert shrinker_rwsem to mutex Date: Mon, 24 Jul 2023 17:43:54 +0800 Message-Id: <20230724094354.90817-48-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com> References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: C9DEAC001D X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: fop8e8tf3xd65x5ztk9jcmbirzergczi X-HE-Tag: 1690192469-697868 X-HE-Meta: U2FsdGVkX1+7YMkDEPXdrY2u1QGkuUIHyUcm+UatN1f85Dpw6IfW7rSf1k4Z3kfxUak8+WbFePeVA7GWZxb/EyJ4LLkEwWuUHekIPOv47TwSSh7z8jgBq6cVTFJVMXbQZSMnF4AS6eeTK3hm2pNdrEz4lnhcI5q+MJNeWI0IqCsUdeTsKsKsnCCSAfRjKn1NRum1BVlcC82T+sh+xkyDTLhQAYBP/RKV/a/H6DLrIRIbaVh5Egt6s25f9K2q7UxFqTlhr9BtEeFXQhVqEoP6LgPZ5hBo7NQWPsnIRemznPDUGHDaZ0x4PrPJdz86wrCTgtJ9gLLVmo9UH8Udd/mpqcdZQ+ZQIjMx+chGee7R4ZG6teIbIJKef3AOg1XEvlqBDiQkL52/A1iWQPlbu/6x7cbWA6+GkGC35OwpsrT2vjSy+GQ+vCndIQkz1AMOkxKFs9/bw/2/q9xxPtXjD14wl3dOZUyrAHtachsWeyRocYjvpa+85WiqAiaPA4I3uNO7mEDDIae9HkrzfewAOh1xzz+lt/5kR0Kpa9Y6GBN74TAePV/t0Xh+CortB/GUywFE59sk3dJtC7Vyl7/Y29LBjGdHMZwXykoSLoY/jBFBlKgD7iGhGh2DP/DbZYXdd7aOvmHGOTwzb/n8ji4TX/CTm2gBRckWywrR1zqaZXKps2/clgw9esYpTYr+1sKrfo1exCRZkNOLx0FxRxJ5FayKQcfBQUmr51KAMeg8JMy+0w1UKQmbb6aHcOa2bXgQ1UXxSfmumdTxvU1JNi3WqJEYYKxZ4q8h5sTNB/JKDW0sk3vg5hDKVzrVsJpmoWsoFxTCQuQg+yN69Ano44QfPNF7c3C//pBi6OG7K+JOUXdbfksMz458tfbQlDMFFjMiGNCH1oICRENC+/Xnlf1Rtn+XttG0bF+dc4aPwP1l+Otuy2YJXJQowYqGXwS35WV86M6Mqz3xcglv/CrXim+XooP aaKMnZ6e /CWkgFcmbzRVycpE9ItNU2AKGWpCQpClCN5S4+h2Huh3cTEm+DRcmNSunO9TqqiZlmVPQziuhwCWGAo1/3e5Re0ZxncDOGFR/rfS7cv4SP8MgSwltenNATkkzPBbuAnosCeZ2t/PiKxftK0HcJtzXzNpIcDTIGtOH4/i7ZDfrSBaMArDCMSyUt026ZEuGt1xLdLX4jVCvBCduEK0bISvSldGjgjnZFwfluWLoBnlUxoVn/ajYiuQELTQU8UYeZFmJZZs3sgfBr9q2wEnQ+BIRkVS2H+mNwpqI/+qS262L6Cj+AMUA95tK+GD1Xs0n33af8u8va7sbfOryEX4e4L8btLtZfIBqTIAJQfDX3UcH3p5s8y59mlNBCQvEAaukdu/0QyckI7TFt6Fgw6OOyj0U12N7wub/qCOYIGWrB/QrcxMhXp6WRM0dT8jdQemWG7iYtMhE+t2NW368xEpUAkEeHfZZBQ== 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: Now there are no readers of shrinker_rwsem, so we can simply replace it with mutex lock. Signed-off-by: Qi Zheng --- drivers/md/dm-cache-metadata.c | 2 +- fs/super.c | 2 +- mm/shrinker.c | 16 ++++++++-------- mm/shrinker_debug.c | 14 +++++++------- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/drivers/md/dm-cache-metadata.c b/drivers/md/dm-cache-metadata.c index acffed750e3e..9e0c69958587 100644 --- a/drivers/md/dm-cache-metadata.c +++ b/drivers/md/dm-cache-metadata.c @@ -1828,7 +1828,7 @@ int dm_cache_metadata_abort(struct dm_cache_metadata *cmd) * Replacement block manager (new_bm) is created and old_bm destroyed outside of * cmd root_lock to avoid ABBA deadlock that would result (due to life-cycle of * shrinker associated with the block manager's bufio client vs cmd root_lock). - * - must take shrinker_rwsem without holding cmd->root_lock + * - must take shrinker_mutex without holding cmd->root_lock */ new_bm = dm_block_manager_create(cmd->bdev, DM_CACHE_METADATA_BLOCK_SIZE << SECTOR_SHIFT, CACHE_MAX_CONCURRENT_LOCKS); diff --git a/fs/super.c b/fs/super.c index 04643fd80886..602cf54eb7da 100644 --- a/fs/super.c +++ b/fs/super.c @@ -54,7 +54,7 @@ static char *sb_writers_name[SB_FREEZE_LEVELS] = { * One thing we have to be careful of with a per-sb shrinker is that we don't * drop the last active reference to the superblock from within the shrinker. * If that happens we could trigger unregistering the shrinker from within the - * shrinker path and that leads to deadlock on the shrinker_rwsem. Hence we + * shrinker path and that leads to deadlock on the shrinker_mutex. Hence we * take a passive reference to the superblock to avoid this from occurring. */ static unsigned long super_cache_scan(struct shrinker *shrink, diff --git a/mm/shrinker.c b/mm/shrinker.c index 90c045620fe3..5c4546d2c234 100644 --- a/mm/shrinker.c +++ b/mm/shrinker.c @@ -7,7 +7,7 @@ #include LIST_HEAD(shrinker_list); -DECLARE_RWSEM(shrinker_rwsem); +DEFINE_MUTEX(shrinker_mutex); DEFINE_SPINLOCK(shrinker_lock); #ifdef CONFIG_MEMCG @@ -80,7 +80,7 @@ int alloc_shrinker_info(struct mem_cgroup *memcg) int nid, ret = 0; int array_size = 0; - down_write(&shrinker_rwsem); + mutex_lock(&shrinker_mutex); array_size = shrinker_unit_size(shrinker_nr_max); for_each_node(nid) { info = kvzalloc_node(sizeof(*info) + array_size, GFP_KERNEL, nid); @@ -91,7 +91,7 @@ int alloc_shrinker_info(struct mem_cgroup *memcg) goto err; rcu_assign_pointer(memcg->nodeinfo[nid]->shrinker_info, info); } - up_write(&shrinker_rwsem); + mutex_unlock(&shrinker_mutex); return ret; @@ -104,7 +104,7 @@ static struct shrinker_info *shrinker_info_protected(struct mem_cgroup *memcg, int nid) { return rcu_dereference_protected(memcg->nodeinfo[nid]->shrinker_info, - lockdep_is_held(&shrinker_rwsem)); + lockdep_is_held(&shrinker_mutex)); } static struct shrinker_info *shrinker_info_rcu(struct mem_cgroup *memcg, @@ -158,7 +158,7 @@ static int expand_shrinker_info(int new_id) int new_size, old_size = 0; struct mem_cgroup *memcg; - down_write(&shrinker_rwsem); + mutex_lock(&shrinker_mutex); if (!root_mem_cgroup) goto out; @@ -179,7 +179,7 @@ static int expand_shrinker_info(int new_id) if (!ret) shrinker_nr_max = new_nr_max; - up_write(&shrinker_rwsem); + mutex_unlock(&shrinker_mutex); return ret; } @@ -303,7 +303,7 @@ void reparent_shrinker_deferred(struct mem_cgroup *memcg) parent = root_mem_cgroup; /* Prevent from concurrent shrinker_info expand */ - down_write(&shrinker_rwsem); + mutex_lock(&shrinker_mutex); for_each_node(nid) { child_info = shrinker_info_protected(memcg, nid); parent_info = shrinker_info_protected(parent, nid); @@ -316,7 +316,7 @@ void reparent_shrinker_deferred(struct mem_cgroup *memcg) } } } - up_write(&shrinker_rwsem); + mutex_unlock(&shrinker_mutex); } #else static int shrinker_memcg_alloc(struct shrinker *shrinker) diff --git a/mm/shrinker_debug.c b/mm/shrinker_debug.c index badda35464c3..44b620b1919d 100644 --- a/mm/shrinker_debug.c +++ b/mm/shrinker_debug.c @@ -8,7 +8,7 @@ #include /* defined in vmscan.c */ -extern struct rw_semaphore shrinker_rwsem; +extern struct mutex shrinker_mutex; extern struct list_head shrinker_list; static DEFINE_IDA(shrinker_debugfs_ida); @@ -168,7 +168,7 @@ int shrinker_debugfs_add(struct shrinker *shrinker) if (!shrinker_debugfs_root) return 0; - down_write(&shrinker_rwsem); + mutex_lock(&shrinker_mutex); if (shrinker->debugfs_entry) goto fail; @@ -196,7 +196,7 @@ int shrinker_debugfs_add(struct shrinker *shrinker) &shrinker_debugfs_scan_fops); fail: - up_write(&shrinker_rwsem); + mutex_unlock(&shrinker_mutex); return ret; } @@ -215,7 +215,7 @@ int shrinker_debugfs_rename(struct shrinker *shrinker, const char *fmt, ...) if (!new) return -ENOMEM; - down_write(&shrinker_rwsem); + mutex_lock(&shrinker_mutex); old = shrinker->name; shrinker->name = new; @@ -233,7 +233,7 @@ int shrinker_debugfs_rename(struct shrinker *shrinker, const char *fmt, ...) shrinker->debugfs_entry = entry; } - up_write(&shrinker_rwsem); + mutex_unlock(&shrinker_mutex); kfree_const(old); @@ -246,7 +246,7 @@ struct dentry *shrinker_debugfs_detach(struct shrinker *shrinker, { struct dentry *entry = shrinker->debugfs_entry; - down_write(&shrinker_rwsem); + mutex_lock(&shrinker_mutex); kfree_const(shrinker->name); shrinker->name = NULL; @@ -257,7 +257,7 @@ struct dentry *shrinker_debugfs_detach(struct shrinker *shrinker, */ smp_wmb(); shrinker->debugfs_entry = NULL; - up_write(&shrinker_rwsem); + mutex_unlock(&shrinker_mutex); return entry; }