From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 16F98C04A94 for ; Wed, 26 Jul 2023 09:33:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8F3828D0001; Wed, 26 Jul 2023 05:33:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8A35D6B007B; Wed, 26 Jul 2023 05:33:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 76B6C8D0001; Wed, 26 Jul 2023 05:33:53 -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 634D26B0078 for ; Wed, 26 Jul 2023 05:33:53 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 3EAC2A012D for ; Wed, 26 Jul 2023 09:33:53 +0000 (UTC) X-FDA: 81053251146.26.7F1C359 Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) by imf14.hostedemail.com (Postfix) with ESMTP id 4840E100011 for ; Wed, 26 Jul 2023 09:33:51 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=QJhhRpaT; spf=pass (imf14.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.210.170 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=1690364031; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=0oULOTnWb1HIc+jcDQkyDbPD+ewEuK6cRZsxNFZBJHs=; b=0EFfgB+5K+MdqrCcfq7oANNLIhDEpuK7+Vdv5/HgB0d4gBk8ElQ0psTL7+ax9xJPLft9HL RE/G3QhKuUkwSJH1bCq+cH2/Js56xH3QY++k87u29XEj9ybcblgDHlUnRIlCHmW3aQ6iqc oVlquglSudpb/W91/9gzT5BaQXqlT/U= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=QJhhRpaT; spf=pass (imf14.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.210.170 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=1690364031; a=rsa-sha256; cv=none; b=dRHDt585MpDF03t1Mozr4qS84MYC61doAy+1VMDOkprESyiIZ4aDb4GCxwrr9abaQU6eG8 NTSKrSEgtwdMeP7KHwn7o90MxrY5TioHjIQ92jS6TkCk74325AVp5dl/ULMLZ1jl4TM5PA cbKtL3CVUapd3lorZqFnp/BHS75AOsk= Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-66d6a9851f3so1489403b3a.0 for ; Wed, 26 Jul 2023 02:33:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690364030; x=1690968830; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=0oULOTnWb1HIc+jcDQkyDbPD+ewEuK6cRZsxNFZBJHs=; b=QJhhRpaTfMAfucHkCz2d9TS31hpYk30s2kQKv681O+Sl1mLTZQhZq5VKb4l9mXe+gX 5Eax6ixoNcCSNY9H6aAkwgnBd/g9cM9X43ylT+UhHbYekfmlgjo/JXqlix6WaCFQ7jVV 2D4QfnYhGItzA17GFTgozRmivkdC7H5IwsXEWhmkOBzQK5UpXhnT6Ls+I4I3tsoeozxU 24KbqK2Cq3sIWZ8RaqWYBiX9Q9627K0AND5qR2t9+dtM8IjHsDiCPK6lh5ggLgTON/bP sMZVbirBGOz1XlXtXsxmGmw+9U7+KmVQpZdmOnau0hPanAHKCfZx0jR+DbnWSE4a/7ep yq9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690364030; x=1690968830; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=0oULOTnWb1HIc+jcDQkyDbPD+ewEuK6cRZsxNFZBJHs=; b=V67BY4BRQUwZLUgrhXd9DOFSwzlKHPnBFQrwgYp+66J232wkrQTL+la5iQuJqYDCmu x0rlph6UiZxuJwLYlJWOtCsLy8bIayMVuYiHytHaAHwpKyjLLZvhL/PNaPdWW6j+91pV rD2G71Fj3wo1evGaRqNVkj/bt1xOulSNcORHs0NJp99oMrF823wqSEiOmZbcpXeDvUhn bDvjGYnT0d177qa+BPzp6Sac+c6BNitaKWe5ZF7fjfVeEuGamNe18nenmIYigLmXkkx9 ahtKMwIBOL4N3CcTRx/zyWAnjiuWI2XdE4QY7DirlvnkQu3LWkiG22S6spV40xJ9KBFY aeOw== X-Gm-Message-State: ABy/qLbGIBicNDqQMA4lBXHjJ7DjlVm4bcim6Mf3011du3UrfmQ6hHLG QezP8leCawF0Pce2o5IsR0lvUQ== X-Google-Smtp-Source: APBJJlG8LKe8O0SB++JE7Hsj6dMankp6b2TdGG8KZmgQCX7ZvwrXNm6kysx08G1J6PXDjDRRJyafNA== X-Received: by 2002:a17:903:32c9:b0:1b8:5827:8763 with SMTP id i9-20020a17090332c900b001b858278763mr2037984plr.4.1690364030014; Wed, 26 Jul 2023 02:33:50 -0700 (PDT) Received: from [10.70.252.135] ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id n5-20020a170902d2c500b001b89466a5f4sm12582766plc.105.2023.07.26.02.33.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 26 Jul 2023 02:33:49 -0700 (PDT) Message-ID: <0f12022e-5dd2-fb1c-f018-05f8ff0303ae@bytedance.com> Date: Wed, 26 Jul 2023 17:33:36 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: Re: [PATCH v2 28/47] bcache: dynamically allocate the md-bcache shrinker Content-Language: en-US To: Muchun Song 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, 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 References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> <20230724094354.90817-29-zhengqi.arch@bytedance.com> <4ee26da4-314e-0517-5d9a-31fb107368ef@linux.dev> From: Qi Zheng In-Reply-To: <4ee26da4-314e-0517-5d9a-31fb107368ef@linux.dev> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 4840E100011 X-Rspam-User: X-Stat-Signature: fks7bfoxeyjdob6dex6yuhqt5yj77dcq X-Rspamd-Server: rspam01 X-HE-Tag: 1690364031-148528 X-HE-Meta: U2FsdGVkX19FS9nyuCLzp0gVAWjjjdUKDEJeZfidIKQKxMof7HXcobmHY4qTyEGV0lXZJZbhWD1bI/LvzqKgyADZhLAuU3v3dMqGtl2myATmc60f8fq2A25Kstiz9oiGfKasmXb14tNnG0zjZU/0oxJzHxlee9piZ1OMzk29cu9xQQ0OvYuFZOa2FLB8ARs96k+bD23+lLUopn1SVvtzSByK3Rf6DtDNvpUy+1vA+k/IEA86OhFDWheyeAxJD4OQaclnv+RCld/TwG6rISgYHBvcC7ZXvwidIt6Uju9KAqXu72jzSc1r17pnC/fhUwJPjorzL0oMslcstYtgcz6Nl/dTMCf5AjD/fns5n+zzSSSniTEkoWXKj5/+9HQR5KX6MVnjDPg0Vnb0f4Km1tbVzZ084IktoVX3IPxy8RKJbyEcpB0Vw9fI+tKCKzpFVRESGZ5qxS5DraltTPmThAV4d/4hrO7AXss4fRns3Em0hOtKmo6ksaNa8oPjNJ/5d1eKmmLY0pDhtljvQIwJJyXpA5GyCVl4YzPUI3l182eV8cdgmvgj/aw4UdbGUGCkkPQcXuMF3/jSK6LfFot/B7QLukS42kUT2V86hcUEOdytEp4HAFgu0OsxzbsRCkPqgtjd6n4lY+/9U1SKPFXxnDGLJxtewe+zciuGjOvO5NuQ1+ZPT7dfaGQD5jWPOw2SUr1kItMMlKdFcfYgbOUz5dqvECAk301XULvOiAYgbQ4p2wbHx/RfxpDnJpV0IWVpHPA0/QdiQmtMVhjWwHRXH/KgLc3RFVqJ1zoEWthSZd/TPkcEJGwAIXlK2rNLH/Du/7lTeAS08vc/deeqxBZSklygZnp48c2YMFjAXC+8iBb3LVdVOnG24CseTJDeRma/Aj9vaPNL6weI4ELnPIQiE21h4C1NDJ6yS94OW9idS9DUfP02heuHNaN2VTOacbPZvh8kxsmvEuie9HpjVcs07Sg t/SCPYxU 3qijoQPeYV5eQpCBodq4nqHMhH1+6pTCl+wgJA3nt9j47h3+5Z5PZvhv9/LLJZ5WLC7eX/+lDFGfx0Ox+TGL4M4pHowWY+sRZDW+06Q/VKBYEmQUC/djXaKxxy7RH4yIz52RSm1qwJM1632e3u/n5R/mdhzRxx75VbmCMKfWFT+tr+ypj4IIveX8+WAdKkNjX97yuXmxRZBLolJZvbPsMqfSbqPxWvT9DP/RGSEz0Vim51q2qVCQjZbOmAmeaSRtt0VXrobY9cyLxPdi710RvZ2QSeUbjcs0EX1WnxZnE5zVBUgeKEWUfunTsjs7Nzx54uO5vIfFBr9dLrbZLsBlmKghPQhmbilWHBfE6pFs4M0M8jbHLuzNKqPpkstAXbPuI+XMLnuqasi7W4fDr+Q6UZXhEjVLWpXIHCHQ+duibZjH1Yw8= 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: On 2023/7/26 15:32, Muchun Song wrote: > > > On 2023/7/24 17:43, Qi Zheng wrote: >> 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; > > Seems you have cheanged the semantic of this. In the past, > it is better to have a shrinker, but now it becomes a mandatory. > Right? I don't know if it is acceptable. From my point of view, > just do the cleanup, don't change any behaviour. Oh, should return 0 here, will do. > >> +    } >> + >> +    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, >