From patchwork Thu Jun 22 08:39:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13288473 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 CAF06EB64DA for ; Thu, 22 Jun 2023 08:40:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5C7558D0005; Thu, 22 Jun 2023 04:40:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 54F7B8D0001; Thu, 22 Jun 2023 04:40:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3F0258D0005; Thu, 22 Jun 2023 04:40:09 -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 2B2B28D0001 for ; Thu, 22 Jun 2023 04:40:09 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id D97D31A08EA for ; Thu, 22 Jun 2023 08:40:08 +0000 (UTC) X-FDA: 80929736496.14.AA3C200 Received: from out-60.mta1.migadu.com (out-60.mta1.migadu.com [95.215.58.60]) by imf25.hostedemail.com (Postfix) with ESMTP id EABD1A000E for ; Thu, 22 Jun 2023 08:40:06 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=uZy8afII; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf25.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.60 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687423207; 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=w53NcBmn/IPVgjrXh3hKsvtsk7tDad26SsdH585QToY=; b=OUyCwJnfbRXlnZZZcqNnNI8OUQdRNPZkRMuzoA/TpdShrjw0SCqnCFiwvbhDutqP3OZV92 yJ/FoAtVTnA07AV2iO+NpGg13EYoSi6FVV/Ij7vEn4tJsQVsEICbHP2C4jcOoRw53b9rC5 k56jzz9hcvAAjBHesyxQ7gNfSKOrRsM= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=uZy8afII; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf25.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.60 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687423207; a=rsa-sha256; cv=none; b=imWSf1JFG10IGbX13UseN/axhrBbXCDjj+9tXGWm/HkspIERURXlN8IKENnlNy+Moofrsr 3YExss5r1/rbrix8hmXCCsk0KbDabrzMvPCy5cneHDQTAIKhWWWHKAasmTUum4r5Gesy6d M9EfmZGLPlXMkvG0BllHvAsRt5wd+rU= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1687423205; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=w53NcBmn/IPVgjrXh3hKsvtsk7tDad26SsdH585QToY=; b=uZy8afIIaTcmGAVwL6Pco/ne9cw31HmEUrdetQu4BJTqJA7zlS9UK3eZ5SfX6giO4SjLQy PxnX2CgCeGRGVX7K17r1GkyPshe6W0lM18UnLTU7dFXZJdYjJyuXXudi6+jiw8yCyJhgh6 L8fjpIGb1fLrLDxLVbx48z8ApZZu3BE= 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 Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, freedreno@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-nfs@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH 01/29] mm: shrinker: add shrinker::private_data field Date: Thu, 22 Jun 2023 08:39:04 +0000 Message-Id: <20230622083932.4090339-2-qi.zheng@linux.dev> In-Reply-To: <20230622083932.4090339-1-qi.zheng@linux.dev> References: <20230622083932.4090339-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: EABD1A000E X-Stat-Signature: tpua9u3f48hiepgcib784o3qqy1nx3m7 X-Rspam-User: X-HE-Tag: 1687423206-868242 X-HE-Meta: U2FsdGVkX19gj579LkNz9kS7wCuVMWGz9wggxGhoI6/APi6J+LManXpwA7UHlhbnd7XBAPPmPk+vss0YB6iCgpdWlHu4ub8YQ+m4HOeGwgPP/1T17QFdE3DgWdmMz1lVdK5PnDjxwTx97ec9kCaORe1SlXsjbW+0G+27L+JAkdn1f888IfHJupnmbOxtxI7ISXqVjU3B5B6XMmuWAB4jQA8FIHG3YkKJdeoL2j9+/H8OJlDfnJLfmMi6r+sJ2RPGZc+yWnzWp7qC/eksZy2bnaKuCklwRWhqM9ZcbOYfRrlebiE/pmuJKqdxhpXn5shXdEVtZ7zrFKiIELrsnbTeT8cNxMsoG3QvKhnNFgab0Ix1tBcgSCZZSFYN/lRPuSRbqyWh1qpo0uLyEL+9TdbjmeDgOpHd/QjkI1E4HfcufiCwT+yImA2Q9IzIXBb/dX71qWDL0IvCMXBGj13QD55zvwhlRHnO7JaK4ISuBxSPxFjpE4I494j8Wzqxj4qyjeHIWbg+IdHO/WRmPmvbBfH8pt749L7ZYBE3VLU659jpOr7x6WyyVmUdWoDymrgqW2zww4Pjyh9Y1zPDWa+0Um2MDdrEJoQbn5SLUOvHzAECrg1oyK8u9nAFDvh0Ps9tR/BPiy+lIQP2XsZNSSlFlCg5EnoEU0GYWRaFGLHfdB8ISQHrJ8yumA+C/l1jBmfDQc8hCij18zabPkdCkdkWuybMdqIq9ONyI65dNO+B1Yjy2C2X8/2VT7Eb80r+EE9vQkxlkzQTmVkXmyXsfEFlUj7ZCHvgcfpvXoVA91HF3Kjfj4lWmyIg4t3m8VgEQzO0W5qpyVA4b6bSIJgXT3WJ7s0blVvF/LJASXRckkz9usRm7lInPXPWQfPvWBNNuuq07npxfYiZKdAtNg5sdAPxq/tPALGqbsV+fC+gZHzSbqlZvEJW4CnLEF/1Yc6CyHhAVbMjcj8T1g1C42i4drnWOWg AmxpogDs XBkaKyEqRXFgLREhLkf6Kj1IgffA5sSbnZEUMcx04rrQ0elppy1bhwRjdfsKeGr0pdLkzTzEGNx3IauvI0GhIQme7yGaJmcrKY69QJaeOpBL1zDZEyVK+tPiRB4n8xv+PT4VEuOEL1/KNENnb+6Z880Aa+/zZLSoLfcFIRO/87ZFKnsPzfTob+VVrpA/qZMv9athXsypxDlot1sv4PWMXL94LGnktIPCy6GBcxbjiiOzOoiSzbw3bKuVJ6MvVA61QByVbjpu2kGv3Dw52mKfiHZupC/lQyFZ7dtZJE/H3SRTWnMI= 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: From: Qi Zheng To prepare for the dynamic allocation of shrinker instances embedded in other structures, add a private_data field to struct shrinker, so that we can use shrinker::private_data to record and get the original embedded structure. Signed-off-by: Qi Zheng --- include/linux/shrinker.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index 224293b2dd06..43e6fcabbf51 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 From patchwork Thu Jun 22 08:39:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13288474 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 24274EB64DA for ; Thu, 22 Jun 2023 08:40:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A82318D0006; Thu, 22 Jun 2023 04:40:16 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A31068D0001; Thu, 22 Jun 2023 04:40:16 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8AAE48D0006; Thu, 22 Jun 2023 04:40:16 -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 7C4AB8D0001 for ; Thu, 22 Jun 2023 04:40:16 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 4695380127 for ; Thu, 22 Jun 2023 08:40:16 +0000 (UTC) X-FDA: 80929736832.17.8428949 Received: from out-24.mta1.migadu.com (out-24.mta1.migadu.com [95.215.58.24]) by imf07.hostedemail.com (Postfix) with ESMTP id 8E94E40009 for ; Thu, 22 Jun 2023 08:40:14 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=tMuOJ7tq; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf07.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.24 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687423214; 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=oQpOCkSVz0jjdFm4oEP2NJJ+zKFOVCxqbVN/b6qKeiM=; b=jaw2GNPTYAKK1p1+WCTQoghWdYOtBXomfqjgSKZNACrowfetPGz72jnx7c3o7fp77CBfew 3Zc0GKsVFVDDPrv0SaNrrzwS8pTRYXrIgodI7YTnSzLWhftNZ+c2CMd+Yl1IwRLl1hjdOP UsR87c+aDPhHLHgZbw0Zd94cwYHfwBI= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=tMuOJ7tq; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf07.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.24 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687423214; a=rsa-sha256; cv=none; b=bmnk/ligtzo2XZuwXOK/A8mh+6KiDshpOY/b5VRrRcofRUWvQRHNGiCsphGFL16HzWUW5N QGi7cfRKLHVxk3+2oZ918S45UhQ241nOn5I/sQzn3n12wFTAmCVSQYeRdF49rOEwEq2+Tc IbSY9QWUVeA9MS/y15baFh9q+vdW6bA= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1687423212; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=oQpOCkSVz0jjdFm4oEP2NJJ+zKFOVCxqbVN/b6qKeiM=; b=tMuOJ7tqKqRjBtP6rCX6dHgXMvUPla8/fh86ZTdJ8ioxIJNhWLtWE2XQneYSwy0aJnC1ss Ctc4pKKJIiQUSzscndToOCLVf8LWmRwZZbYvjVdCG6D1dQMZR1dzVK4v6YBfk82aTJO0UT 9p//2RwNkkyklDbHvlR7q6dPTNIpG/U= 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 Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, freedreno@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-nfs@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH 02/29] mm: vmscan: introduce some helpers for dynamically allocating shrinker Date: Thu, 22 Jun 2023 08:39:05 +0000 Message-Id: <20230622083932.4090339-3-qi.zheng@linux.dev> In-Reply-To: <20230622083932.4090339-1-qi.zheng@linux.dev> References: <20230622083932.4090339-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspamd-Queue-Id: 8E94E40009 X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: hbc38hi7ox5txhe987h6pc9nbznekmtc X-HE-Tag: 1687423214-840121 X-HE-Meta: U2FsdGVkX1/SbbAI7oPxVpQ2MLDFkYKcHvlw/n0vvU0wyaMvuKj0x6BKipVu+WZGQWluuZbDbBbTn4Hry3Il26QNkJd55uF/TDqbYuu4G3O23OVL0GCxqwtwjl7KEOgRz+jjd67aVVqbuT+yYB36mbuwcZW3Qx/dFW/o9/VgYFNuG/i9UPGe5K00u2BHM2uhDB+6uuKN1726SmTcAYBskJHMYi0DsJQ5d3GsgsLRPOmR5KFCiYNQZAOCbVfWKDSqzrRPE2CRR9HjnK5nO5J0achkW15e/Nwhpy/7Es034pQZMdKEoZhSmSYLHtqgiaavTqW8EAyAvP1BhG9CSZyYgFVHac1JQYv0OGtYjx3HmmldBJ4afUm9bAeB/dJnqKNwKeExQv0h+UIXo/UdR+OSVbM0UaOZ8GwbIbDnLMWLw4wm1iFEysYFFoIfx763xtOVQFi8FJ9Lln5mq4jSFLRIECMI47zRoq9bdTmkDSh01FwwoQGpmzmufqfCHVdKxbasu7rnQ5RE7sSVAdIrc10zMb6GEyMCBIkqNCFLjMaiIICgLClyWeksKNrS6vmEolLhixYMb48Ix9HZDnvQpe59M+ZH4aXunRqTe5FJwmzy72KxHsAxgOwwEgj6298IxMZ8CZ+mGCfjFq+KCjnQfPwcGVk3xRlJdhVzAg9U3nzyIAVWDxp4TPXPwYU1TOGSHE4gjyi4AuKxwse+SAgEE2eGXFdBt9uuFdZ9RZMpxjmMaEDOLxUH3EDI6BZEcFS8XiInkWBJEEoB79AsMTkHKMVtGYDdCMWKFG7p+OU5Ab+9uV0AX3AJuOmXTLmI8SpHHS6zHvr35eMGv7PqEbq3U3OuD93a2X0PRneqDMo8TNWBaizAFZFGhxhf7EB22KlUu+p70r26F5XgiOZmNGblL0BA9c/aNkOM30wvmfd4iMyzTlKiDZY/QmpP4RDcSI5ZywSabnazZP8kTtf0CO+Y6T/ iPrckWk/ eBd5IQ/aBxpSdlOmOfzzARWSPrKLFPKj3djxiXAwlogPEKT10jITBq/Eyc/b6z/Y8Z9do985+tQ4Y3RGFCA6FeiIGIffxjE1cT9KMAoa3sQBnZxSBxWIACE/2VoY1ll82SGF3+lRVLdPO0LlKdGJWHxAe/6npFsbbLTK0kqVS/dr/81eSuhvay6GL6yelGhMlh4cfkyLLU9Q77I46K3ow6g1f1/OTXCkwSpF4/fBPkbvG4Sa9DwspINUT3O9r6fjpMLL2 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: From: Qi Zheng Introduce some helpers for dynamically allocating shrinker instance, and their uses are as follows: 1. shrinker_alloc_and_init() Used to allocate and initialize a shrinker instance, the priv_data parameter is used to pass the pointer of the previously embedded structure of the shrinker instance. 2. shrinker_free() Used to free the shrinker instance when the registration of shrinker fails. 3. unregister_and_free_shrinker() Used to unregister and free the shrinker instance, and the kfree() will be changed to kfree_rcu() later. Signed-off-by: Qi Zheng --- include/linux/shrinker.h | 12 ++++++++++++ mm/vmscan.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index 43e6fcabbf51..8e9ba6fa3fcc 100644 --- a/include/linux/shrinker.h +++ b/include/linux/shrinker.h @@ -107,6 +107,18 @@ extern void unregister_shrinker(struct shrinker *shrinker); extern void free_prealloced_shrinker(struct shrinker *shrinker); extern void synchronize_shrinkers(void); +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); + +struct shrinker *shrinker_alloc_and_init(count_objects_cb count, + scan_objects_cb scan, long batch, + int seeks, unsigned flags, + void *priv_data); +void shrinker_free(struct shrinker *shrinker); +void unregister_and_free_shrinker(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/vmscan.c b/mm/vmscan.c index 45d17c7cc555..64ff598fbad9 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -809,6 +809,41 @@ void unregister_shrinker(struct shrinker *shrinker) } EXPORT_SYMBOL(unregister_shrinker); +struct shrinker *shrinker_alloc_and_init(count_objects_cb count, + scan_objects_cb scan, long batch, + int seeks, unsigned flags, + void *priv_data) +{ + struct shrinker *shrinker; + + shrinker = kzalloc(sizeof(struct shrinker), GFP_KERNEL); + if (!shrinker) + return NULL; + + shrinker->count_objects = count; + shrinker->scan_objects = scan; + shrinker->batch = batch; + shrinker->seeks = seeks; + shrinker->flags = flags; + shrinker->private_data = priv_data; + + return shrinker; +} +EXPORT_SYMBOL(shrinker_alloc_and_init); + +void shrinker_free(struct shrinker *shrinker) +{ + kfree(shrinker); +} +EXPORT_SYMBOL(shrinker_free); + +void unregister_and_free_shrinker(struct shrinker *shrinker) +{ + unregister_shrinker(shrinker); + kfree(shrinker); +} +EXPORT_SYMBOL(unregister_and_free_shrinker); + /** * synchronize_shrinkers - Wait for all running shrinkers to complete. * From patchwork Thu Jun 22 08:39:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13288475 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 1CABDEB64D8 for ; Thu, 22 Jun 2023 08:40:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9E60D8D0003; Thu, 22 Jun 2023 04:40:23 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 96DD68D0001; Thu, 22 Jun 2023 04:40:23 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 835708D0003; Thu, 22 Jun 2023 04:40:23 -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 6F2698D0001 for ; Thu, 22 Jun 2023 04:40:23 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 362311A0ABA for ; Thu, 22 Jun 2023 08:40:23 +0000 (UTC) X-FDA: 80929737126.14.5F8DB0D Received: from out-32.mta1.migadu.com (out-32.mta1.migadu.com [95.215.58.32]) by imf21.hostedemail.com (Postfix) with ESMTP id 6AB451C0006 for ; Thu, 22 Jun 2023 08:40:21 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b="thZHi/Qo"; spf=pass (imf21.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.32 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687423221; 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=YBVLZ8T0AUSalQOZ4Fae/Pcqr0gB1hnArD6YsGE5SYs=; b=626B+PEnmuHjlWW3drRZkj9VJ2xvfjoYqLUsg6kSt8hBQCz4HqTQ2jBqVVo2R0OrqDW3IT QNEtGY++AR1z865c0aRH+9RoZ6bjeepihD/PU9M4UewtlLbKX8NIgTKeUs3s892eJN5rCf BlWf+6OBAR9q20sM5qFyfE5AZjv2AYk= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687423221; a=rsa-sha256; cv=none; b=nDA41nXXtyJtwgaGJG7bNimurxFQZfilCIu9dtkNmCuEFxkdM9wObxm36teNXA+fO+Qwwg hTy2ryEOZH9Q52XYwkZuWvduvZ1mwZAg8gg143rro7g6J0xKweHJGIrzdfL416IiovxFc9 LswEjnc+xZjTlXUl29wmEFXVKiDN8bA= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b="thZHi/Qo"; spf=pass (imf21.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.32 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev; dmarc=pass (policy=none) header.from=linux.dev X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1687423219; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=YBVLZ8T0AUSalQOZ4Fae/Pcqr0gB1hnArD6YsGE5SYs=; b=thZHi/QoTVPq1csTgIMqpUQ20OvMjdsBsXeaUpPeKH85EW7BiRYD9ttr4T9v65hxCRywKP T9HVLydQbpkQmLM6vybmydCQ1LElnGP36fjdA5gXjDxbPqwbWcRer+Apq8kcm7jlkNu6Y4 ZwS+4SOpSOeGyGFeH5pFLiR5QGJm6Oo= 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 Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, freedreno@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-nfs@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH 03/29] drm/i915: dynamically allocate the i915_gem_mm shrinker Date: Thu, 22 Jun 2023 08:39:06 +0000 Message-Id: <20230622083932.4090339-4-qi.zheng@linux.dev> In-Reply-To: <20230622083932.4090339-1-qi.zheng@linux.dev> References: <20230622083932.4090339-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Stat-Signature: nrpketcxdo3krosirwzrmodtqx97xmtb X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 6AB451C0006 X-Rspam-User: X-HE-Tag: 1687423221-520277 X-HE-Meta: U2FsdGVkX1+fLYiUGO5OJrugD2Njzo+6Q69u81bjwH3cbCD22hbYvxe/O4pk3JtWHmZzCGi1jz3n+FHXQuk3PE3KssHPUF6dYVHi/Pl72+USqTl+7xHcPaoz3l55j9liGMnKOdmZDr0DPftlqAuIU5072SkF8jEjgk0CvSYXOdvhPfihGfsmlAFOe+y27dG3y013O1Ua8egRMVq8XrvTutFxiRmSU1oGRR0nOhwNILhWtZncHK8eJZffdQRVPj2fXtVkhirg25/joiiqGKtvi/Jxe7sJ4N4QAG4lnDRYzFrB1CNGG/cl2RsxPvqeSXs8UZ/WkY0G7blGxB4Ot+1CSY4BLxdeCY3jmyaILajWiy2XIYS9KkBhDDhjDjSi3c0CFFzmo3M/cXiOODzInVj9fi/Y3A5Y7GpRyHjBroZGKvPs9vfppdKHaonZvMnzpNiYP1wwjb9LTE5NwTTkTYrW+IYJ23Db9Z5FThCRffj+CwpuKTOqNlucX8qqV7HT/eyN0/GRZhD64DV7/UTl+fF2UaX33zWvnwH+4L9Dal0y7Vt6N2kM8QOfoAAPlyjuH2R48L1cyrxeO4JImZY2sFOyqikePz7XrBlDeht+D2X0rp+QFGFQsY2BDlBr4jc2s8D2a+Gzivt+WuZnfKo4uP8TqiOMNv/3xBmWMG5IAUofXXKLwqIpXKjMsxwCvgtYUX158Xv+G0ZZdXO9RbGdc3lhbjFcBtJ0sQruHPkVaCAZS0UUnoXAESQfSX/MiNzhSJPyIxXjFpzoKNBAlr33wpQFiV9u+Svde5Y1hs8Dtq1et4o+HDgyhbZXDF5gXGRHURL3AHBDkBxqm3OalC9FmxZRlJLcKfoVKjQuRdyt7Xq1vSK3yRmjorgyncGLY1DNy8uCGcoJCIn7/oOWTre9XNhrWOOOmZkMWmcnAFVs4ym4dVgyjcHuDrfc5rrGrz+mK8ep25oWJ5uAc1Q5VYMRX6e 1scwNwxd 8w2ft7zgsUADzLNMUmqZ00lbwB+rWSl+l3KqXnibXMRuEleZ0c8GZDmh5hRPx/yHN8axrRpsEk+xjm9rw1vdDX+mMP/r6nGCFcmsh/ARhgKZ3BUeVqz1fF0+PXgEzFgPaP56uHh7+rVM4X1Ty6CjhC9zX2xkByhIjSIGjF4Jq/5fHDcf18RrVLZ4vRg== 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: From: Qi Zheng In preparation for implementing lockless slab shrink, we need to dynamically allocate the i915_gem_mm shrinker, so that it can be freed asynchronously by 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 --- drivers/gpu/drm/i915/gem/i915_gem_shrinker.c | 27 ++++++++++---------- drivers/gpu/drm/i915/i915_drv.h | 3 ++- 2 files changed, 16 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..4dcdace26a08 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,15 @@ 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_and_init(i915_gem_shrinker_count, + i915_gem_shrinker_scan, + 4096, DEFAULT_SEEKS, 0, + i915); + if (i915->mm.shrinker && + register_shrinker(i915->mm.shrinker, "drm-i915_gem")) { + shrinker_free(i915->mm.shrinker); + drm_WARN_ON(&i915->drm, 1); + } i915->mm.oom_notifier.notifier_call = i915_gem_shrinker_oom; drm_WARN_ON(&i915->drm, register_oom_notifier(&i915->mm.oom_notifier)); @@ -443,7 +444,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); + unregister_and_free_shrinker(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 b4cf6f0f636d..06b04428596d 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -163,7 +163,8 @@ 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 Thu Jun 22 08:39:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13288476 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 B0D86EB64D8 for ; Thu, 22 Jun 2023 08:40:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 503928D0007; Thu, 22 Jun 2023 04:40:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 48CDA8D0001; Thu, 22 Jun 2023 04:40:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 353368D0007; Thu, 22 Jun 2023 04:40:32 -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 21F098D0001 for ; Thu, 22 Jun 2023 04:40:32 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id DCEE01C8DBD for ; Thu, 22 Jun 2023 08:40:31 +0000 (UTC) X-FDA: 80929737462.10.9A47584 Received: from out-52.mta1.migadu.com (out-52.mta1.migadu.com [95.215.58.52]) by imf20.hostedemail.com (Postfix) with ESMTP id 3761F1C000A for ; Thu, 22 Jun 2023 08:40:29 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=ozPKp77x; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf20.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.52 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687423230; 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=jsEwzAna4029RV6z6obfQmMl2Vwh1p3nS0yc9a+2Lh0=; b=HuHJBaoZjVQGbOOAwcdiAU6sSvt3PX0bJ3Zt4sizn9TCHBKk87xDyzdSWjgPh7cjEZxe18 iE5qvjO++KSiIZKn3hqFa7Qa/XkAk2n/gHjLTvcw28o8pfXR6elGpYV/ojoaOexpt3+nzv SB5ojWNJjaEINOcfuveSKLDcjq1FNek= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=ozPKp77x; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf20.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.52 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687423230; a=rsa-sha256; cv=none; b=tUDLA9BuePNmIoNomgu/3ouDhzJXC9F3ZNGnz+lqvODIK1RECAKo1FkF6aoyFG5Acdsoeg Vs52jABPqQ6/eXs6JWpiV8GAfNVXaunNw3/k4j4irjDfJ3DqWYnizIkNZqdErDT72gMD2d I0jYovmgc5tC0pFopLrKwv43VnVwYnY= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1687423228; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jsEwzAna4029RV6z6obfQmMl2Vwh1p3nS0yc9a+2Lh0=; b=ozPKp77xrQTWFLrt5JY9FY9sDiWzb4NwK8832YIIgpBuCa58zB9A3C1Ik+LPSf5cTp7v3t 9IJAZpdL4oTT3emFrHswJJuH9cCY+iz0ywCM1rCIq+rKQviZQ+esI9j+46bDRakK4PDGM5 vgbb47CgXrJSb8zRxEAcYTBfo6A4am8= 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 Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, freedreno@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-nfs@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH 04/29] drm/msm: dynamically allocate the drm-msm_gem shrinker Date: Thu, 22 Jun 2023 08:39:07 +0000 Message-Id: <20230622083932.4090339-5-qi.zheng@linux.dev> In-Reply-To: <20230622083932.4090339-1-qi.zheng@linux.dev> References: <20230622083932.4090339-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Stat-Signature: ztp6ft5y1zgqbih7697bbcrjyac7ewae X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 3761F1C000A X-HE-Tag: 1687423229-513510 X-HE-Meta: U2FsdGVkX1/p8ic3ax/h3WwnZw+JgF8ZLlvIzlccrrgq01IUeheMA8apwpkT9/Mo2KiyG/oo8y5HxfXTx1jTn8WRB8eGxkuezXVJJo9za0pskLpT/a4bSs08363StzHbaJ7AmkLDdO+42gyxOD0P8wJenpXfLoZM+T4qHAvTISZluLQA/d03CSRFKeBop1sTtnx5wdj/URsthQe24r/JAHDo2+uzhP/kXZYT3tQCwfQEr52dlKWzomDRzZ+GNkrhkm6rvigpG2XQkgps1u/yIZ/m0w7LAYh/MAiNwh+n0Ddc2eHq7HfEBqDTbBs26G3jUvsJC35AB6kXZQvHKxrEV7H8fZ8NurhnlfTTfE0OtdfgLO3BgjStqzPJ8FIdfSnZgyfvqeuSLaS67Z9bVqoXgrJoF/Tqff+lHCjjg+BxPj5vfGMi4GlsQOV+GtDScGUbI7B/zTdVC125TOl2M+rNQtmMZbRp22g2BMX0MGrF+FnxXpW4gyUFlTEjHkxkCmYxIAFOAd3Jie+EBXO//MsqW1g/dx2pwtBYP2KzutpwcGYESM8xozxSZAuzHTZB0yN3EcFS3UzQlqzGuQL4CuKrX5iFWKHjeclfLKzg4ieT2Govta89EnUpHCuhmtzP7FubZVo1O0TGnQZs9XUlYJjPpIOXQnL/0Iz0Gtc4PM2fQCi9otaNKJWP53xtOnvVgloT5TVwiXzCXdepyS6O3NOSmA4E17OBz6KLfGU1Gvy8idHEhZw8QJtF/c7Ek3UOl0iMECXhfrCAc9ETPjo6rroCd42QRGrdmxlinwXgfAMgXgUSIZHiSe/SfU6u7/llQWn4WQU1CSOUyr3A7GFRaaaHrLd0j+1s+/KB7/5yXcTE2aNohaQqHotrQnwelGl3JhoQvSxXpLphdES6ZwafCxhUadhhWQlJ2778FZXT+xjXlEe0WIhESg9TUsknNffOsZz1Mf3Hbl4DuU7kiESYPuI 2XlUPXrU vEgxgv+0m87dnWG1coXF+AHvhK6dWUsyvtYZ55n8b9eOl39M5UfgfKJ4B5bxiif3++FkchJ96SL1QKf76ufIpR4mmqJLRBMWbUI7ienx8LuBh+VrHsnaIPON1cpp16QptSR5GqmimMaPhE//u0dJhGjVY18TcIe07+JBuRwLbOI3hhFKmPlfA5x/6QQ== 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: From: Qi Zheng In preparation for implementing lockless slab shrink, we need 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 --- drivers/gpu/drm/msm/msm_drv.h | 2 +- drivers/gpu/drm/msm/msm_gem_shrinker.c | 25 ++++++++++++++----------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index e13a8cbd61c9..4f3ba55058cd 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; diff --git a/drivers/gpu/drm/msm/msm_gem_shrinker.c b/drivers/gpu/drm/msm/msm_gem_shrinker.c index f38296ad8743..db7582ae1f19 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); @@ -151,7 +149,7 @@ msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan) int ret; fs_reclaim_acquire(GFP_KERNEL); - ret = msm_gem_shrinker_scan(&priv->shrinker, &sc); + ret = msm_gem_shrinker_scan(priv->shrinker, &sc); fs_reclaim_release(GFP_KERNEL); return ret; @@ -213,10 +211,15 @@ msm_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr) void 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_and_init(msm_gem_shrinker_count, + msm_gem_shrinker_scan, 0, + DEFAULT_SEEKS, 0, priv); + if (priv->shrinker && + register_shrinker(priv->shrinker, "drm-msm_gem")) { + shrinker_free(priv->shrinker); + WARN_ON(1); + } priv->vmap_notifier.notifier_call = msm_gem_shrinker_vmap; WARN_ON(register_vmap_purge_notifier(&priv->vmap_notifier)); @@ -232,8 +235,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->nr_deferred) { WARN_ON(unregister_vmap_purge_notifier(&priv->vmap_notifier)); - unregister_shrinker(&priv->shrinker); + unregister_and_free_shrinker(priv->shrinker); } } From patchwork Thu Jun 22 08:39: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: 13288477 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 C0E45EB64DA for ; Thu, 22 Jun 2023 08:40:39 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 613A98D0008; Thu, 22 Jun 2023 04:40:39 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 59CF28D0001; Thu, 22 Jun 2023 04:40:39 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 43EBE8D0008; Thu, 22 Jun 2023 04:40:39 -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 340208D0001 for ; Thu, 22 Jun 2023 04:40:39 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id E8D8AC0A26 for ; Thu, 22 Jun 2023 08:40:38 +0000 (UTC) X-FDA: 80929737756.19.6D9E99B Received: from out-42.mta1.migadu.com (out-42.mta1.migadu.com [95.215.58.42]) by imf19.hostedemail.com (Postfix) with ESMTP id 39E5B1A0004 for ; Thu, 22 Jun 2023 08:40:36 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=H8s1pQs4; spf=pass (imf19.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.42 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687423237; 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=IxIKmzzZi67lG9XSJDebD80o50peuZjA/0wHZiu4cuU=; b=z5nQ31NWzCEI5szBUbxyZA3PuyM5w6zM/f6iRxAf3Fo715gzVJpgrkk+k4vSvg4RjKTthK nCDIGr2kxxijmhoeirc2f107u+vRmGujpHSEkfVMWIL8iexkgwgH1uNieJLfweDzNjpaaO t6A5ItCQ5ZA9JSiHh66wuWcuzViK+b0= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687423237; a=rsa-sha256; cv=none; b=BFn4nZJK0OIOE+YRzzyzN5JuEHmHIUOMkuLDsOjkbSnhiZeebhdhnocL0btutc4MyDPHN8 i3D8WOlTfR8k+KCcsBTQdjGyd+KrdTu69/vh3itMXy9Y0iBCme+/4RxaUc5AyQQ0yo1uxo LQO4nFuqdbFgConkeOTQAy2kjPE0LCo= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=H8s1pQs4; spf=pass (imf19.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.42 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev; dmarc=pass (policy=none) header.from=linux.dev X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1687423235; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=IxIKmzzZi67lG9XSJDebD80o50peuZjA/0wHZiu4cuU=; b=H8s1pQs4VGCf5n+ceh0zwRdlcTNNqN2Py3KDQXuVt1RkndP77diVR1uYW4KzkPkjEIKsys H7QDJljwElq7g1TzIAkvNua8zzlhkxB0H11gFgOBfIt7JJ6zRRMu3JZw1CdR8an7OABUut k6NXXYI9vzZtztWWnS9SmS/quoFvciQ= 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 Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, freedreno@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-nfs@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH 05/29] drm/panfrost: dynamically allocate the drm-panfrost shrinker Date: Thu, 22 Jun 2023 08:39:08 +0000 Message-Id: <20230622083932.4090339-6-qi.zheng@linux.dev> In-Reply-To: <20230622083932.4090339-1-qi.zheng@linux.dev> References: <20230622083932.4090339-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Stat-Signature: oi9a1npd6fd86ecszxhogr1o5fhe4dn7 X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 39E5B1A0004 X-Rspam-User: X-HE-Tag: 1687423236-822338 X-HE-Meta: U2FsdGVkX1//9/Bkx//rfXfEpVoGmvDSF00bnUVjndJoEW2tJsiDbRJSWtRgaxFfXQcmXiArH8v+VvGJOpRXGfVIzDOysFuJBaWM3UTws2//nm6SJUnVyzK3r2U1wjlqEHVn+V42I5AmFMX2o05YooyM1XT4Gz9+3RYV07xROsFFlu6nZA+hmWm5FOc0nQACSxJ9JsS/lE3+D7yCaE0R6lpuF7PFTvkWl8FMPXFymWaHcijzpPskzApex0YDViVr6N9gtB76dBrTc399Wp4AOHYWkxEaSX1DJM2uJJPU/zURsHpT8RFeUpwA4KahGXqMWOn9IF4p+eTOvueyvS900h3PwZoPsVZ7QdFzrcBKMkdugZvPCMonEcRtVn22iknLD8StwpDycgQUtpQO29cAreW5ob9l2Gz+ZIThhtwGmDaiim7sn6gS/uc3kfUsCH9pNSquX7r2MtciJywckOQDYEDSqd9puuV8fUBiw0+PymaKLeLNjLbQiyrLbrV6ELxVcnRNJ9jU3hzSyybKfVviA2D/ffux08Gzx5LJk40W98agyCBmA1Ig1Tr4/jz0DxTE6sjfq9V5lecHAoPVLBr756ZUgBDK4/eoVtlErrWuGFYQWGiGh0OBBgy2q58Jcm46xXxxKKv3lGT78q5gukr0AgkAQ6Sqc7qndi76ZHCEqfnjwhFe0LwYSei6vddiL8mXL8LJmCi8eNlJ2U8WHLVNCeOl0Qf85XFiUuokaWqLuXQTQ+G/rWWgawq0e4XSOrZpKnGjnzj7N2oxpRR0PcXP3GemIryfjNq98v2+mdPu7uGwbN6VbN6+pvtHwgxsL4SzG1ZKjxx2H/53FxThkzaTx20LxiqoGxFW1DtN6DBgQaXZBsl7j9A6SIoQgTH3R4MIyfEPSfiAnLFsWR/yadO+mPssUut4clgAYFTBsHMs9GJjGED9+X1G5nY9FRRR1piVFYs60W+a37XYQai//RB 1o/U+lSq 6Os/rhuJXgjgQdVwQK5nyxi2oE+55RMtIPZsf6DMuj0jW/R2C/j/Hs89iwx4CM2dUNgAPe7AcgGEBImTrGhd0uPGhVC2Znr37FJarHNWhG/U78TjRpcxGutGZ4giaT9BQLl08zf7ytfcb3y4= 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: From: Qi Zheng In preparation for implementing lockless slab shrink, we need 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 --- drivers/gpu/drm/panfrost/panfrost_device.h | 2 +- .../gpu/drm/panfrost/panfrost_gem_shrinker.c | 24 ++++++++++--------- 2 files changed, 14 insertions(+), 12 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_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c index bf0170782f25..2a5513eb9e1f 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; @@ -100,10 +98,15 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) void 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_and_init(panfrost_gem_shrinker_count, + panfrost_gem_shrinker_scan, 0, + DEFAULT_SEEKS, 0, pfdev); + if (pfdev->shrinker && + register_shrinker(pfdev->shrinker, "drm-panfrost")) { + shrinker_free(pfdev->shrinker); + WARN_ON(1); + } } /** @@ -116,7 +119,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->nr_deferred) + unregister_and_free_shrinker(pfdev->shrinker); } From patchwork Thu Jun 22 08:39: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: 13288478 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 991FCEB64D8 for ; Thu, 22 Jun 2023 08:40:47 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3A3728D0007; Thu, 22 Jun 2023 04:40:47 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 32CC38D0001; Thu, 22 Jun 2023 04:40:47 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1F3C58D0007; Thu, 22 Jun 2023 04:40:47 -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 0C2668D0001 for ; Thu, 22 Jun 2023 04:40:47 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id DBBEBC014A for ; Thu, 22 Jun 2023 08:40:46 +0000 (UTC) X-FDA: 80929738092.30.8DBA6DB Received: from out-45.mta1.migadu.com (out-45.mta1.migadu.com [95.215.58.45]) by imf27.hostedemail.com (Postfix) with ESMTP id 324E240009 for ; Thu, 22 Jun 2023 08:40:44 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=SZzQmrgV; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf27.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.45 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687423245; 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=y3F0rUfKL2Xn8vIcW/xqhQA76/McTb+Ba5wKVW4y6Eg=; b=ZvsMyr7Znzb9YclaS1ud5znQKerk/+MXdExQnZ51TGW4m1re8d/8MampOpgoZIkcHKJNhk rg1QW4wRpjnhQWbWuFgvpz/1gTBJr6MWYWCjY0tjJ+CDU5jULXfPswX2YzSpZIx+zEkwhO OeHvFYt9ElmCK4Izuka3+l+cEuOjgkc= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=SZzQmrgV; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf27.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.45 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687423245; a=rsa-sha256; cv=none; b=N8vFfetcpxi3Q2Z2ej/VwckQPTCYTzcrmQycO/ZnWweAAAeLdCVYMshDJPobYUvSBYF/PA XntfNMTxWiF9ZBgVNxwf/WHC+aAU1ySfhQ1ENS7X45sSkv4QXZ+9ys3hgYYHRLlUMgfaZw +ZKffvaPDwSdzf5r5wHrkn+1uTseq2M= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1687423243; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=y3F0rUfKL2Xn8vIcW/xqhQA76/McTb+Ba5wKVW4y6Eg=; b=SZzQmrgVrr0a7kU9rsMmAszGVDK8bckX7bBVvxfPSHWQYejPEvXLZ2HPRkk+tKQrS23erf SuGqFnRsYjeusCXlNlT1ZT5Owe6S80DA/2VI0ueZ+krAGTceisdq13YNha7j9xlWXYO5kC 5nufnpLwSbmgxVLa1H9hFaeIYeAfjGs= 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 Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, freedreno@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-nfs@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH 06/29] dm: dynamically allocate the dm-bufio shrinker Date: Thu, 22 Jun 2023 08:39:09 +0000 Message-Id: <20230622083932.4090339-7-qi.zheng@linux.dev> In-Reply-To: <20230622083932.4090339-1-qi.zheng@linux.dev> References: <20230622083932.4090339-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 324E240009 X-Stat-Signature: ax9jid6ztzwbargymf76jd919ufwep49 X-Rspam-User: X-HE-Tag: 1687423244-839069 X-HE-Meta: U2FsdGVkX18Jywi73tJqaIWaY7Kzv9ZQHyw82V2obBE1lFpKEsitEsq354uNld6keAJ4UGsCA2zbqmYsshuUuQaSWDZ+OMyQe079KYw2PslWy99S/TB8onIA225/681weZie62m6wFX5aQj3wqqrlTbEzq2KshD2/oFu/uAM0zvYbsGF0qXtc/FFH3o9ovu8Oj+pZPD5+vlagEp0s0KYTCt5+fCHVYOKh6Jc7Fuupq8vcBSxZR1Ui81kflPizmMFsM8Ji/CUx2/PwjX1ZRbKA2sKgiCiSqS3IxixO/kRz22wAGSJP3C/cZurwr3e2L1kD1eGHQeV1AOd9s+ubZ//4ZCK7KeqjloGefQhvNs5OZWZblPN8fPOq8AlzFIveCZShgeT3dZKoS7dHNknoDTWS6ag1ybFG81shGELVz9ow/Qn4ko3MXhkIV6+sTEuE439rbRBdRMJjQwGffw972IcJloO5KOB4jIJ95G+zV60HGGB1huO2kkPoKPgPQneIBaBSxASwwkkVa595PgrFQLHWjSHSMYfjQ9f3Q3H37gm0Zz8JpEdFJAIV/dCxzE+SXsxRyhP68t5Numukr0wjhTmhOwuj+2H2zhKRnjAEKHuaPgXUafrhFkHp8BKRXW1NIEsb/t9AMIr/bvsKottpZfO7Larh2J7TPH+OQW/AnMNqo92S+bnSbf2FbTKfwWH1kpVvCv/w1UZIBmLQetg3Ip6kOQ3VVLzhmMGML9DF6UKPM0jPMjxS2+Cuoc5s4FqKcuEki/qhcSR+lqmmNfqT47VbdM88D1ZQ30hA0YkHvtFTi11j/OqYoya1ghTi5J5cJjFaK1ekcFziGexYcQvRqv66fnydzRgIUHRBB+Oc+hRHVsIvnq3Pz+tD/6bDx/HLV+w6fG7kkj/B5t2fi8+nWsRK03Tdr9DeQ8SmKGHcigv+QdRlE09gSMi9qtPgpuAQmlOeUNEPSjTIB0xjByrVbn x+FE/OyF ubf44kAX098ANNA/oME1rdMD+c29yy4Mw91oKcA4StRjiEDaFElybpouH1r0RJGSN7iKmqjZKDpOPtNrOaaquF3uX11q/YuKiaxOSSM8gg1fG4spJ8A7CnyZREl5Z7z66D51BamqXsJ28QA4= 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: From: Qi Zheng In preparation for implementing lockless slab shrink, we need 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 --- drivers/md/dm-bufio.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c index eea977662e81..9472470d456d 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; @@ -2385,7 +2385,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); @@ -2394,7 +2394,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); @@ -2507,14 +2507,15 @@ 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)", + c->shrinker = shrinker_alloc_and_init(dm_bufio_shrink_count, + dm_bufio_shrink_scan, 0, 1, 0, c); + if (!c->shrinker) + goto bad; + + r = register_shrinker(c->shrinker, "dm-bufio:(%u:%u)", MAJOR(bdev->bd_dev), MINOR(bdev->bd_dev)); if (r) - goto bad; + goto bad_shrinker; mutex_lock(&dm_bufio_clients_lock); dm_bufio_client_count++; @@ -2524,6 +2525,8 @@ struct dm_bufio_client *dm_bufio_client_create(struct block_device *bdev, unsign return c; +bad_shrinker: + shrinker_free(c->shrinker); bad: while (!list_empty(&c->reserved_buffers)) { struct dm_buffer *b = list_to_buffer(c->reserved_buffers.next); @@ -2554,7 +2557,7 @@ void dm_bufio_client_destroy(struct dm_bufio_client *c) drop_buffers(c); - unregister_shrinker(&c->shrinker); + unregister_and_free_shrinker(c->shrinker); flush_work(&c->shrink_work); mutex_lock(&dm_bufio_clients_lock); From patchwork Thu Jun 22 08:39: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: 13288479 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 297C9EB64D8 for ; Thu, 22 Jun 2023 08:40:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C074E8D0009; Thu, 22 Jun 2023 04:40:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B90748D0001; Thu, 22 Jun 2023 04:40:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A31258D0009; Thu, 22 Jun 2023 04:40:53 -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 9469F8D0001 for ; Thu, 22 Jun 2023 04:40:53 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 66E4F80AD4 for ; Thu, 22 Jun 2023 08:40:53 +0000 (UTC) X-FDA: 80929738386.02.8DD6FB2 Received: from out-54.mta1.migadu.com (out-54.mta1.migadu.com [95.215.58.54]) by imf21.hostedemail.com (Postfix) with ESMTP id A9E841C0009 for ; Thu, 22 Jun 2023 08:40:51 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b="XJ2b/f93"; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf21.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.54 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687423251; 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=+vImA33fZeTM1PYF4pdKNYjlIIB9YvJgFHxY2Yd6EgU=; b=xvtXN9okXxdkLXyHnPGRzr9fauXlyGr3zdD91OtQITwFTL99k+JSfSiiGI8AwHvJfGvbgB K034ZM50sE9BKy4jres7HS3K7rVY7VPwy0gSTBrC31M9iH8ysf9S3TTJEkqhvjsx/Jf/vU xj0iSsVmOBczQjm17LivYN74xU276Qs= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b="XJ2b/f93"; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf21.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.54 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687423251; a=rsa-sha256; cv=none; b=A/MfxLiky5IIxbqjuAz7ZJB5EP1/JxobhxVgI7t6cNptSlV9E3WQ/XIZCY9DuymwfXvJFO +wKhQZ+KdeceqXOBJ5bMZxy/l9uWSrwHX8b6loAoABmNJ5CdzC66zghyGps+Rxs+CvaTnR 5OtgvIFxdyd+BR3ehExDubbprwqOzl0= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1687423250; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+vImA33fZeTM1PYF4pdKNYjlIIB9YvJgFHxY2Yd6EgU=; b=XJ2b/f93BCyHxcWaDsebGy2CDaVAa7CPWBXx4c1QEI5VZTDPyp/zp8+Tr/BVaJTW4wXOtq IIZBnQdZZsns0g8Xv0V8GQsEaQgo1jYe7j36H8wsShDt9m5MKBHRcZes1lLxnY0D/KqSYq hjrF1/l+OEZW9z9MquhsKQ9biy+7Xxo= 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 Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, freedreno@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-nfs@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH 07/29] dm zoned: dynamically allocate the dm-zoned-meta shrinker Date: Thu, 22 Jun 2023 08:39:10 +0000 Message-Id: <20230622083932.4090339-8-qi.zheng@linux.dev> In-Reply-To: <20230622083932.4090339-1-qi.zheng@linux.dev> References: <20230622083932.4090339-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Stat-Signature: doosfh4ymta3sfehk8f3iw5zhhechtdw X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: A9E841C0009 X-HE-Tag: 1687423251-902999 X-HE-Meta: U2FsdGVkX1/b/lbOqiqUhjumiahqCcbcB9CWNh4JPLpycWExcdlmOYb2QiXD4Dlls+NuJEs8/XoDWkCiNDaZ/gggOrbvTcanP6/J3lDEe60QprzJG+aOFRQ+EsXqMJAM/qxs6BakKhP1FCMMpVTnUblN8//a8HCGQNNpIyI3NC23DTxzyCGN16a7nfvU8xsB0AJ6rKrfImORFsd9x55ADgrwoGNI9L9SL5xa+HJmCBoi/n5VIlRP5MA7Lvbh0t+3YFv4CF0l0Skdg1UX7yLafsFZzqoOmkXhZEoKIHMsQquOzysDWLWkw7GcA0rFcKYGB1y113w4pYeoMHhTZRWS8KdDM5un8mTqxdq5TasqSCQNJtKvJDJSu045thNQaZU14A2MFPnZTW9WPp9MeKnKR5IrYuPEDblAnubJDSTzFQuFAndiWmlEV3894KyQfomoluaMsFYoGy5x4F4Jsom6K1GsthZvjTPI9augqtvJMxHi7qU3eZQ0SFhCg2QPA05RDixJY/8UhUQ869reSUsdLAPGB2o2sHBNqZVVFshFS2hNfQ9WhuBKsfMgfyQQXnHBp4kE6ph/gaOIOYpL1u3d6e0kvPzDJohWSVO5wIziTOqgbQLiReN9LB21bBY8OwINmnHhJ3tQUgougo0LDeHBc/SsEvFlZ1rw053TJgFnjrgBY4a0+cJkZIinfA+/uW1DDCECbaW9wWBPFUnNsAfKcSEmbgtV4+/eybNYaYSKMRX/aoaxIBndL4PIto0mzyY1OsEyDUUmfUoWLu0g3r4GoCWvPVjJ5vIAQdxwlOqqhEl9YeM9zMgXp6MDzqUf+FICxIsToPgd1t1+bgnJZQfBoLi+hFLNRn0P9i/6JJuAh5DLimiZN5xb7YsDA2GGfnl+VvHPieN0Mk/mAcoZsalAsk51LfhNH4mhGhAJ8zcY2M34iVBANokIoUIoIZ2ZI+FepaWAcVGb0aksdObOA3T 4FORG0S1 CRbwk0/oSsP/XLondvLPKNENl9tM894NeYtUxpxRFtWdWAmiK5F8Rx7WsCHRDH995Osq1UsFb7KscuaN+ewMwZd4OsAp5P7HKafCQC6kHmUxB3+CG4vjQ6DfBjYIRN3VFoSXTfK+MSQGJlSA= 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: From: Qi Zheng In preparation for implementing lockless slab shrink, we need 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 --- drivers/md/dm-zoned-metadata.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c index 9d3cca8e3dc9..41b10ffb968a 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,17 +2936,22 @@ 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; + + zmd->mblk_shrinker = shrinker_alloc_and_init(dmz_mblock_shrinker_count, + dmz_mblock_shrinker_scan, + 0, DEFAULT_SEEKS, 0, zmd); + if (!zmd->mblk_shrinker) { + dmz_zmd_err(zmd, "allocate metadata cache shrinker failed"); + goto err; + } /* Metadata cache shrinker */ - ret = register_shrinker(&zmd->mblk_shrinker, "dm-zoned-meta:(%u:%u)", + 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"); - goto err; + goto err_shrinker; } dmz_zmd_info(zmd, "DM-Zoned metadata version %d", zmd->sb_version); @@ -2982,6 +2987,8 @@ int dmz_ctr_metadata(struct dmz_dev *dev, int num_dev, *metadata = zmd; return 0; +err_shrinker: + shrinker_free(zmd->mblk_shrinker); err: dmz_cleanup_metadata(zmd); kfree(zmd); @@ -2995,7 +3002,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); + unregister_and_free_shrinker(zmd->mblk_shrinker); dmz_cleanup_metadata(zmd); kfree(zmd); } From patchwork Thu Jun 22 08:39: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: 13288480 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 4BFB6EB64D8 for ; Thu, 22 Jun 2023 08:41:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E51CF8D0007; Thu, 22 Jun 2023 04:41:00 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DDA348D0001; Thu, 22 Jun 2023 04:41:00 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C7B708D0007; Thu, 22 Jun 2023 04:41:00 -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 B5EFE8D0001 for ; Thu, 22 Jun 2023 04:41:00 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 8C51CB0473 for ; Thu, 22 Jun 2023 08:41:00 +0000 (UTC) X-FDA: 80929738680.08.8C00B29 Received: from out-48.mta1.migadu.com (out-48.mta1.migadu.com [95.215.58.48]) by imf26.hostedemail.com (Postfix) with ESMTP id 641D214000B for ; Thu, 22 Jun 2023 08:40:58 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=pIkop2eQ; spf=pass (imf26.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.48 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687423258; 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=UVc05N8TOGwuUUKoNz87gDn866CFxAmc8E1rcih1bqo=; b=1Y0DhxiuMN3TJ+RamBliy7A/NU4kREVWsmEm0AY3pRE5RC+JW2c/FXWu35pslZItOtyzR/ zUSDz4bAxxLOtoHRN8XA9R1nrTNWDrsn6DXyd8M5/BJLl7okd9DEXWeYIQ/uIpSH1uTbM9 Ht5T/qwo/JtgyNVDkS7AQnNfPDaCd94= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687423258; a=rsa-sha256; cv=none; b=Nlom5Oux05VtbZgDzU8sx2ERUiWAEJtINMhcYs9QojgiOutEAC2ws53EEUfc44SPVWKeGW GP77/8yNQUDRCulOowto/ow+3OsKxgKLgJcnjg+GmP7NnKcLSBQFF9p30O79JrRBhKUPGh ZMxbTSp1wp9IoELNLwT8MtjXiiBvZto= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=pIkop2eQ; spf=pass (imf26.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.48 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev; dmarc=pass (policy=none) header.from=linux.dev X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1687423256; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=UVc05N8TOGwuUUKoNz87gDn866CFxAmc8E1rcih1bqo=; b=pIkop2eQR4AzcvFtx0fKC5u74SQHEPst+ye/aRaIN/XLkXx9ENeAfcG9GarTuIM0jnpWjY wc1vZF+DfrPQmzmeUXoRrgWlfs5txUtNbBR8RjUQS7TF9I112ROw+Fu0aprW/Xjax/gTyt /OzCXh22MrqgNQholBQLGjBVav3coLY= 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 Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, freedreno@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-nfs@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH 08/29] md/raid5: dynamically allocate the md-raid5 shrinker Date: Thu, 22 Jun 2023 08:39:11 +0000 Message-Id: <20230622083932.4090339-9-qi.zheng@linux.dev> In-Reply-To: <20230622083932.4090339-1-qi.zheng@linux.dev> References: <20230622083932.4090339-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspamd-Queue-Id: 641D214000B X-Rspam-User: X-Stat-Signature: dryct683wmsbj33jm7kccd1sujppieae X-Rspamd-Server: rspam03 X-HE-Tag: 1687423258-415998 X-HE-Meta: U2FsdGVkX1+zzf8tgQ8AZ+ZWhkEmmYGAcpcJBDKO8kVzBQu6mPaT8wu4e/7h/TSMPl6BfT7SptlQyNE1Oe61pqenSXi7KVvR2oRc2QuwTSmBaDJA4j9VYPk8HwkVfZIrizetSUKZ90ryr7UYw5It7FHZxA/1HNLgPezSxVTtLO+gKhq51uFxJPf5ry22QpPfZi+yVyI1vrwaHQI80yeVG67jAfxoYjtO8XAirpt6SY6HBrIp+VPwTOiTcnXSQ2Rppn7Fs2C63m2UFCjUGhQLbvfuuD1oE2J88wOWNMbMvg1ijw4fJKHx9k6mo77ulQkDEWvnrkpUMFQmmtMcV1AeyxLzodZ6g5D7g17pm9ker1n5dXzdK9AH9zjI8WswRqauZexGRqGlYwfRGwVlrw4fMUqKjiYQ9e/Zqfb8LWfq8xqaY+d5LqFA1uTS1VmyxqiD5BB7e11q6EKZZOPzOPZRdCGBzoGp9WaQmHyyyqR/fwGnEDzmZVDKUWgBWKeol3bcyWoBrr4JwU3DIJLPX7P7RQXbmR9jCJCYjR8NO3AvYcA/Fxld0hoCr9tGVU/QZ45nwawjG5Kz34xQdDyIPOtLaw7sKmc8w0OoynDtQhtBgFGkGyL8c05/STYJWanZ6n4v8c7iZ2Czlg0sLrMdZDYNCc8a73ikN7q4jGFAGFXQFsKXBKOZZsDjiOjmT182N5jv7A84xilShSZGIAMs3xb3EKRWL5WhPvJPK6azpp2MGI4bckGMTm6HC+jaCUCbzMOi6/DQFLYycJFUXFxXuFr4y7sdIAWr7+hOcw9v1vuWCK/W8xyyYb3tbP9Kv0PrFgGAwOHz3vFBi4TKdFSd28lgXxQbYp7hRUdepbMvMfsc7JbzVLmjsBn9jje1FzfK+rXAVuja8XjgFn19G/zNvzZgYD6NJsiBNt9+WjLQ/m1WhMnjbJjeRxPr2dz/Dyw2Ay/9WU4T+GIspAKaxiE8N/t ocsmX5jV yYjtDClwfgZiw08QPFn/SCDntT5xTL4mnaqcW/N/Dy2MPZ+tcplnBAcQXJUfpFAtRoa6myBWWIL146SLs6SFNgW9Q+R4Pi4YUtw9/0vtsFYeLhOljf/jyysR+YdUQIsdIHVwkcJgcs8QJzgc= 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: From: Qi Zheng In preparation for implementing lockless slab shrink, we need 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 --- drivers/md/raid5.c | 28 +++++++++++++++++----------- drivers/md/raid5.h | 2 +- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index f4eea1bbbeaf..4866cad1ad62 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -7391,7 +7391,7 @@ static void free_conf(struct r5conf *conf) log_exit(conf); - unregister_shrinker(&conf->shrinker); + unregister_and_free_shrinker(conf->shrinker); free_thread_groups(conf); shrink_stripes(conf); raid5_free_percpu(conf); @@ -7439,7 +7439,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)) { @@ -7460,7 +7460,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 */ @@ -7695,16 +7695,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)); + conf->shrinker = shrinker_alloc_and_init(raid5_cache_count, + raid5_cache_scan, 128, + DEFAULT_SEEKS * conf->raid_disks * 4, + 0, conf); + if (!conf->shrinker) { + pr_warn("md/raid:%s: couldn't allocate shrinker.\n", + mdname(mddev)); + goto abort; + } + + ret = register_shrinker(conf->shrinker, "md-raid5:%s", mdname(mddev)); if (ret) { pr_warn("md/raid:%s: couldn't register shrinker.\n", mdname(mddev)); - goto abort; + goto abort_shrinker; } sprintf(pers_name, "raid%d", mddev->new_level); @@ -7717,7 +7722,8 @@ static struct r5conf *setup_conf(struct mddev *mddev) } return conf; - +abort_shrinker: + shrinker_free(conf->shrinker); abort: if (conf) free_conf(conf); diff --git a/drivers/md/raid5.h b/drivers/md/raid5.h index 6a92fafb0748..806f84681599 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 Thu Jun 22 08:39: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: 13288500 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 64670EB64D8 for ; Thu, 22 Jun 2023 08:41:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0202F8D0003; Thu, 22 Jun 2023 04:41:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EEC058D0001; Thu, 22 Jun 2023 04:41:06 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DB37B8D0003; Thu, 22 Jun 2023 04:41:06 -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 CDA208D0001 for ; Thu, 22 Jun 2023 04:41:06 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id A3EB8B0425 for ; Thu, 22 Jun 2023 08:41:06 +0000 (UTC) X-FDA: 80929738932.22.A26A5DF Received: from out-27.mta1.migadu.com (out-27.mta1.migadu.com [95.215.58.27]) by imf05.hostedemail.com (Postfix) with ESMTP id 005C810001B for ; Thu, 22 Jun 2023 08:41:04 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=j+7c8QSW; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf05.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.27 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687423265; 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=Wvf6K8f0ibCbbBPSLzPuI3EieQihggBPVC6NaGqGSAA=; b=J5aqqpivxuIUazqE2+zmaoy8H5ftQAhNDCffIkDlFeSB0ZuAO3QXyw0ZKP5ELQJL1gsHjR Kj/rNTBMrlW+/rsKm5ma/IoR1cp66dNKvwYxiOs75M2WDA0FYatPJhZ8odmZt5picq0hNN UV5K5sWWIdqYoAKLb6VD8kpoGJkg0MU= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=j+7c8QSW; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf05.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.27 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687423265; a=rsa-sha256; cv=none; b=dHQvuooKWcIwlTHDieOhheY+mNpBejJVenptDTtWPB+8MzBOU3sQ6kSUuP4Syt2NnIdXGg DwNceSwlo6cX+buINuYCAzKxDTa2pqI1JyVDqe/bzNQoSisc475FetbyA89dfvMQB5Fwhu 7be6IFdpp9JBJHudd+pY13Hf01d71Rk= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1687423263; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Wvf6K8f0ibCbbBPSLzPuI3EieQihggBPVC6NaGqGSAA=; b=j+7c8QSWFcXyxaKKuBM4GeMmLTA2HAlnyi3uYH8tMDK+AyZd0VP/hv4q2gOUq3N/kRiA4T KkrjKn2/u+BKa5kHjWbSpVP512yylAb6LOOIyPKo6DOnVE0TNZkaj8fFOuY4ak/S6tGJxD J7gjjwvWCDcPoW60P1I/vRMb7nYCHBw= 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 Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, freedreno@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-nfs@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH 09/29] bcache: dynamically allocate the md-bcache shrinker Date: Thu, 22 Jun 2023 08:39:12 +0000 Message-Id: <20230622083932.4090339-10-qi.zheng@linux.dev> In-Reply-To: <20230622083932.4090339-1-qi.zheng@linux.dev> References: <20230622083932.4090339-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 005C810001B X-Stat-Signature: y6qphqzawrhpr5equ3mqx737taubn1w1 X-HE-Tag: 1687423264-599633 X-HE-Meta: U2FsdGVkX1/LkUvOd0INDJ6ZrEUqkzlk39FCPbAWty3JGaNZ/kPGBfOAV/gGehNDolWf+s+m3QPHu5zPunGQswV6LrcXhy6066JlZuLXBmy3ZJLTRTlFYGl//ngxmJB5TcdGGV9CCDRf0M+ZkaR8bYfd1VxQ2u4RFIYnNduZ7/BR0Qnx91JbT6Q8yXtgsQsMwKXCylxdFdK1gKzbJolSIkwZg7JWgreWDeGCruB4sunbaqj8UGIjtdyvC+rjXb2qOdcMtqg57eXihjUho3+x/3Rz6dPz2GKKXEjbE46iNgKz9YZpOpn7k/VEiK8QZvMh0S/cKBNLdaBtRaIZfTSTMs1bNLgqsTto7CSZgfkDNjPcJ6y9vOdzCAne9chRTswzNgvyEADJ/IK/e76sOHr91ltn9S9HavoWnZfbTuZ9yvABRE/ylALgIor9aFUqKAJ3OKWeeevv8yQxoUDHMz3agAY1UJQMC4Pv9wCqtE9Q3rymrTLGTkL5SjBYD0W7nrkxBX9NG142OueKGU0mZc//w23azmO6ZCktKNuMuah5SZCs5b+L9UY9R/86Beia5MDbAvV0aB/Bvb9/WISnISmN5BFSGToMKW2cUTMA2uSmx5zuhwLUVqALMT5nGVRvXJDgSwjnDzDTOw+2BbAoFa9hfr9+ebzvVJCNq70Vq6ofuLPSeC8Nx1LDvDyTehjBuCm4fvihzhdpJJ3nsFlEmquFj18AnA5267209PldxEjOqC7jBJJb/LQqsEd+2nafWiN3ml5mSdHFvwz7QGYgXUitYqbrl1E02paFXTA38J8XsodmlqomsJRjvK6DqZf33LyL7DzkjDi/w+NTXPVSk1fd9mpraeb19RKGSfthGLVShb77XYJwCsQdvNTNacZK+/GIyUVfv0A6OxgZYuVwpXVlOfmZvXGFzGOXNtVhX5VC1WO2fC2lh8xjrEeFhEaCIy4r3m9uLcT54na9cl+Zf4k zM/zkuEF H0CXuTdo9zb6Zu3kABbOt/Xq7yQrUOy2QoYS73Qdi84qVKEQ0chls++J+aJQ7+kFPP4+Vj8EEgFNcoXqqmxjKR0PIOlo2knF8bs2Cpg8HCvAExZi/QYc37ntjUyAoz6JywDTNbXGsAs/uBF4= 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: From: Qi Zheng In preparation for implementing lockless slab shrink, we need 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 | 23 ++++++++++++++--------- drivers/md/bcache/sysfs.c | 2 +- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/drivers/md/bcache/bcache.h b/drivers/md/bcache/bcache.h index 700dc5588d5f..53c73b372e7a 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 569f48958bde..1131ae91f62a 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->list.next) + unregister_and_free_shrinker(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_and_init(bch_mca_count, bch_mca_scan, + c->btree_pages * 2, 4, 0, c); + if (!c->shrink) { + pr_warn("bcache: %s: could not allocate shrinker\n", + __func__); + return -ENOMEM; + } - if (register_shrinker(&c->shrink, "md-bcache:%pU", c->set_uuid)) + if (register_shrinker(c->shrink, "md-bcache:%pU", c->set_uuid)) { pr_warn("bcache: %s: could not register shrinker\n", __func__); + shrinker_free(c->shrink); + } return 0; } diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c index c6f677059214..771577581f52 100644 --- a/drivers/md/bcache/sysfs.c +++ b/drivers/md/bcache/sysfs.c @@ -866,7 +866,7 @@ STORE(__bch_cache_set) sc.gfp_mask = GFP_KERNEL; sc.nr_to_scan = strtoul_or_return(buf); - c->shrink.scan_objects(&c->shrink, &sc); + c->shrink->scan_objects(c->shrink, &sc); } sysfs_strtoul_clamp(congested_read_threshold_us, From patchwork Thu Jun 22 08:39: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: 13288501 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 A3120EB64DB for ; Thu, 22 Jun 2023 08:41:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 32D9A8D0006; Thu, 22 Jun 2023 04:41:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2B6C28D0001; Thu, 22 Jun 2023 04:41:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 17EFB8D0006; Thu, 22 Jun 2023 04:41:14 -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 0576E8D0001 for ; Thu, 22 Jun 2023 04:41:14 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id D649C40B15 for ; Thu, 22 Jun 2023 08:41:13 +0000 (UTC) X-FDA: 80929739226.06.E82A14E Received: from out-63.mta1.migadu.com (out-63.mta1.migadu.com [95.215.58.63]) by imf21.hostedemail.com (Postfix) with ESMTP id 157461C000E for ; Thu, 22 Jun 2023 08:41:11 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=Rt6sUHgD; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf21.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.63 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687423272; 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=d+AM9AbU04XIkkoYvbopAzRmafCipQHXZK8a6yWOVaI=; b=hTdQf3uG8Qyzuw5O9/8Gg82OGs2AB8S7fl1gtVvKlhMFzm0psBs6cv65ynxVfd/lrWdG6t gA1mkj6kWKNZbj0tRJ4rg7hLnqVUX+pADwutmqdykO77d1HUKydu8pQfLLRjmbl4JXv+Je 88ZecEphn4NctnWFaraSmUkNwg5YCWw= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=Rt6sUHgD; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf21.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.63 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687423272; a=rsa-sha256; cv=none; b=CzIq8vfvhQveDfkRwJCWFX320+gf027lj4Ihm+LQu6KndKIccPVB7auZj3BOgKJhJQly/+ fxB9Fk+Gsgk7l7zBwFx4vxR8cRM0GrHNOKWP8J9QUZatBBPxPmvLeb+EhfUTJpktsxts11 RXCdUi+fkZUyL0AHz+QPgEtIFmryWd0= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1687423270; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=d+AM9AbU04XIkkoYvbopAzRmafCipQHXZK8a6yWOVaI=; b=Rt6sUHgDiz0buDFWoRsy0JmrKjzmMej9/+xDlubVaxRuAM1omPxRfGEiGbO/u++P6qT8OT vFU86inmnxKhzxlFlP/jNKu4tSE/qwVDpnPDU6KzPqJgVzjXg8XwfcJz0tLWWkfVol8igm J9AOSXjRae20nP2HluZSJpqMGnfJGyM= 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 Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, freedreno@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-nfs@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH 10/29] vmw_balloon: dynamically allocate the vmw-balloon shrinker Date: Thu, 22 Jun 2023 08:39:13 +0000 Message-Id: <20230622083932.4090339-11-qi.zheng@linux.dev> In-Reply-To: <20230622083932.4090339-1-qi.zheng@linux.dev> References: <20230622083932.4090339-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 157461C000E X-Stat-Signature: 7c19fbcmeeu4u8afjhf8m8zjofis878t X-HE-Tag: 1687423271-999960 X-HE-Meta: U2FsdGVkX19lAwJMJnu3PbqFyynhPcHcyJOoazIy8cy3KZQBl2VC1n4ikUeOUyMfpeLvXePLeAekOd/OzuycL9DKxnX4JLIQL6nnTVawE1ms1NWupF1qE73e/lW+Tqf7a8KRtgg2Oisy824CKGjYKU00gotAXm+jEy3Ju8Omw+CYX0xF9/h2SBBb+HhkEeUG2j4LivxjvBqjAKae867SeGc9j4GkYb9eykJ41PDV6li7sWrGAFpexuj9kmHqkgK4ugsSxjtrwLI3VQZ6xlSv/auHCLD5ldzLt33jBUU7pz4HAl9Ca5VOM3ruunHNHGcBpbyZ7rn3ilJxPSxu4ASlhoXaHfiLjKhJzaUSunniX5CuN5VDAk6sXeTu145tFIg+KJCwfiWFXDpavesqTI/gjqo5OCOkt3j8eattCEw8jsc05y8mmFwJpyQtAhixwH9+j887alKZZMRur172G/WTd48nCMrzXYpAdAzAJOiefU5zQeFk6Kgv10m0h78x2/BMHt0tpW4T2iOH3QuTREhWmi7k3hADkgRb5iylMT7e1HX8qMTxQYD+eIJIB/nxvJ+7ArznIT88/A92gArjSumHBDHsnusF5/7RjbejdEdR9pUezVTOA3VhOWHuRLexAIJgcDuCSoS4LFnaPQJG1jDLkjllTNBR8EcjPg2FXDBUFE8hquCdN5xBHsfSvTBi0rOnkQKT0RjFd7QonyZIczi7ACtL7rKlNzOy4c10D3886+S76pbCHkWjrQvOwk2JaEHw6XEUcwjIJIgXiv9bkaXYvzScJFHOG1wylwKMAbN3g/WtkQptcFYmJD9DBqRE6zYTaZv6KgGMIh1zcs3swZlKQ7xo/PNMr7NUd+1BpNvwhg6Eebg3GD3g+BvJq9TFUBzQbZnmHAN+1WnbYqJ+2SxagItPY/XujzBi22XJrL+aNNbo0g/vJuPwWjF1aRdzLj5DMgJdFLwlthDxHWzIuGd HgPaEokm dJsvDYcWHLuAzfnavbw2mzfm9wOTUIqzzEY7+baiqmGUouiPwwVp9LGOVUreX/9A8tiY/X++wzmsYjieoTgVBNI3LFWrYQk0Z4Ww/ZiQSTofJlA60waR2rKlLz4Wa6MaxLQYENRopbSo2KUZB862HPbBy9/z8qndDJih9QzazY1fHM0O7z07yhVIJ3A== 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: From: Qi Zheng In preparation for implementing lockless slab shrink, we need 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. Signed-off-by: Qi Zheng --- drivers/misc/vmw_balloon.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/drivers/misc/vmw_balloon.c b/drivers/misc/vmw_balloon.c index 9ce9b9e0e9b6..2f86f666b476 100644 --- a/drivers/misc/vmw_balloon.c +++ b/drivers/misc/vmw_balloon.c @@ -380,7 +380,7 @@ struct vmballoon { /** * @shrinker: shrinker interface that is used to avoid over-inflation. */ - struct shrinker shrinker; + struct shrinker *shrinker; /** * @shrinker_registered: whether the shrinker was registered. @@ -1569,7 +1569,7 @@ 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); + unregister_and_free_shrinker(b->shrinker); b->shrinker_registered = false; } @@ -1581,14 +1581,18 @@ static int vmballoon_register_shrinker(struct vmballoon *b) 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_and_init(vmballoon_shrinker_count, + vmballoon_shrinker_scan, + 0, DEFAULT_SEEKS, 0, b); + if (!b->shrinker) + return -ENOMEM; - r = register_shrinker(&b->shrinker, "vmw-balloon"); + r = register_shrinker(b->shrinker, "vmw-balloon"); if (r == 0) b->shrinker_registered = true; + else + shrinker_free(b->shrinker); return r; } From patchwork Thu Jun 22 08:39: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: 13288502 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 CB8ABEB64DA for ; Thu, 22 Jun 2023 08:41:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5EC648D0009; Thu, 22 Jun 2023 04:41:22 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 576E98D0001; Thu, 22 Jun 2023 04:41:22 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 43D8B8D0009; Thu, 22 Jun 2023 04:41: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 350AE8D0001 for ; Thu, 22 Jun 2023 04:41:22 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 151AE16074D for ; Thu, 22 Jun 2023 08:41:22 +0000 (UTC) X-FDA: 80929739604.03.DD737F6 Received: from out-53.mta1.migadu.com (out-53.mta1.migadu.com [95.215.58.53]) by imf20.hostedemail.com (Postfix) with ESMTP id 4EC641C0009 for ; Thu, 22 Jun 2023 08:41:20 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=sVEpWPhm; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf20.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.53 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687423280; 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=HcTjqzLQd71ZVb4pzslJvUSmaexvFgNd/hk+/QuqHC8=; b=DnCeiCfU46Lkc1fSsO7O30tNRXF8EBTUmmFxRdX1D5MiGxIG31JMj77lA1HyZaYhVC76aO T06Iwn801ul5FxGtbAPlZphtCS0Ov6ZKyDRxHMReDLs3gcsAWs/yRVL+1cf6vtlYDbFtpB Ui4vLSYaORyqIcxQrEHBVFWIbSmzX1Q= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=sVEpWPhm; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf20.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.53 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687423280; a=rsa-sha256; cv=none; b=59VuqCGgD20kMjlbDnClt4tXn8F1hC4Ny9o+GwpvmqCe3rhKb5S24zywvBvTMiRu3RvPfO yTB5RCjeS9oNfw2L0FE97RyL85Wny8VTsSO5/vo13556mQl6+RGiulDyf5Pa08T8+24Tot +QgZQBhNAe0LheSgRPzw/N2qy+455H8= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1687423279; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=HcTjqzLQd71ZVb4pzslJvUSmaexvFgNd/hk+/QuqHC8=; b=sVEpWPhmhMKCP77bE/ObQ4vh36qd8p86S9YTJ/PP2t7O5H1rqOFnAADJATnE/Im2pGl6K+ faUcWupfoFI2g9i9atXE0VwhccNnX7/0UsnRt6J1CWpSBlTlvvvrCKJ9m/IyCeNWLYDiY/ S/WTlid4FLB0IXUx+GwQRgK3ap17RFE= 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 Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, freedreno@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-nfs@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH 11/29] virtio_balloon: dynamically allocate the virtio-balloon shrinker Date: Thu, 22 Jun 2023 08:39:14 +0000 Message-Id: <20230622083932.4090339-12-qi.zheng@linux.dev> In-Reply-To: <20230622083932.4090339-1-qi.zheng@linux.dev> References: <20230622083932.4090339-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Stat-Signature: ckyfz3jwyf7iapdzu5p99stiuokkeqjd X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 4EC641C0009 X-HE-Tag: 1687423280-834561 X-HE-Meta: U2FsdGVkX1/MkdoY94SGhV1xo1w8TOPjWblHLdT9JEfg5dxH3cpXqqnLxGSstUIO1QDLshnetfvZCFrkGYJTAxy9kODogSQt+LJ+tIMYULlqeG0ewzPXY/nAxnS/sRjZWs93dfr5QFtYEcz0ye9Mu33/OR8BC9piI01rxiI4+Je7YVmp106j5IoJ6Cc/o0hqGEzX0+pGU6PcKq2UoaCWaMNXkLDSCGmQ7R7cMgGjiO1Q4hNYb/jZIIsOgnynsAGr0QgDPlK8eh7q5D881not/phhgjweC8fIkrRYjzVPg9g9eL886uvehvKIrz3x4jr+yuytmndFmLr9+RRBPfWQqWJ6VPeUJfhbekYK5/s0eHkY98yJX0SRjSHbEl76f6x0OKX5toMnsQSOTS7M7REYJvoNvW09RLOJuMkD40/C8rx0gqkTQLYAsym29ksxectP6AbJtIg+m9u5Yb33XHG+fKIoYKRZeUnx4k46bnyr79PimcCQH/XpzY8l7zDPYa+RwIqSVKXQV57mNAS71zM5vhZB5gG9U4IMt5LtKq/T3QLfXaVdIkeC/ygetw5/tY7QhyXJqroVACklI5nXJx66haCGlLl9W7ofDMKMAc2oqtvSqx+522qpH7vq2TDogRCChGj/iO6O8vgA5gnlEo9kkTmGXLK62+7XECZD30an9CEPZIlPWDqDASnqug6Neq4dDOHwHuV/CG+SkqmuX5w/WoBUXo5mnn2yd/QFytmiBmISb/aJppieSi+6YKG03fhZ5SQdszzPy3Pt+2V1ajnLlSVPLtpOjXqtjTBcxCAjqi03yhjcvsfZez7Wk1O2bKQ73YW2qoYIcVGqEi1J4e+Kt/B65jUAf3dsZXWUK262xOtS/DfmzRYv7O6Zc1+sHCeX3kGXzV9swlaU3qHgvtRuHSm+sgQpWafturinex4DgF+8wfH9oW7r6N3W4JnuIGOZ2/m9WLGVu+hpzmHY7Xs V7o73d59 A72y8dAQa5+eRcm6beW3fEHnLSZeTxqyRFUrGFwp3WrdY4vVaGAtMEovRRlcO5ndtsM7gNgHH/z9GVKNXgyM6lZQD/Ltu/Mftrnk/Bbp4kIf9/pBMMueGGxoJFZ76+vIF/t8X32TRoBlOjDA3LfMPTq82eJidU+uVCKhMmMTCA4gV92NWQa2lJRPeGg== 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: From: Qi Zheng In preparation for implementing lockless slab shrink, we need 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 --- drivers/virtio/virtio_balloon.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c index 5b15936a5214..fa051bff8d90 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,24 @@ static int virtio_balloon_oom_notify(struct notifier_block *nb, static void virtio_balloon_unregister_shrinker(struct virtio_balloon *vb) { - unregister_shrinker(&vb->shrinker); + unregister_and_free_shrinker(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; + int ret; + + vb->shrinker = shrinker_alloc_and_init(virtio_balloon_shrinker_count, + virtio_balloon_shrinker_scan, + 0, DEFAULT_SEEKS, 0, vb); + if (!vb->shrinker) + return -ENOMEM; + + ret = register_shrinker(vb->shrinker, "virtio-balloon"); + if (ret) + shrinker_free(vb->shrinker); - return register_shrinker(&vb->shrinker, "virtio-balloon"); + return ret; } static int virtballoon_probe(struct virtio_device *vdev) From patchwork Thu Jun 22 08:39: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: 13288503 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 6BFB1EB64D8 for ; Thu, 22 Jun 2023 08:41:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 10A378D0007; Thu, 22 Jun 2023 04:41:30 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 094CE8D0001; Thu, 22 Jun 2023 04:41:30 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E50C88D0007; Thu, 22 Jun 2023 04:41:29 -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 D0DA78D0001 for ; Thu, 22 Jun 2023 04:41:29 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id B067D1A08E9 for ; Thu, 22 Jun 2023 08:41:29 +0000 (UTC) X-FDA: 80929739898.10.B7B360D Received: from out-39.mta1.migadu.com (out-39.mta1.migadu.com [95.215.58.39]) by imf26.hostedemail.com (Postfix) with ESMTP id 0D53514000A for ; Thu, 22 Jun 2023 08:41:26 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=lnC4EAsr; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf26.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.39 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687423287; 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=FjncEPBmZQNKtUMkKxyWnfUd+QNedTmj64H5ENjps78=; b=Ff97Ze7HorAFPG/bjyAc4dJjbRoKY88nnCYb2u8hXeVukoC6vfUJTQPd6oRIm1xN8fWkrc C9Mej9UvCohmpjLqVbw7+fZwZoy1PCl8u0byR2r45hbiuMMnTspg63DfZHXLihq8ff6yvp 90KgSlqa7OOTq888XlskPn3ABI0ONjU= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=lnC4EAsr; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf26.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.39 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687423287; a=rsa-sha256; cv=none; b=CWmSMfktYQu+AtghMQm6ngMN8am8Uz6PrOlXR6eUENtatyASQ5iF/fDtuYbiIjiqXT2fhh n+ka/MwTsjN+Q7qArQ6pY3EiafUFSZjoSWj9x7csbr8TjpUMC0E/PCuz/lzEI/YcyBaLaD 6cfVBcxCrvK7nooBI7doAQFBAx9Zb5g= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1687423285; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=FjncEPBmZQNKtUMkKxyWnfUd+QNedTmj64H5ENjps78=; b=lnC4EAsriqzk6Vg3PsGJ6YdZPgIBp18Lhel2S0f8vfVmaxOMpUH7w6LfdRXOcYPLlNu3I3 j/qu/8a2yrW6Gfq3DhvSuklliGWfa6l2tvkk9Ar9ygKDw9xtKuJU8ntv2Opi7E65LTv/fu oxqUNwg0dU4TV+Hlx7tn3EnVt9tgXR8= 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 Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, freedreno@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-nfs@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH 12/29] mbcache: dynamically allocate the mbcache shrinker Date: Thu, 22 Jun 2023 08:39:15 +0000 Message-Id: <20230622083932.4090339-13-qi.zheng@linux.dev> In-Reply-To: <20230622083932.4090339-1-qi.zheng@linux.dev> References: <20230622083932.4090339-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspamd-Queue-Id: 0D53514000A X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: r7hky43z6tfw3awc7jajoitiurftcnw4 X-HE-Tag: 1687423286-986827 X-HE-Meta: U2FsdGVkX1/TNXxpCeppCu9AloETX05KT9qQxzQC5pW/AXnl4jvzNujnEneZpxGgblgobzOdHae0D4+4uNYgzvDyYM3B6J6Y/nXxKqmrsMynAlsjPliiYtXi5cx33sHo/gLxNz7giumS2KlmqoDAPni2DcVB5px1iDBG8U3fv6oVKgbG+G7m9GoUq4kUKhv2gPpdBFEej7n6v6lp4GvjzsVa9xhBR6UlD81NXzLpL03E1KN883bY81D7lYLEs7MG16Y7Bi0ynAd59F89IWGkeCPJp4e9p9xb1vWDb6g7Cl7Oc5BESQHW+ytsRNWuU3Pm6GkZUvo5WEAgdwGWNKLruMFjtUfaBp29KgzGFGrSXxfRMDEzjqqP6844YJDSRm5mTgM7FuQiUSemFIoRTUvWrTLJxIXJKnEOHPF8wFBa4t2sFsR735QsVsMgkjD/2NC01kZNGzgaldL4hfkWSwR9urH7GgNdi1Jpb7ToFYfkhtXHzaFWTDndPaUHi9RLrt1IeNEyNH5vqGoERlp9ce7MF8yYIG9h6VeOulEjgkfHMHSWxdJJsdc3CIiFiDIY2zfJSHB3dqsn5rZIdnElJNEjK5xGzsRq89N/DdbKwE/X69hoK7OPzqC5t7oL1goqPvDMC20igWCeTRW3ep/HJNpwxGikBaDr/39UozJJmoOLXdTs/YcLsTB70xMaOeh+DNWu4FU3PZ/acxWSnxBHmFf3I5/sne2OnN6TAukuuhU5W7rt57dUEcIoOYbnoucfmeTtAo29f8MzgX0yDDpWuOZGjYP0MKexRY8Vc7/+qbhNL8Fk7FJk6WAyh3yxYRh5IXd3cWdROPYpko8fROKmrJVUGLU/0kXfpsnCK/e0n6tU3eFQT7hOY9rhyaUN8vWYpRdWRbndkLjOVkQCz+khpX8q2ibWf4A78HHf0csyPx1IjI0fNMQWnAqZf/4NEnS91cxwO5vXbq2Vcji+KelLwFj N73DC5J4 wYUSw/A6rWVQ/n5t8FH2dPX9V/fLtvB+ty2cUg4UYqCBC+CKv4ypUZzCrCkwSVY9FpEO1i9bk3c/S5ytTVY/CxWaUNxIpWgauFg+aq1KAgHyYYEWUmq1QI7nujQomzjzG2MksUOwPkU5eClzn2IdW6kw0BVAeUQBmpJZtUrVX1OaQ3iQ= 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: From: Qi Zheng In preparation for implementing lockless slab shrink, we need 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 --- fs/mbcache.c | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/fs/mbcache.c b/fs/mbcache.c index 2a4b8b549e93..fec393e55a66 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,8 @@ 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); } @@ -370,26 +369,30 @@ struct mb_cache *mb_cache_create(int bucket_bits) cache->c_hash = kmalloc_array(bucket_count, sizeof(struct hlist_bl_head), GFP_KERNEL); - if (!cache->c_hash) { - kfree(cache); - goto err_out; - } + if (!cache->c_hash) + goto err_c_hash; + 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")) { - kfree(cache->c_hash); - kfree(cache); - goto err_out; - } + cache->c_shrink = shrinker_alloc_and_init(mb_cache_count, mb_cache_scan, + 0, DEFAULT_SEEKS, 0, cache); + if (!cache->c_shrink) + goto err_shrinker; + + if (register_shrinker(cache->c_shrink, "mbcache-shrinker")) + goto err_register; INIT_WORK(&cache->c_shrink_work, mb_cache_shrink_worker); return cache; +err_register: + shrinker_free(cache->c_shrink); +err_shrinker: + kfree(cache->c_hash); +err_c_hash: + kfree(cache); err_out: return NULL; } @@ -406,7 +409,7 @@ void mb_cache_destroy(struct mb_cache *cache) { struct mb_cache_entry *entry, *next; - unregister_shrinker(&cache->c_shrink); + unregister_and_free_shrinker(cache->c_shrink); /* * We don't bother with any locking. Cache must not be used at this From patchwork Thu Jun 22 08:39: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: 13288504 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 BB875C3DA40 for ; Thu, 22 Jun 2023 08:41:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3CA898D0008; Thu, 22 Jun 2023 04:41:37 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 379878D0001; Thu, 22 Jun 2023 04:41:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 241EE8D0008; Thu, 22 Jun 2023 04:41:37 -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 14CFF8D0001 for ; Thu, 22 Jun 2023 04:41:37 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id D613AA0155 for ; Thu, 22 Jun 2023 08:41:36 +0000 (UTC) X-FDA: 80929740192.20.E74DB80 Received: from out-5.mta1.migadu.com (out-5.mta1.migadu.com [95.215.58.5]) by imf22.hostedemail.com (Postfix) with ESMTP id 03CA6C000E for ; Thu, 22 Jun 2023 08:41:34 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b="CxBImOW/"; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf22.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.5 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687423295; a=rsa-sha256; cv=none; b=F9zvFJBA3lv6c2m/pFH3i/h3XfxguzNcv1kDoab571lJumSoX9p2gAxaRLf9VHLw4EbUhW 2Pd31u64xesqRjggh0JwZsegoWmpDlODB0//G2fAjyV+8iUEDs4EuCPHR0IJl7uoTJKTGI efwas87BbSQ5nR2S7TvEBUUC4gFxcgY= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b="CxBImOW/"; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf22.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.5 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687423295; 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=Z+30fV/iN1iesGacxkaE9JIcYdi6gua+ASW3Yz7h8bY=; b=jKCFpcEvUmEG7GoL9ANlZJ/nn188FBGCCLp9spsP9aYkjmLGkGNWZpECNsdqdhn6PlKkYb 4ASAHncxOVEDe8Oe+VcLU2nj9khmwXWM3Tf8rWgo/LhzH5R9fsDqGmYMFZjIE4TOqPn+Gg Sw6U/5lG1Ml1SEHhWH9vwPbRWk3qBOA= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1687423293; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Z+30fV/iN1iesGacxkaE9JIcYdi6gua+ASW3Yz7h8bY=; b=CxBImOW/hNO5cXp3wK8RSStC+rLEzyxL2mXDMqLFN/YsRlgHVgf5PvDLFcI34eWQmCvkd9 3THwQNEw1YQyanLWHvcbM97v3IDV1byn3r24RVpy9KTWBRd2fEO4Ah83WPt2zZsEN37/0a ZxWtreKvDzY3GuQKFUgAQo+IR9ZiSZc= 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 Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, freedreno@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-nfs@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH 13/29] ext4: dynamically allocate the ext4-es shrinker Date: Thu, 22 Jun 2023 08:39:16 +0000 Message-Id: <20230622083932.4090339-14-qi.zheng@linux.dev> In-Reply-To: <20230622083932.4090339-1-qi.zheng@linux.dev> References: <20230622083932.4090339-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 03CA6C000E X-Stat-Signature: 7oc6d3c7mk3hdn48eee3ucx5kizuni7y X-HE-Tag: 1687423294-258421 X-HE-Meta: U2FsdGVkX1/sDT3g0q1DYB1J/t1EEadtmIzQgdiva1oSoJpV2xt2A0cQxZLurJFqkqJfWaDFksC2EZ8P39iV6DczDUKrHnRNW8ue8qnuX9ZH49j+82una0DYYwHa4z3LTFoyvocEPbIKZT9ppPFM/hO/cZAjb4il5Zogw23QQMaEwlB6xk8p1mPGvgoADVyHXLZlPucB3XROgJ+x7JM/hPo248DDBNnz3dhO7haiknNY9mZpyXUUD8wa+vVxI8a/xSoupxXbbwDxKJrIOcSPaXa50/z7cm3pFnBx7+k2Qa7//Z3BVwMb0WXUk2TdGn31BXAScl5mzCmKTOC9mjSuV7eeZKAUGsbCdne52aokIIPucypjIxiN4V7Q1n5+/d5f7juVLmAEyuawfHqGQ345utKoIs06xFheUdP06C5LtxpbRalzPmwpI5/g3o+/nKT0+1Akx2XpB7rJv71XzMjCzQRfswSgXZkVLyzoEi1uX0fdW/tlrdM2XsHdnxKa8Ft1NnlMStmof9AkZVLf/QFx89wlSaDecxgU5sKVUyWgHc8VHd6hUte2cJK+/xNI8ue/h4lZgoEZiGt8jODFXgoXuaNli0g5wllJWeTv7t74YaiBOfNMPSn1CCD/GaBmEbmaGI6Td3iaOYlDDjiSiFwFsfmEVwY6Ax5kiD9JPfPAwUIMSeItGzdjxUSS4SRo9GNi3Lf2Tr2BquBytb6+Qn1YiCc2Mdfj60nTYiu4f1BnYWXuSR92da011o2jPRLs7dgz28eBzxh8XtTIvj/1toVYV8nbGUfqnuakRkCTHywGbQfWXf46u0LBRpdx/zdwP/xhvBEeoPUyg3BcHVxcs72/s+KEblteky5ZYbHR/YgqnaS2RIY5dKnxvlUQL+5sGD5jXwdpts5k32He1cofQkNrVwZbVDfY75Vmfn6qjbbILfDO+HdVF/QU4Yg4jEJWwYWJM/vVBzoeBH7qrb77vN5 +scToGk/ HwrQzHQXI+D9wwOJEpWSAqwEIGItkcZY8G1WAZ/+cductGTVfLY1kChzJNIhCgh9bo8TYtJdxylkABmG3UndZvvD8wE9bmdydFCuSmSCiVpIVAv3R8YUZ9JLeNvBCInde9z5tybV5+L8M1Og= 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: From: Qi Zheng In preparation for implementing lockless slab shrink, we need 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 --- fs/ext4/ext4.h | 2 +- fs/ext4/extents_status.c | 21 ++++++++++++--------- 2 files changed, 13 insertions(+), 10 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..fea82339f4b4 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,15 +1689,19 @@ 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_es_shrinker = shrinker_alloc_and_init(ext4_es_count, ext4_es_scan, + 0, DEFAULT_SEEKS, 0, sbi); + if (!sbi->s_es_shrinker) + goto err4; + + err = register_shrinker(sbi->s_es_shrinker, "ext4-es:%s", sbi->s_sb->s_id); if (err) - goto err4; + goto err5; return 0; +err5: + shrinker_free(sbi->s_es_shrinker); err4: percpu_counter_destroy(&sbi->s_es_stats.es_stats_shk_cnt); err3: @@ -1716,7 +1719,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); + unregister_and_free_shrinker(sbi->s_es_shrinker); } /* From patchwork Thu Jun 22 08:39: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: 13288505 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 9728FEB64DA for ; Thu, 22 Jun 2023 08:41:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 17F698D0006; Thu, 22 Jun 2023 04:41:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 10A0B8D0001; Thu, 22 Jun 2023 04:41:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EC5AA8D0006; Thu, 22 Jun 2023 04:41:44 -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 DB3B28D0001 for ; Thu, 22 Jun 2023 04:41:44 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id AB467A0A66 for ; Thu, 22 Jun 2023 08:41:44 +0000 (UTC) X-FDA: 80929740528.20.DADB692 Received: from out-50.mta1.migadu.com (out-50.mta1.migadu.com [95.215.58.50]) by imf06.hostedemail.com (Postfix) with ESMTP id E94AD180003 for ; Thu, 22 Jun 2023 08:41:42 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=eaBfLuYl; spf=pass (imf06.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.50 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687423303; 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=ZLNuxoO8OfzQ143YMlcA0F6NJodxjDO0V9/3OfXvbSM=; b=Zvohy6S7WU+dcqapF1fmOeUS3PxXqy/zCK689Xxo+6RJvyDDfMxAvKbv3LjbzQG30kMBaV H7nEoVRLnBOqsMAQIGGqXTxoQoKiaYUh5b3Gyql6l+8N/rE8ydD9267B/hOFmJ6ubOhUCU jDpFaO1IpDiJGqkmSeE/WMe3QTFRsK0= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687423303; a=rsa-sha256; cv=none; b=5bfpX2CZA8JDzSOJKxpBULlDCztuifSpRUqVVbG7kWZhJtz84klpDpCnO/MzUJcV9KUyc+ nVYO0jqjA2Y00jQ8JuLCiRTlRDTSP5hKFtkUyMjP9i7SZymdARyS+bm3S9vXU8fMVbvDmQ RLQEFMVbHq5N92V7iZoHTGDFOW7p0OI= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=eaBfLuYl; spf=pass (imf06.hostedemail.com: domain of qi.zheng@linux.dev designates 95.215.58.50 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev; dmarc=pass (policy=none) header.from=linux.dev X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1687423301; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZLNuxoO8OfzQ143YMlcA0F6NJodxjDO0V9/3OfXvbSM=; b=eaBfLuYlG6JJ2wMMRdNKZV0a4oqFx389/61anHjbefPzDibHOLkGJsZGY3Dw+v+qevkyK3 n26AVKRC06swwDMkLHX6VNJZ04EnOeXYs8Wqh3UkaG0D+Uk7NLaSF2pUsBmfBvjexois2k MY254J8+7levLBhOGEbqDhRxPfqcIBs= 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 Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, freedreno@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-nfs@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH 14/29] jbd2,ext4: dynamically allocate the jbd2-journal shrinker Date: Thu, 22 Jun 2023 08:39:17 +0000 Message-Id: <20230622083932.4090339-15-qi.zheng@linux.dev> In-Reply-To: <20230622083932.4090339-1-qi.zheng@linux.dev> References: <20230622083932.4090339-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspamd-Queue-Id: E94AD180003 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: znhy38hq6wo16y5bceq1z9q1k7it1qir X-HE-Tag: 1687423302-450217 X-HE-Meta: U2FsdGVkX1+Mbg0+YqyKQizigN4oWlbXAx9IyLjhhvCLZiKp9a5AXYWBnxpHbvVMp+CRSezSRjQl2z7DBFXyYHlC6pG5LYHokUV0KAPPzkUOjSsh2HILYhy5PwejMoRnGRsCe/8ki+WZQQobZhfcx0fa7OgMexPy8fv7+P7l9Oc6rj0uwawLE5uqRQSRE02VTICdizpMr4jbfISDiA+dgLepJP/FzbIibdMxHc/I0xOrQQo9equTpDe3oKHCz9xhG4dccXmATyoHTlsZSgWTfYZQUWPjuPNu7Tfoak8Xrm0u7nEzHtCZR5N/irkDiU2wKdTYdODcTrEoe5m+2O2HnAVQHfk52Q/efMN/M3tNrjAD+wtjvNI3KCPHCYgr3QuFH8DeFhC2HBJVhw1jX3rTfgU+ko+cigrXM87Y5WnP0Rb5qzcmVMaU3fHYUvdSjFQIodGgHOU8U9cGaCWyAqqx1IWJAU9rsjTVh+Q8K6b5mEztSCWdh+vJCNFJguuFrL5jCB20ZyuGLsivtSIYAfrBWHkTiIC7a4EzrODwkHQuSaEGrJsVQ54rF1jKUgo+FKzhtIeZBKGQljsRtNdCL9cMHs0kxbisdMeS0d64+/1f3lN4Eo86CLJXgguvTYauh+zHIN9ZU6i7Jw+2nn6d1/3QTcdRftpUJZ+tN2W1iULygh23s6H8V0Qtl5ZBm9yALhhi7AGWiidJ7KUnsf1mGlY17X4Baq8CpuXcKzEvTlORvdMrHIkRyjSY4QBgYj3wnoYPPSUWfPgGj3mI4Q6g0s7c+dzpIYh1bwG5jJvH+nxjBhRILCXrufLcwR+YZyzU2MOvXPCN0eirOjHKx8P5qkMojtEs8edGMxz0IJHNJ/2UP2yhciIc9HSV+O54qeUSfilWGe3SfkAd/KyV1o4UNU+HjFZwo6ybu26UAJ2EGjDOKK0C733llQq7dGdt+bjSxO2Ty6Y149piAE68jZx2MW/ gxjDfyva ktTcudP2dxh4KO68rk7aaYpLV+kbJjPnc/beA8Y52nZa3OBjXoLpui6NHsNyEn4UlwX9jLjaheTVIGBzNBAEVLE72mI4igesp5PhH4craRcpZId04rA2b2bO+N77XicfpR8BVzP2k/yGcr2s= 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: From: Qi Zheng In preparation for implementing lockless slab shrink, we need 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 --- fs/jbd2/journal.c | 32 +++++++++++++++++++------------- include/linux/jbd2.h | 2 +- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c index eee3c0ae349a..92a2f4360b5f 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,21 +1415,27 @@ 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))) { - percpu_counter_destroy(&journal->j_checkpoint_jh_count); - goto err_cleanup; - } + journal->j_shrinker = shrinker_alloc_and_init(jbd2_journal_shrink_count, + jbd2_journal_shrink_scan, + journal->j_max_transaction_buffers, + DEFAULT_SEEKS, 0, journal); + if (!journal->j_shrinker) + goto err_shrinker; + + if (register_shrinker(journal->j_shrinker, "jbd2-journal:(%u:%u)", + MAJOR(bdev->bd_dev), MINOR(bdev->bd_dev))) + goto err_register; + return journal; +err_register: + shrinker_free(journal->j_shrinker); +err_shrinker: + percpu_counter_destroy(&journal->j_checkpoint_jh_count); err_cleanup: brelse(journal->j_sb_buffer); kfree(journal->j_wbuf); @@ -2190,9 +2196,9 @@ int jbd2_journal_destroy(journal_t *journal) brelse(journal->j_sb_buffer); } - if (journal->j_shrinker.flags & SHRINKER_REGISTERED) { + if (journal->j_shrinker->flags & SHRINKER_REGISTERED) { percpu_counter_destroy(&journal->j_checkpoint_jh_count); - unregister_shrinker(&journal->j_shrinker); + unregister_and_free_shrinker(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 44c298aa58d4..beb4c4586320 100644 --- a/include/linux/jbd2.h +++ b/include/linux/jbd2.h @@ -891,7 +891,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: