From patchwork Mon Sep 11 09:44:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13379111 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 01AA6EE7FF4 for ; Mon, 11 Sep 2023 09:50:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 93ABA6B0254; Mon, 11 Sep 2023 05:50:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8EB146B0255; Mon, 11 Sep 2023 05:50:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7B38A6B0256; Mon, 11 Sep 2023 05:50:32 -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 6CCD76B0254 for ; Mon, 11 Sep 2023 05:50:32 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 4EE98A094F for ; Mon, 11 Sep 2023 09:50:32 +0000 (UTC) X-FDA: 81223846704.07.7C0551C Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) by imf19.hostedemail.com (Postfix) with ESMTP id 837731A0017 for ; Mon, 11 Sep 2023 09:50:30 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=XkB4nN0v; spf=pass (imf19.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.175 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1694425830; 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=zo3gwSlnAgdCIAM8+Km1Wnkr2Sb5aG/GGOSO40v1R40=; b=JzV3oB/YMzvOd8+knfJx015WrLLdvBTe4YVA39OsdwGRxsf5e+Hl1T3D+Yohn0lFJbqKmE XwOVZZGojaOzRg7N6kbygpmjk+FOwgNDdRpfpoDwNiFixLI2bH17OcZflKUAJ+p/uI/gG+ rEH5gDfEel5sk9OVkCtK6Lc04zAaK80= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1694425830; a=rsa-sha256; cv=none; b=154J4t/J82YYDaRvGx3YMvJpOETXIYsKIGnvZmfvDI4RXbL//tH3dBDycr2FVKk9ch69m8 nRQDw78yLhomqcd9uJmUs+yLAHvwDOR5OMbqgoVdeu/G5Ii+oXTH/RWMDIbTVyZcyijG4k GFSjTSpREB8t9KrRTpkraDNbUhP/1DI= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=XkB4nN0v; spf=pass (imf19.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.175 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-1bf11a7cf9fso7705075ad.1 for ; Mon, 11 Sep 2023 02:50:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1694425829; x=1695030629; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zo3gwSlnAgdCIAM8+Km1Wnkr2Sb5aG/GGOSO40v1R40=; b=XkB4nN0vpiPWGbxMoH9hqsAnzBIGiaC2S0D9o5rk/OsU9NJdYeOJHLdxpLkZ4654/q Reoz+bqyihTXcrEr+n1CS5eC7Z7cicTK/PwmEuE0Yb0Zqk1QsEopw8/A242KaDvY/jW6 PWaE/okaN3BTYYDkkzH/YNshlTQqIOmKyiggHs7utWZxbpYZVYIfX0Hwea3lbHQrB+p5 nqxDyreSIY5vEtjtkpuXl0QQ9izsiD88VQi9BjnNAIJkoFVIU8+ushaLW5hhoY+MZjZu 65feQgjW6PQOAGuV0QpaQXaWPnX0B8LxYuzHNWX8oiF43IkisNjk2GNGzke/6NWuDc5O U8Tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694425829; x=1695030629; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zo3gwSlnAgdCIAM8+Km1Wnkr2Sb5aG/GGOSO40v1R40=; b=JjUGDtfx5Kt3Jvl85mKHSByG1t21cBc8RTxc1Cr4Rh0fJnoEvIOT2JBaN1NbaAtTe7 1XNaAkzorbn6zC3PheQZFWhGx9PXOiNWAeS8iCjjYhz8EQD6+/SrqSwTQBrksqCmJLvs I9Akbz6LcOsY5cTqepOsIBteaBfra9/E/AdDrwtzRAoLp/sJY2ui5Fr1PB5tbM3noafx qnBfQOnTXVXiE6s/102q+2znrcnxR4FCkLKOb2oXHA7qwlowMRu36K83Za3lBcqtzYfz BDZ7pO0wcHtdfAUfGroLNbItAlgtQbs9mgCRAuk8FwXAUfehs6bPwQx+8wafsuyX0pEG d84A== X-Gm-Message-State: AOJu0YyKSjbbeHxHAs5p+Q35VAN501K83M8gbi2L81kCaSgQk4TXuH8j /aSTYJlbimg+2R76iQSOpV5FPg== X-Google-Smtp-Source: AGHT+IFNoTrjJm+fp4U1vSlQVTleS+unGs/tsdGogu2eeyLNoBUX0+IqdGoKEJL6WqzJ7IldBIpdvg== X-Received: by 2002:a17:902:e849:b0:1bb:83ec:832 with SMTP id t9-20020a170902e84900b001bb83ec0832mr11264528plg.2.1694425829510; Mon, 11 Sep 2023 02:50:29 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id az7-20020a170902a58700b001bdc2fdcf7esm5988188plb.129.2023.09.11.02.50.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 02:50:29 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, Qi Zheng , Muchun Song , Chandan Babu R , linux-xfs@vger.kernel.org Subject: [PATCH v6 35/45] xfs: dynamically allocate the xfs-inodegc shrinker Date: Mon, 11 Sep 2023 17:44:34 +0800 Message-Id: <20230911094444.68966-36-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230911094444.68966-1-zhengqi.arch@bytedance.com> References: <20230911094444.68966-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 837731A0017 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: ox8b1yecgtitrrxbw6ehr1nqnmypahgu X-HE-Tag: 1694425830-489881 X-HE-Meta: U2FsdGVkX1+Y0weyKgoK6/YgsbEbMnVtUZ0su0eQk+wbtlegt1ilIXbshqDtgsyDkUA34QgvBcg78O1XWQR19j/Fm3SOlzSszdKzl5NYG6hbLWCEqtkAaArcEpAsA5dAx8d1Wu7Sa55MNzecoXWxR082xaZGeZCbjqufD0s5veawEgzKA3CEH+J3EhtSiW75+UYVBLe0qdXGtVc4NG/JZtQYfp0eI7qh1P79upgnrXQX63AqJO3HZpNFQBXjDuB88Vlc5Wbt2f6kVBlO/QtI1bkp/O2hxw/IXMFcTZi26FqpnrCjH3qi12ygepFCCGNPdkuLjFbQt7/1DQTxFFK3zywuTZbS7KuWVEy6v/bw1yUTMfQc/f7CpeTwGrSv2qmuJ3Ka/0hEaSjxFzQUZ/7WPAgr3TI8/+bUgTR/VKsdXg1lGSfzAornK699cFi/YGBx6jdEPlQ9QBJEm2rBPFUGMYcsDGaijL19obwZ4yzAmIsvxI8rk3z9ubHytS1cCteDN5Js9WIEg13ER4MimZPMv08YFnJEIU4aqweCRazGzaaLfvyNp4CJ9IcKyenfMUVworh/owP8B7qDAA8VfQ4P258SNkGUgwDb3JbFOBxCoybVPKfDt0Z+Xebd7RKbksFQ2kSX7/LHauG+da934v9nnz7VxjrAouO4Xtn8rHLtannQBRpLrGiEqLWBxLlbbgfhGz3eCUIHX6ydPhPSfB2XxRgy2uNuVU1ZnpTN8ESstc7W/N9+o9RO1zN+OJW4bwTEhT9jPRf9tcGGqKH/gHWDkMXR8n5g++9P6qR0H+8W5HIsZ0Iz/5Ux4qnWa44zKafKiD3OptQeZpfo8ERJg4lY5UNv8trFokBn25FS0/TdIQLq2ijQ7zQkFkjOQvrubZw50kxXLtXxvEL7Cini4H0QaIzcWKxtqKpTu+Uu3kRRb0W6BrC0lSQLDrkFaD0sblR7vIwMmG74q26e3cUjRjX DILIEx2z QOiCGAP0ySrrhp9wKErcjLNMCrZtqiCy0zDuuw/pRlorsu/ktU7LUoZByByt5VzjX84CRru38H9GwWaB261KpycwBMOOMk3iQbg59CULeX3nu/pgMFuFC7t1dyjjJTod12SlLCKpoFbsG48hmmkfZ0w3agGfnaULxwVmG5O8ikTXE4y3JEuV+tt8KLOJeL3eFg0E62OdYQHXdbZ0AL/8k4JZ8YH7xQp60EIXZHeT+PmASgA8ceMVOFoto9E2AJD5zG+ep03q7MTspMSWyKzTjTBc+h7Nw6hyQqn13QNHZhOrIy16zL3NIgdt52PMWyEWsK/w1IDjgVwXKTyEzOsSYbZrtCE7doznms8rgtMMiOnqeGe2urXESwP/6hxcTtonFMAWVIYz0ux+H1893xox+sg+aarBx4YTOi2j3VxxW8776Tzn9/g+QSYTkzuEFIjP7UKG9PDnSLwVooFRbT6tpt+y2Xkh6QGvEsVmVco0XKLIzD/IKJe4ewFYugQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the xfs-inodegc shrinker, so that it can be freed asynchronously via RCU. Then it doesn't need to wait for RCU read-side critical section when releasing the struct xfs_mount. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song CC: Chandan Babu R CC: "Darrick J. Wong" CC: linux-xfs@vger.kernel.org --- fs/xfs/xfs_icache.c | 26 +++++++++++++++----------- fs/xfs/xfs_mount.c | 4 ++-- fs/xfs/xfs_mount.h | 2 +- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c index e541f5c0bc25..aacc7eec2497 100644 --- a/fs/xfs/xfs_icache.c +++ b/fs/xfs/xfs_icache.c @@ -2187,8 +2187,7 @@ xfs_inodegc_shrinker_count( struct shrinker *shrink, struct shrink_control *sc) { - struct xfs_mount *mp = container_of(shrink, struct xfs_mount, - m_inodegc_shrinker); + struct xfs_mount *mp = shrink->private_data; struct xfs_inodegc *gc; int cpu; @@ -2209,8 +2208,7 @@ xfs_inodegc_shrinker_scan( struct shrinker *shrink, struct shrink_control *sc) { - struct xfs_mount *mp = container_of(shrink, struct xfs_mount, - m_inodegc_shrinker); + struct xfs_mount *mp = shrink->private_data; struct xfs_inodegc *gc; int cpu; bool no_items = true; @@ -2246,13 +2244,19 @@ int xfs_inodegc_register_shrinker( struct xfs_mount *mp) { - struct shrinker *shrink = &mp->m_inodegc_shrinker; + mp->m_inodegc_shrinker = shrinker_alloc(SHRINKER_NONSLAB, + "xfs-inodegc:%s", + mp->m_super->s_id); + if (!mp->m_inodegc_shrinker) + return -ENOMEM; + + mp->m_inodegc_shrinker->count_objects = xfs_inodegc_shrinker_count; + mp->m_inodegc_shrinker->scan_objects = xfs_inodegc_shrinker_scan; + mp->m_inodegc_shrinker->seeks = 0; + mp->m_inodegc_shrinker->batch = XFS_INODEGC_SHRINKER_BATCH; + mp->m_inodegc_shrinker->private_data = mp; - shrink->count_objects = xfs_inodegc_shrinker_count; - shrink->scan_objects = xfs_inodegc_shrinker_scan; - shrink->seeks = 0; - shrink->flags = SHRINKER_NONSLAB; - shrink->batch = XFS_INODEGC_SHRINKER_BATCH; + shrinker_register(mp->m_inodegc_shrinker); - return register_shrinker(shrink, "xfs-inodegc:%s", mp->m_super->s_id); + return 0; } diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 0a0fd19573d8..aed5be5508fe 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -1021,7 +1021,7 @@ xfs_mountfs( out_log_dealloc: xfs_log_mount_cancel(mp); out_inodegc_shrinker: - unregister_shrinker(&mp->m_inodegc_shrinker); + shrinker_free(mp->m_inodegc_shrinker); out_fail_wait: if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) xfs_buftarg_drain(mp->m_logdev_targp); @@ -1104,7 +1104,7 @@ xfs_unmountfs( #if defined(DEBUG) xfs_errortag_clearall(mp); #endif - unregister_shrinker(&mp->m_inodegc_shrinker); + shrinker_free(mp->m_inodegc_shrinker); xfs_free_perag(mp); xfs_errortag_del(mp); diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index a25eece3be2b..b8796bfc9ba4 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -221,7 +221,7 @@ typedef struct xfs_mount { atomic_t m_agirotor; /* last ag dir inode alloced */ /* Memory shrinker to throttle and reprioritize inodegc */ - struct shrinker m_inodegc_shrinker; + struct shrinker *m_inodegc_shrinker; /* * Workqueue item so that we can coalesce multiple inode flush attempts * into a single flush.