From patchwork Mon Aug 7 11:08:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343339 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 C6291C001DF for ; Mon, 7 Aug 2023 11:10:12 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2F37A6B0074; Mon, 7 Aug 2023 07:10:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2A4216B0075; Mon, 7 Aug 2023 07:10:12 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 146648D0002; Mon, 7 Aug 2023 07:10:12 -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 016D06B0074 for ; Mon, 7 Aug 2023 07:10:11 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id CA3A4B2107 for ; Mon, 7 Aug 2023 11:10:11 +0000 (UTC) X-FDA: 81097039422.09.132ED10 Received: from mail-pj1-f43.google.com (mail-pj1-f43.google.com [209.85.216.43]) by imf12.hostedemail.com (Postfix) with ESMTP id 025094000C for ; Mon, 7 Aug 2023 11:10:09 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=LtcpivNS; spf=pass (imf12.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.43 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=1691406610; 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=r8W8qq2Uz0spC2GoySlMERPhgmOL8aWRmiOXTDM010g=; b=MnHQMWwYGoX6TirmJ3Cb2lk4lSejClbSuYGhhtmyp4CD+It2mBJqx7RmSNOYFHX0kiAM37 YegeNl5JiIHqOS+T99RtRgBtED+ihm7x1pk6pZKKaVi6o+r/Wac3UyLxhOUlyS/WXWNrJD Hq3ULOt3M0ObL7G4r7I95+s4m/OQRQs= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406610; a=rsa-sha256; cv=none; b=kbmZrSCcuWYoBxsUh3ieQ7cbJMxcIF2fhtngtpXqAfmF1nNiL0XdVgBK5hTYEl+EK777+C GZFxUmcGGTMoVc6qwRWKi2NALPFjc3cQXsY2HKXH1gdA/oB2nVm5BKC8M3PDppo8Vug9vb IqfCFB4jiKm0zbDqZBMXERncVA10r6M= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=LtcpivNS; spf=pass (imf12.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.43 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pj1-f43.google.com with SMTP id 98e67ed59e1d1-265c94064b8so592240a91.0 for ; Mon, 07 Aug 2023 04:10:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406609; x=1692011409; 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=r8W8qq2Uz0spC2GoySlMERPhgmOL8aWRmiOXTDM010g=; b=LtcpivNSr/5U6x0m/uiyeqUuM2dtsqsVmyslCvnMZ+TbsDLmyfYCok7TOqfFwU4aou suPwxQHD97VI0Q62GW+ZYHDc8tjkHAC6Y2CfDY4CzUPMlkJryxFMZeRg2u77WPUScUma /UWc/sCeR8W9qQ3wk0oPqkWmTEZmPd4YXzSaovoOZwWfn9s/VibhxnVRbQAxTTT4rsLS 7EPkGC2ZgyKx21jg/v6bd406CHIloRAPbtMcp+52o9Mv0AXgKZgqXOlA0BowU0u6XLn9 g3j+asxGnqU4OhqCycxU0aToYArdbvRqg5AMoRMXcXqSNLhcPxtT3QmhYn/OoV2pniV3 od0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406609; x=1692011409; 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=r8W8qq2Uz0spC2GoySlMERPhgmOL8aWRmiOXTDM010g=; b=LdCNqlDFyl/NWkW6bBj4BQ1YhLtlSb9sa6IF4Rtece8O+J1tPpGifWoF/5dFzW76fu 8921jk/Tqg+qpjcOm86e5Ek+q/RV6C1xN6MOT5yBFkHN8LnQJqklhNeJgol+H2Y7pPSs 6Sl2tRIK4sslwMGjHXobPfrhAl9Y0xQHEBa7K7JqfYepntVxRpYvEFALGppvJejFRfpM Pf0eomkvuk5JHAsPo47oeZiwVyKVyB1Obrjgay2rZ3SvdgwkeYoRQAaKMBHZY7n3Yc2N dYpQFcQ9wP1uhoz5PbvyZNQVkuGEF740kwnQJmRQrITu53Uj1Hqx/Dt/Ux5XIr1J8wKs G9EQ== X-Gm-Message-State: ABy/qLazmlpt0eVm190C7MqNY1tnlzs24wBvx5HV30IQAIa+OzJZa86l RCVUblRkfOF4mrW6kdj38NQctA== X-Google-Smtp-Source: APBJJlH4Xq2ZH2mKI5CfuqTuY77FQCtuH4PGEB2vg3tzfU2CpFxEqGweFj8X5L0soAOYNhp1I46kQg== X-Received: by 2002:a17:90a:4104:b0:25c:1ad3:a4a1 with SMTP id u4-20020a17090a410400b0025c1ad3a4a1mr24586808pjf.1.1691406608964; Mon, 07 Aug 2023 04:10:08 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.09.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:10:08 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v4 01/48] mm: move some shrinker-related function declarations to mm/internal.h Date: Mon, 7 Aug 2023 19:08:49 +0800 Message-Id: <20230807110936.21819-2-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 025094000C X-Rspam-User: X-Stat-Signature: pkdhg5bp787cgznx7ixji1sz4cepunry X-Rspamd-Server: rspam03 X-HE-Tag: 1691406609-912983 X-HE-Meta: U2FsdGVkX1/CBdooIaWYfcOfbx+h1K9DsZPyOIC8SxpYU3fm648p4qS2J+f/xeGou1FVeev5JTCI1O6Ekm6eUIVBnkAIIW0Js4MCWs56zvnWXSdPGc+QhX+82toP0GTpJQlePZjqooMyfDiQWQv9Y0alEhKVnKeN7eG3FT2+4iRLTK/VUCqvFP4oVL7YyQPQFDbXiTWMxHB4W82GPh0pW6KzYWLR9av55k0Cf5NRDoiXEHhIiHNKbZuhemK0xge/EriTzGvX9V592EwW3YpuMMu0Gb0KwEwi8ARBrOwB1huPgf5I2cAuMGYUkoVZblXoQFGqW5KFqNU9L53e8H5iB3Ufe3LDAb7z40RR5LuVK2unYcENVyT+2zwGQYSWz8ItrK1jKIAMzhtI/0++MvEVKMpragUxWfQCchQ/0IAvLpZ7hWgSmT1Bj+AuFS0pEKpI1nXus8tg/Kkee2Wd0RDAVbNiVTJuaMYPQ76a72ThTP/GIeHGYzxwuAV35ipAfglk2jYCl0u6ERXAVVKBxU9iGbsBawLxRv4lNIPBqTZBdL9G1ZGA2Ocbn4qIM/Yp03ax0FRL0wgzFewXZjMc8MA3VIjlLQeGaC1zclJQPRL4ywnRhPi13cst32oP5aIinLxzoe2ZXGZaQAUiL14c0utKQMZgJ6rOkFWISlLkUuUsWCVVZD6yNKJiIrBnvHPP7AhlSIUfax1/35vmTQqHckSUTftUaR54S9TSekBkZoql0B0pOKSrB0u15hT4SGeQWXJCQaZX7bES34MzuSQMQ50Ry2TMXEzWrGThs7R3fYC8RKIDx5noQZ+CgOm1TbM4ynZ/FFYT58I6bxncJL+TH25GHeV6WSF52jca19GJx7L4ZT/EzmdRNMKz8fSK1kpJfSBqSlM5v0MkJsq6gckBs5eIT8JfyZwNIO4WQZBz87QpjsIUkEGTOC47llqFGakyZp65pCR3bZdTQLO+0JRD1Cx 1x/AkURk BAvAJlXYNRhAJqksiUEOpAR6klRrwgZdI31dAsujYVYsT0wlic5MrG3MSc6+FBnEYcoacKNw3ZpywX9VCumZ9fkqnNqpmHyRsqDfl51a+6ODQZC+8phxgeG7wMQwSlkjAJJgYZJ0Tl5V40bsl7nYVKppQcQyJ6n4WbadV6X368R7UpKvHJwO1HnPNt+gb4nnnOuUhK/Pr7UVUJ+Brx0PXFAMXJCOXvEBMQXP0pYsG9U6x7CYNMgkA3bpCAmgNlmZYGJJV+47xB9/mdxOeOOr45uuUA6DW1oil7m1suQVh98xtbpKZplt/zLlq57USqb2/waDkesT4l4UM0QO4RB6uBmnqy7n1c20jYycR+weksoddKPGIjO9iVcgmJK6TSQogfA6IZnosppgMINOAv1767CXxEmuhZXHSKB/8 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: The following functions are only used inside the mm subsystem, so it's better to move their declarations to the mm/internal.h file. 1. shrinker_debugfs_add() 2. shrinker_debugfs_detach() 3. shrinker_debugfs_remove() Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- include/linux/shrinker.h | 19 ------------------- mm/internal.h | 28 ++++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index 224293b2dd06..8dc15aa37410 100644 --- a/include/linux/shrinker.h +++ b/include/linux/shrinker.h @@ -106,28 +106,9 @@ extern void free_prealloced_shrinker(struct shrinker *shrinker); extern void synchronize_shrinkers(void); #ifdef CONFIG_SHRINKER_DEBUG -extern int shrinker_debugfs_add(struct shrinker *shrinker); -extern struct dentry *shrinker_debugfs_detach(struct shrinker *shrinker, - int *debugfs_id); -extern void shrinker_debugfs_remove(struct dentry *debugfs_entry, - int debugfs_id); extern int __printf(2, 3) shrinker_debugfs_rename(struct shrinker *shrinker, const char *fmt, ...); #else /* CONFIG_SHRINKER_DEBUG */ -static inline int shrinker_debugfs_add(struct shrinker *shrinker) -{ - return 0; -} -static inline struct dentry *shrinker_debugfs_detach(struct shrinker *shrinker, - int *debugfs_id) -{ - *debugfs_id = -1; - return NULL; -} -static inline void shrinker_debugfs_remove(struct dentry *debugfs_entry, - int debugfs_id) -{ -} static inline __printf(2, 3) int shrinker_debugfs_rename(struct shrinker *shrinker, const char *fmt, ...) { diff --git a/mm/internal.h b/mm/internal.h index 154da4f0d557..6f21926393af 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -1143,4 +1143,32 @@ struct vma_prepare { struct vm_area_struct *remove; struct vm_area_struct *remove2; }; + +/* + * shrinker related functions + */ + +#ifdef CONFIG_SHRINKER_DEBUG +extern int shrinker_debugfs_add(struct shrinker *shrinker); +extern struct dentry *shrinker_debugfs_detach(struct shrinker *shrinker, + int *debugfs_id); +extern void shrinker_debugfs_remove(struct dentry *debugfs_entry, + int debugfs_id); +#else /* CONFIG_SHRINKER_DEBUG */ +static inline int shrinker_debugfs_add(struct shrinker *shrinker) +{ + return 0; +} +static inline struct dentry *shrinker_debugfs_detach(struct shrinker *shrinker, + int *debugfs_id) +{ + *debugfs_id = -1; + return NULL; +} +static inline void shrinker_debugfs_remove(struct dentry *debugfs_entry, + int debugfs_id) +{ +} +#endif /* CONFIG_SHRINKER_DEBUG */ + #endif /* __MM_INTERNAL_H */ From patchwork Mon Aug 7 11:08:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343340 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 E8896C04A94 for ; Mon, 7 Aug 2023 11:10:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 58D076B0075; Mon, 7 Aug 2023 07:10:26 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 545F18D0003; Mon, 7 Aug 2023 07:10:26 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 367D48D0002; Mon, 7 Aug 2023 07:10:26 -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 22D4F6B0075 for ; Mon, 7 Aug 2023 07:10:26 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id E7B8D809EF for ; Mon, 7 Aug 2023 11:10:25 +0000 (UTC) X-FDA: 81097040010.18.8DEF3AA Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.173]) by imf22.hostedemail.com (Postfix) with ESMTP id CDA84C000B for ; Mon, 7 Aug 2023 11:10:23 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=BEvTj+xw; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf22.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.210.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406624; 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=GEi4MYuk0OEYflth0Mb1DlFyZuiRlqXPhzGhOI28yow=; b=yEhkwSSk74XH7hUFPgotgTKJVIAseu8ydG2hvHj3nUdM7Ld4Zr3w6S/pnth0RP6tAnZV9A dLhXQo/gA93IJdA/02aPvMQRud1g4AI9ow8ZL7BmQJZV0/C0xMeIUXOjYi0QPb+UM+qrkJ crqMD9CkSic8v6TWX5YcIq7IRPe804w= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=BEvTj+xw; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf22.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.210.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406624; a=rsa-sha256; cv=none; b=levde/Uzvu9j2SVjlQkXwOryyLUBfi04IfpxbaVB3Ye43eDqc1ewOW8Hwh8ahC+zYC143L 7m/TCXJjXAqxvugS8ILT5T0HHoLNNP8HBaxihndoXQoduPfUbgIkbtr94T/lla41GVU8Ds e+taT9iJhT3ElKOevnT9cYyNi66pQB0= Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-6879986a436so689450b3a.0 for ; Mon, 07 Aug 2023 04:10:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406622; x=1692011422; 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=GEi4MYuk0OEYflth0Mb1DlFyZuiRlqXPhzGhOI28yow=; b=BEvTj+xwW+T88pT01ic9HCjfMsNsUtdxPovUDtMtpNRFgKOF7OPKZlfnwvdpMrZsO1 yoJN3VDoQT6bqGjHEFD+GOFUbTFyPWQ9AmgWQHHMtUKtDFwB2AaCD8h8ed/2/nFlj6R/ H6RbchdxL8KOcvrs5+S0zZOQ7z5kmO5+1Ob9A43qfRUa8zWOsgqkDlWkIZ6Nce8P3hyT 6WUFOueyKbkU0/JQe7kyXIgtpN16Nt1532HkzF1M6pOxV7CrOQJaiVOX1MvieAVDT9mZ 7Wp39SMBYWooErXp+bNrum847BTmBIxZLX39IVOZTRIPZyaqqeRkUBu+bq48TNvJ2qgU oNtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406622; x=1692011422; 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=GEi4MYuk0OEYflth0Mb1DlFyZuiRlqXPhzGhOI28yow=; b=bXZ8ReAUbilbnfjYyGcbBkzl4fqeVq3dAlsqoNHQhtD2U267sDKMeRBBkTVzPNkMcs q62eOdPNdFp6bRM7ahsBnGaw0lGxBZifQ2MaJ7wNE8TPFeQtCmYgOpJFg6xge4BK8Rt4 gpdlT0cBIFy2S/M61I2IKJ7yYM1zAE1Smqbf3/AHRZxamvL5rpTettNK6Mf6yQy/CTKr fh+x43c/itTXZ0SwU4KEflQr94oEJmc6Q/ZcZCap1IZwCvxiEOQlLCYNpmEjkK8CLc3Z Fl0Tpjd9uKgfbNtG4+FIX4fHCyNtv3Vq0v4PYbtgXM1JZO8Kc19HSlxMX7t/6UPArI5o wxMg== X-Gm-Message-State: ABy/qLbLbBSIc6xqlG95fC+RC8DHj3A4ZFBvPGbZ7whIp3OzvIO6X7Ld joPr/vBjfJyPiDFnfzca/Ip1hA== X-Google-Smtp-Source: APBJJlH6EApx+wddxarWw2nzmVwQ6n81Kim8/orhAtf/liUQAlYr06Fft6gh/8UZFDYZK5CJyxwGZw== X-Received: by 2002:a17:903:22c6:b0:1b8:2ba0:c9a8 with SMTP id y6-20020a17090322c600b001b82ba0c9a8mr33072978plg.2.1691406622170; Mon, 07 Aug 2023 04:10:22 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.10.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:10:21 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v4 02/48] mm: vmscan: move shrinker-related code into a separate file Date: Mon, 7 Aug 2023 19:08:50 +0800 Message-Id: <20230807110936.21819-3-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: CDA84C000B X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: xgedc5a9z96fiqk6u3gcedjee79qzcso X-HE-Tag: 1691406623-293326 X-HE-Meta: U2FsdGVkX1/mfb/TbJQ9QlNhGMQrgxEBl+s45YLqikrUcBQ2qtolxfOnwOvFEckawu1kg+OKwVJpN5RvXI72B3Nrskv+SzeM3kqQDvHKmdhOs/sl6OEt/enEqyGGB/UxIAK3FbGjuamGf+ZgJ1zxzQHzuZnM35inYf6gibatyaATkkL9Gfb9wyhETeH9Bh0ydChdCCE2eDRIvhhudrJ9JPZphCaq/hPXjQaxKvXzIoSlTsFA3oi9eM6eI5bzPZcoGwBi6v//O9XUy/O0+jxoGSujk82pdQ3UcgJC6WzntZBGA7+S0eh0dVOglFcz1kQrhH5WCRsIS3xzpCjn+ae/IIPJP6CSxOV1shU8YCfYzvZDMctvgubMw+i85TXkyym34+e8/AL2UOWeHeMv+SxTv8NBnaG72MS1CdM1WC57yUN6VW4dcOtHPW9M7qxIu3wpreDDiN2u6dhBjyp3LtKxeZBOx2YyfZHLiEyfgmRvuUJ+2zL8N2r4CrOmefEVOQ8+DJYtzSITyn6q45b53vBvLRD9SP4Lt+JYnwIuBS/vClAP4gBvwXc4Acm7XceRsuhO46CNWgqMi0Z3TqLJeD5bNzTP/tm+7n/SjdeoGoA3sMifnTf2HSB9b4eE/dcuyWq33LIkrEnfxxE7U2Mrq/tpxoIaK3hwuU5g0BvYNUO1DIrtpnQ9ajOpRBu6JiCXeMOwqC4wqfMVRnzcSKGSJM2dUryN4IKncxjwwZSlkfMlSjWgMCnb2rRWVLJsWR/Zwu8Y/HrjNOY4NTzBjfRBKZVrCNNtJvfRk8ZvfcxDFIiaR5MLKDG0tgk7//0c1wpJUZjgixqMUKIAVAuXJcpUJdg7o+LTB8x+H0A8PhDMnvACpr/9bnAePpevP9cCYFdJPlO5jQyoHC46omrvAO6AalrYPuXWUL3bOqSxTi+R4aRPAi1ZtkWHT84DHeAmLwHilUesKmHrRmRBBsM2+QEp2W9 VTp04DWE WFfCJHrPHQWXCD5Pr9leYnzgRzzBAJHB9o1zw8dep16chVPg4vovGlvBocSc3BVoXtKQCXKfu0k9nbOEQLuYWwpVhtOR+npvaiSVg7N56K7tnfumJEGeWMcPma4Ar+Svl7d9FB5Z5uQ32mz2aFPbg/6UlpDAmBsRi4VDo3+8Z6NOJEFRiRAiiZdkOUXRvaBfln4zMpjeVbQg4YLni0TLprVi59snNjWvzEtJe6ixMp5YiE/McI/9WbbkB6JicdAKLOffHLWoU3HM97U9t/yx9L9+nCuM8gdR6OxCF8lc496edjDRssJXIM8o0sEQ9wtffEj9HBL5cKpX3i3C3y7YDam43xK76qkxHo/HpbOOaKkGJXZBsU/GtFGsUrW7g71XZaUUjxWsd3vqU1p1mg4S5w/zbB6L6ai9Y/r0Z X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: The mm/vmscan.c file is too large, so separate the shrinker-related code from it into a separate file. No functional changes. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- mm/Makefile | 4 +- mm/internal.h | 2 + mm/shrinker.c | 709 ++++++++++++++++++++++++++++++++++++++++++++++++++ mm/vmscan.c | 701 ------------------------------------------------- 4 files changed, 713 insertions(+), 703 deletions(-) create mode 100644 mm/shrinker.c diff --git a/mm/Makefile b/mm/Makefile index ec65984e2ade..33873c8aedb3 100644 --- a/mm/Makefile +++ b/mm/Makefile @@ -48,8 +48,8 @@ endif obj-y := filemap.o mempool.o oom_kill.o fadvise.o \ maccess.o page-writeback.o folio-compat.o \ - readahead.o swap.o truncate.o vmscan.o shmem.o \ - util.o mmzone.o vmstat.o backing-dev.o \ + readahead.o swap.o truncate.o vmscan.o shrinker.o \ + shmem.o util.o mmzone.o vmstat.o backing-dev.o \ mm_init.o percpu.o slab_common.o \ compaction.o show_mem.o shmem_quota.o\ interval_tree.o list_lru.o workingset.o \ diff --git a/mm/internal.h b/mm/internal.h index 6f21926393af..b98c29f0a471 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -1147,6 +1147,8 @@ struct vma_prepare { /* * shrinker related functions */ +unsigned long shrink_slab(gfp_t gfp_mask, int nid, struct mem_cgroup *memcg, + int priority); #ifdef CONFIG_SHRINKER_DEBUG extern int shrinker_debugfs_add(struct shrinker *shrinker); diff --git a/mm/shrinker.c b/mm/shrinker.c new file mode 100644 index 000000000000..043c87ccfab4 --- /dev/null +++ b/mm/shrinker.c @@ -0,0 +1,709 @@ +// SPDX-License-Identifier: GPL-2.0 +#include +#include +#include +#include + +#include "internal.h" + +LIST_HEAD(shrinker_list); +DECLARE_RWSEM(shrinker_rwsem); + +#ifdef CONFIG_MEMCG +static int shrinker_nr_max; + +/* The shrinker_info is expanded in a batch of BITS_PER_LONG */ +static inline int shrinker_map_size(int nr_items) +{ + return (DIV_ROUND_UP(nr_items, BITS_PER_LONG) * sizeof(unsigned long)); +} + +static inline int shrinker_defer_size(int nr_items) +{ + return (round_up(nr_items, BITS_PER_LONG) * sizeof(atomic_long_t)); +} + +void free_shrinker_info(struct mem_cgroup *memcg) +{ + struct mem_cgroup_per_node *pn; + struct shrinker_info *info; + int nid; + + for_each_node(nid) { + pn = memcg->nodeinfo[nid]; + info = rcu_dereference_protected(pn->shrinker_info, true); + kvfree(info); + rcu_assign_pointer(pn->shrinker_info, NULL); + } +} + +int alloc_shrinker_info(struct mem_cgroup *memcg) +{ + struct shrinker_info *info; + int nid, size, ret = 0; + int map_size, defer_size = 0; + + down_write(&shrinker_rwsem); + map_size = shrinker_map_size(shrinker_nr_max); + defer_size = shrinker_defer_size(shrinker_nr_max); + size = map_size + defer_size; + for_each_node(nid) { + info = kvzalloc_node(sizeof(*info) + size, GFP_KERNEL, nid); + if (!info) { + free_shrinker_info(memcg); + ret = -ENOMEM; + break; + } + info->nr_deferred = (atomic_long_t *)(info + 1); + info->map = (void *)info->nr_deferred + defer_size; + info->map_nr_max = shrinker_nr_max; + rcu_assign_pointer(memcg->nodeinfo[nid]->shrinker_info, info); + } + up_write(&shrinker_rwsem); + + return ret; +} + +static struct shrinker_info *shrinker_info_protected(struct mem_cgroup *memcg, + int nid) +{ + return rcu_dereference_protected(memcg->nodeinfo[nid]->shrinker_info, + lockdep_is_held(&shrinker_rwsem)); +} + +static int expand_one_shrinker_info(struct mem_cgroup *memcg, + int map_size, int defer_size, + int old_map_size, int old_defer_size, + int new_nr_max) +{ + struct shrinker_info *new, *old; + struct mem_cgroup_per_node *pn; + int nid; + int size = map_size + defer_size; + + for_each_node(nid) { + pn = memcg->nodeinfo[nid]; + old = shrinker_info_protected(memcg, nid); + /* Not yet online memcg */ + if (!old) + return 0; + + /* Already expanded this shrinker_info */ + if (new_nr_max <= old->map_nr_max) + continue; + + new = kvmalloc_node(sizeof(*new) + size, GFP_KERNEL, nid); + if (!new) + return -ENOMEM; + + new->nr_deferred = (atomic_long_t *)(new + 1); + new->map = (void *)new->nr_deferred + defer_size; + new->map_nr_max = new_nr_max; + + /* map: set all old bits, clear all new bits */ + memset(new->map, (int)0xff, old_map_size); + memset((void *)new->map + old_map_size, 0, map_size - old_map_size); + /* nr_deferred: copy old values, clear all new values */ + memcpy(new->nr_deferred, old->nr_deferred, old_defer_size); + memset((void *)new->nr_deferred + old_defer_size, 0, + defer_size - old_defer_size); + + rcu_assign_pointer(pn->shrinker_info, new); + kvfree_rcu(old, rcu); + } + + return 0; +} + +static int expand_shrinker_info(int new_id) +{ + int ret = 0; + int new_nr_max = round_up(new_id + 1, BITS_PER_LONG); + int map_size, defer_size = 0; + int old_map_size, old_defer_size = 0; + struct mem_cgroup *memcg; + + if (!root_mem_cgroup) + goto out; + + lockdep_assert_held(&shrinker_rwsem); + + map_size = shrinker_map_size(new_nr_max); + defer_size = shrinker_defer_size(new_nr_max); + old_map_size = shrinker_map_size(shrinker_nr_max); + old_defer_size = shrinker_defer_size(shrinker_nr_max); + + memcg = mem_cgroup_iter(NULL, NULL, NULL); + do { + ret = expand_one_shrinker_info(memcg, map_size, defer_size, + old_map_size, old_defer_size, + new_nr_max); + if (ret) { + mem_cgroup_iter_break(NULL, memcg); + goto out; + } + } while ((memcg = mem_cgroup_iter(NULL, memcg, NULL)) != NULL); +out: + if (!ret) + shrinker_nr_max = new_nr_max; + + return ret; +} + +void set_shrinker_bit(struct mem_cgroup *memcg, int nid, int shrinker_id) +{ + if (shrinker_id >= 0 && memcg && !mem_cgroup_is_root(memcg)) { + struct shrinker_info *info; + + rcu_read_lock(); + info = rcu_dereference(memcg->nodeinfo[nid]->shrinker_info); + if (!WARN_ON_ONCE(shrinker_id >= info->map_nr_max)) { + /* Pairs with smp mb in shrink_slab() */ + smp_mb__before_atomic(); + set_bit(shrinker_id, info->map); + } + rcu_read_unlock(); + } +} + +static DEFINE_IDR(shrinker_idr); + +static int prealloc_memcg_shrinker(struct shrinker *shrinker) +{ + int id, ret = -ENOMEM; + + if (mem_cgroup_disabled()) + return -ENOSYS; + + down_write(&shrinker_rwsem); + /* This may call shrinker, so it must use down_read_trylock() */ + id = idr_alloc(&shrinker_idr, shrinker, 0, 0, GFP_KERNEL); + if (id < 0) + goto unlock; + + if (id >= shrinker_nr_max) { + if (expand_shrinker_info(id)) { + idr_remove(&shrinker_idr, id); + goto unlock; + } + } + shrinker->id = id; + ret = 0; +unlock: + up_write(&shrinker_rwsem); + return ret; +} + +static void unregister_memcg_shrinker(struct shrinker *shrinker) +{ + int id = shrinker->id; + + BUG_ON(id < 0); + + lockdep_assert_held(&shrinker_rwsem); + + idr_remove(&shrinker_idr, id); +} + +static long xchg_nr_deferred_memcg(int nid, struct shrinker *shrinker, + struct mem_cgroup *memcg) +{ + struct shrinker_info *info; + + info = shrinker_info_protected(memcg, nid); + return atomic_long_xchg(&info->nr_deferred[shrinker->id], 0); +} + +static long add_nr_deferred_memcg(long nr, int nid, struct shrinker *shrinker, + struct mem_cgroup *memcg) +{ + struct shrinker_info *info; + + info = shrinker_info_protected(memcg, nid); + return atomic_long_add_return(nr, &info->nr_deferred[shrinker->id]); +} + +void reparent_shrinker_deferred(struct mem_cgroup *memcg) +{ + int i, nid; + long nr; + struct mem_cgroup *parent; + struct shrinker_info *child_info, *parent_info; + + parent = parent_mem_cgroup(memcg); + if (!parent) + parent = root_mem_cgroup; + + /* Prevent from concurrent shrinker_info expand */ + down_read(&shrinker_rwsem); + for_each_node(nid) { + child_info = shrinker_info_protected(memcg, nid); + parent_info = shrinker_info_protected(parent, nid); + for (i = 0; i < child_info->map_nr_max; i++) { + nr = atomic_long_read(&child_info->nr_deferred[i]); + atomic_long_add(nr, &parent_info->nr_deferred[i]); + } + } + up_read(&shrinker_rwsem); +} +#else +static int prealloc_memcg_shrinker(struct shrinker *shrinker) +{ + return -ENOSYS; +} + +static void unregister_memcg_shrinker(struct shrinker *shrinker) +{ +} + +static long xchg_nr_deferred_memcg(int nid, struct shrinker *shrinker, + struct mem_cgroup *memcg) +{ + return 0; +} + +static long add_nr_deferred_memcg(long nr, int nid, struct shrinker *shrinker, + struct mem_cgroup *memcg) +{ + return 0; +} +#endif /* CONFIG_MEMCG */ + +static long xchg_nr_deferred(struct shrinker *shrinker, + struct shrink_control *sc) +{ + int nid = sc->nid; + + if (!(shrinker->flags & SHRINKER_NUMA_AWARE)) + nid = 0; + + if (sc->memcg && + (shrinker->flags & SHRINKER_MEMCG_AWARE)) + return xchg_nr_deferred_memcg(nid, shrinker, + sc->memcg); + + return atomic_long_xchg(&shrinker->nr_deferred[nid], 0); +} + + +static long add_nr_deferred(long nr, struct shrinker *shrinker, + struct shrink_control *sc) +{ + int nid = sc->nid; + + if (!(shrinker->flags & SHRINKER_NUMA_AWARE)) + nid = 0; + + if (sc->memcg && + (shrinker->flags & SHRINKER_MEMCG_AWARE)) + return add_nr_deferred_memcg(nr, nid, shrinker, + sc->memcg); + + return atomic_long_add_return(nr, &shrinker->nr_deferred[nid]); +} + +#define SHRINK_BATCH 128 + +static unsigned long do_shrink_slab(struct shrink_control *shrinkctl, + struct shrinker *shrinker, int priority) +{ + unsigned long freed = 0; + unsigned long long delta; + long total_scan; + long freeable; + long nr; + long new_nr; + long batch_size = shrinker->batch ? shrinker->batch + : SHRINK_BATCH; + long scanned = 0, next_deferred; + + freeable = shrinker->count_objects(shrinker, shrinkctl); + if (freeable == 0 || freeable == SHRINK_EMPTY) + return freeable; + + /* + * copy the current shrinker scan count into a local variable + * and zero it so that other concurrent shrinker invocations + * don't also do this scanning work. + */ + nr = xchg_nr_deferred(shrinker, shrinkctl); + + if (shrinker->seeks) { + delta = freeable >> priority; + delta *= 4; + do_div(delta, shrinker->seeks); + } else { + /* + * These objects don't require any IO to create. Trim + * them aggressively under memory pressure to keep + * them from causing refetches in the IO caches. + */ + delta = freeable / 2; + } + + total_scan = nr >> priority; + total_scan += delta; + total_scan = min(total_scan, (2 * freeable)); + + trace_mm_shrink_slab_start(shrinker, shrinkctl, nr, + freeable, delta, total_scan, priority); + + /* + * Normally, we should not scan less than batch_size objects in one + * pass to avoid too frequent shrinker calls, but if the slab has less + * than batch_size objects in total and we are really tight on memory, + * we will try to reclaim all available objects, otherwise we can end + * up failing allocations although there are plenty of reclaimable + * objects spread over several slabs with usage less than the + * batch_size. + * + * We detect the "tight on memory" situations by looking at the total + * number of objects we want to scan (total_scan). If it is greater + * than the total number of objects on slab (freeable), we must be + * scanning at high prio and therefore should try to reclaim as much as + * possible. + */ + while (total_scan >= batch_size || + total_scan >= freeable) { + unsigned long ret; + unsigned long nr_to_scan = min(batch_size, total_scan); + + shrinkctl->nr_to_scan = nr_to_scan; + shrinkctl->nr_scanned = nr_to_scan; + ret = shrinker->scan_objects(shrinker, shrinkctl); + if (ret == SHRINK_STOP) + break; + freed += ret; + + count_vm_events(SLABS_SCANNED, shrinkctl->nr_scanned); + total_scan -= shrinkctl->nr_scanned; + scanned += shrinkctl->nr_scanned; + + cond_resched(); + } + + /* + * The deferred work is increased by any new work (delta) that wasn't + * done, decreased by old deferred work that was done now. + * + * And it is capped to two times of the freeable items. + */ + next_deferred = max_t(long, (nr + delta - scanned), 0); + next_deferred = min(next_deferred, (2 * freeable)); + + /* + * move the unused scan count back into the shrinker in a + * manner that handles concurrent updates. + */ + new_nr = add_nr_deferred(next_deferred, shrinker, shrinkctl); + + trace_mm_shrink_slab_end(shrinker, shrinkctl->nid, freed, nr, new_nr, total_scan); + return freed; +} + +#ifdef CONFIG_MEMCG +static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, + struct mem_cgroup *memcg, int priority) +{ + struct shrinker_info *info; + unsigned long ret, freed = 0; + int i; + + if (!mem_cgroup_online(memcg)) + return 0; + + if (!down_read_trylock(&shrinker_rwsem)) + return 0; + + info = shrinker_info_protected(memcg, nid); + if (unlikely(!info)) + goto unlock; + + for_each_set_bit(i, info->map, info->map_nr_max) { + struct shrink_control sc = { + .gfp_mask = gfp_mask, + .nid = nid, + .memcg = memcg, + }; + struct shrinker *shrinker; + + shrinker = idr_find(&shrinker_idr, i); + if (unlikely(!shrinker || !(shrinker->flags & SHRINKER_REGISTERED))) { + if (!shrinker) + clear_bit(i, info->map); + continue; + } + + /* Call non-slab shrinkers even though kmem is disabled */ + if (!memcg_kmem_online() && + !(shrinker->flags & SHRINKER_NONSLAB)) + continue; + + ret = do_shrink_slab(&sc, shrinker, priority); + if (ret == SHRINK_EMPTY) { + clear_bit(i, info->map); + /* + * After the shrinker reported that it had no objects to + * free, but before we cleared the corresponding bit in + * the memcg shrinker map, a new object might have been + * added. To make sure, we have the bit set in this + * case, we invoke the shrinker one more time and reset + * the bit if it reports that it is not empty anymore. + * The memory barrier here pairs with the barrier in + * set_shrinker_bit(): + * + * list_lru_add() shrink_slab_memcg() + * list_add_tail() clear_bit() + * + * set_bit() do_shrink_slab() + */ + smp_mb__after_atomic(); + ret = do_shrink_slab(&sc, shrinker, priority); + if (ret == SHRINK_EMPTY) + ret = 0; + else + set_shrinker_bit(memcg, nid, i); + } + freed += ret; + + if (rwsem_is_contended(&shrinker_rwsem)) { + freed = freed ? : 1; + break; + } + } +unlock: + up_read(&shrinker_rwsem); + return freed; +} +#else /* !CONFIG_MEMCG */ +static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, + struct mem_cgroup *memcg, int priority) +{ + return 0; +} +#endif /* CONFIG_MEMCG */ + +/** + * shrink_slab - shrink slab caches + * @gfp_mask: allocation context + * @nid: node whose slab caches to target + * @memcg: memory cgroup whose slab caches to target + * @priority: the reclaim priority + * + * Call the shrink functions to age shrinkable caches. + * + * @nid is passed along to shrinkers with SHRINKER_NUMA_AWARE set, + * unaware shrinkers will receive a node id of 0 instead. + * + * @memcg specifies the memory cgroup to target. Unaware shrinkers + * are called only if it is the root cgroup. + * + * @priority is sc->priority, we take the number of objects and >> by priority + * in order to get the scan target. + * + * Returns the number of reclaimed slab objects. + */ +unsigned long shrink_slab(gfp_t gfp_mask, int nid, struct mem_cgroup *memcg, + int priority) +{ + unsigned long ret, freed = 0; + struct shrinker *shrinker; + + /* + * The root memcg might be allocated even though memcg is disabled + * via "cgroup_disable=memory" boot parameter. This could make + * mem_cgroup_is_root() return false, then just run memcg slab + * shrink, but skip global shrink. This may result in premature + * oom. + */ + if (!mem_cgroup_disabled() && !mem_cgroup_is_root(memcg)) + return shrink_slab_memcg(gfp_mask, nid, memcg, priority); + + if (!down_read_trylock(&shrinker_rwsem)) + goto out; + + list_for_each_entry(shrinker, &shrinker_list, list) { + struct shrink_control sc = { + .gfp_mask = gfp_mask, + .nid = nid, + .memcg = memcg, + }; + + ret = do_shrink_slab(&sc, shrinker, priority); + if (ret == SHRINK_EMPTY) + ret = 0; + freed += ret; + /* + * Bail out if someone want to register a new shrinker to + * prevent the registration from being stalled for long periods + * by parallel ongoing shrinking. + */ + if (rwsem_is_contended(&shrinker_rwsem)) { + freed = freed ? : 1; + break; + } + } + + up_read(&shrinker_rwsem); +out: + cond_resched(); + return freed; +} + +/* + * Add a shrinker callback to be called from the vm. + */ +static int __prealloc_shrinker(struct shrinker *shrinker) +{ + unsigned int size; + int err; + + if (shrinker->flags & SHRINKER_MEMCG_AWARE) { + err = prealloc_memcg_shrinker(shrinker); + if (err != -ENOSYS) + return err; + + shrinker->flags &= ~SHRINKER_MEMCG_AWARE; + } + + size = sizeof(*shrinker->nr_deferred); + if (shrinker->flags & SHRINKER_NUMA_AWARE) + size *= nr_node_ids; + + shrinker->nr_deferred = kzalloc(size, GFP_KERNEL); + if (!shrinker->nr_deferred) + return -ENOMEM; + + return 0; +} + +#ifdef CONFIG_SHRINKER_DEBUG +int prealloc_shrinker(struct shrinker *shrinker, const char *fmt, ...) +{ + va_list ap; + int err; + + va_start(ap, fmt); + shrinker->name = kvasprintf_const(GFP_KERNEL, fmt, ap); + va_end(ap); + if (!shrinker->name) + return -ENOMEM; + + err = __prealloc_shrinker(shrinker); + if (err) { + kfree_const(shrinker->name); + shrinker->name = NULL; + } + + return err; +} +#else +int prealloc_shrinker(struct shrinker *shrinker, const char *fmt, ...) +{ + return __prealloc_shrinker(shrinker); +} +#endif + +void free_prealloced_shrinker(struct shrinker *shrinker) +{ +#ifdef CONFIG_SHRINKER_DEBUG + kfree_const(shrinker->name); + shrinker->name = NULL; +#endif + if (shrinker->flags & SHRINKER_MEMCG_AWARE) { + down_write(&shrinker_rwsem); + unregister_memcg_shrinker(shrinker); + up_write(&shrinker_rwsem); + return; + } + + kfree(shrinker->nr_deferred); + shrinker->nr_deferred = NULL; +} + +void register_shrinker_prepared(struct shrinker *shrinker) +{ + down_write(&shrinker_rwsem); + list_add_tail(&shrinker->list, &shrinker_list); + shrinker->flags |= SHRINKER_REGISTERED; + shrinker_debugfs_add(shrinker); + up_write(&shrinker_rwsem); +} + +static int __register_shrinker(struct shrinker *shrinker) +{ + int err = __prealloc_shrinker(shrinker); + + if (err) + return err; + register_shrinker_prepared(shrinker); + return 0; +} + +#ifdef CONFIG_SHRINKER_DEBUG +int register_shrinker(struct shrinker *shrinker, const char *fmt, ...) +{ + va_list ap; + int err; + + va_start(ap, fmt); + shrinker->name = kvasprintf_const(GFP_KERNEL, fmt, ap); + va_end(ap); + if (!shrinker->name) + return -ENOMEM; + + err = __register_shrinker(shrinker); + if (err) { + kfree_const(shrinker->name); + shrinker->name = NULL; + } + return err; +} +#else +int register_shrinker(struct shrinker *shrinker, const char *fmt, ...) +{ + return __register_shrinker(shrinker); +} +#endif +EXPORT_SYMBOL(register_shrinker); + +/* + * Remove one + */ +void unregister_shrinker(struct shrinker *shrinker) +{ + struct dentry *debugfs_entry; + int debugfs_id; + + if (!(shrinker->flags & SHRINKER_REGISTERED)) + return; + + down_write(&shrinker_rwsem); + list_del(&shrinker->list); + shrinker->flags &= ~SHRINKER_REGISTERED; + if (shrinker->flags & SHRINKER_MEMCG_AWARE) + unregister_memcg_shrinker(shrinker); + debugfs_entry = shrinker_debugfs_detach(shrinker, &debugfs_id); + up_write(&shrinker_rwsem); + + shrinker_debugfs_remove(debugfs_entry, debugfs_id); + + kfree(shrinker->nr_deferred); + shrinker->nr_deferred = NULL; +} +EXPORT_SYMBOL(unregister_shrinker); + +/** + * synchronize_shrinkers - Wait for all running shrinkers to complete. + * + * This is equivalent to calling unregister_shrink() and register_shrinker(), + * but atomically and with less overhead. This is useful to guarantee that all + * shrinker invocations have seen an update, before freeing memory, similar to + * rcu. + */ +void synchronize_shrinkers(void) +{ + down_write(&shrinker_rwsem); + up_write(&shrinker_rwsem); +} +EXPORT_SYMBOL(synchronize_shrinkers); diff --git a/mm/vmscan.c b/mm/vmscan.c index 80e9a222e522..0a0f4c2fd519 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -35,7 +35,6 @@ #include #include #include -#include #include #include #include @@ -188,246 +187,7 @@ struct scan_control { */ int vm_swappiness = 60; -LIST_HEAD(shrinker_list); -DECLARE_RWSEM(shrinker_rwsem); - #ifdef CONFIG_MEMCG -static int shrinker_nr_max; - -/* The shrinker_info is expanded in a batch of BITS_PER_LONG */ -static inline int shrinker_map_size(int nr_items) -{ - return (DIV_ROUND_UP(nr_items, BITS_PER_LONG) * sizeof(unsigned long)); -} - -static inline int shrinker_defer_size(int nr_items) -{ - return (round_up(nr_items, BITS_PER_LONG) * sizeof(atomic_long_t)); -} - -static struct shrinker_info *shrinker_info_protected(struct mem_cgroup *memcg, - int nid) -{ - return rcu_dereference_protected(memcg->nodeinfo[nid]->shrinker_info, - lockdep_is_held(&shrinker_rwsem)); -} - -static int expand_one_shrinker_info(struct mem_cgroup *memcg, - int map_size, int defer_size, - int old_map_size, int old_defer_size, - int new_nr_max) -{ - struct shrinker_info *new, *old; - struct mem_cgroup_per_node *pn; - int nid; - int size = map_size + defer_size; - - for_each_node(nid) { - pn = memcg->nodeinfo[nid]; - old = shrinker_info_protected(memcg, nid); - /* Not yet online memcg */ - if (!old) - return 0; - - /* Already expanded this shrinker_info */ - if (new_nr_max <= old->map_nr_max) - continue; - - new = kvmalloc_node(sizeof(*new) + size, GFP_KERNEL, nid); - if (!new) - return -ENOMEM; - - new->nr_deferred = (atomic_long_t *)(new + 1); - new->map = (void *)new->nr_deferred + defer_size; - new->map_nr_max = new_nr_max; - - /* map: set all old bits, clear all new bits */ - memset(new->map, (int)0xff, old_map_size); - memset((void *)new->map + old_map_size, 0, map_size - old_map_size); - /* nr_deferred: copy old values, clear all new values */ - memcpy(new->nr_deferred, old->nr_deferred, old_defer_size); - memset((void *)new->nr_deferred + old_defer_size, 0, - defer_size - old_defer_size); - - rcu_assign_pointer(pn->shrinker_info, new); - kvfree_rcu(old, rcu); - } - - return 0; -} - -void free_shrinker_info(struct mem_cgroup *memcg) -{ - struct mem_cgroup_per_node *pn; - struct shrinker_info *info; - int nid; - - for_each_node(nid) { - pn = memcg->nodeinfo[nid]; - info = rcu_dereference_protected(pn->shrinker_info, true); - kvfree(info); - rcu_assign_pointer(pn->shrinker_info, NULL); - } -} - -int alloc_shrinker_info(struct mem_cgroup *memcg) -{ - struct shrinker_info *info; - int nid, size, ret = 0; - int map_size, defer_size = 0; - - down_write(&shrinker_rwsem); - map_size = shrinker_map_size(shrinker_nr_max); - defer_size = shrinker_defer_size(shrinker_nr_max); - size = map_size + defer_size; - for_each_node(nid) { - info = kvzalloc_node(sizeof(*info) + size, GFP_KERNEL, nid); - if (!info) { - free_shrinker_info(memcg); - ret = -ENOMEM; - break; - } - info->nr_deferred = (atomic_long_t *)(info + 1); - info->map = (void *)info->nr_deferred + defer_size; - info->map_nr_max = shrinker_nr_max; - rcu_assign_pointer(memcg->nodeinfo[nid]->shrinker_info, info); - } - up_write(&shrinker_rwsem); - - return ret; -} - -static int expand_shrinker_info(int new_id) -{ - int ret = 0; - int new_nr_max = round_up(new_id + 1, BITS_PER_LONG); - int map_size, defer_size = 0; - int old_map_size, old_defer_size = 0; - struct mem_cgroup *memcg; - - if (!root_mem_cgroup) - goto out; - - lockdep_assert_held(&shrinker_rwsem); - - map_size = shrinker_map_size(new_nr_max); - defer_size = shrinker_defer_size(new_nr_max); - old_map_size = shrinker_map_size(shrinker_nr_max); - old_defer_size = shrinker_defer_size(shrinker_nr_max); - - memcg = mem_cgroup_iter(NULL, NULL, NULL); - do { - ret = expand_one_shrinker_info(memcg, map_size, defer_size, - old_map_size, old_defer_size, - new_nr_max); - if (ret) { - mem_cgroup_iter_break(NULL, memcg); - goto out; - } - } while ((memcg = mem_cgroup_iter(NULL, memcg, NULL)) != NULL); -out: - if (!ret) - shrinker_nr_max = new_nr_max; - - return ret; -} - -void set_shrinker_bit(struct mem_cgroup *memcg, int nid, int shrinker_id) -{ - if (shrinker_id >= 0 && memcg && !mem_cgroup_is_root(memcg)) { - struct shrinker_info *info; - - rcu_read_lock(); - info = rcu_dereference(memcg->nodeinfo[nid]->shrinker_info); - if (!WARN_ON_ONCE(shrinker_id >= info->map_nr_max)) { - /* Pairs with smp mb in shrink_slab() */ - smp_mb__before_atomic(); - set_bit(shrinker_id, info->map); - } - rcu_read_unlock(); - } -} - -static DEFINE_IDR(shrinker_idr); - -static int prealloc_memcg_shrinker(struct shrinker *shrinker) -{ - int id, ret = -ENOMEM; - - if (mem_cgroup_disabled()) - return -ENOSYS; - - down_write(&shrinker_rwsem); - /* This may call shrinker, so it must use down_read_trylock() */ - id = idr_alloc(&shrinker_idr, shrinker, 0, 0, GFP_KERNEL); - if (id < 0) - goto unlock; - - if (id >= shrinker_nr_max) { - if (expand_shrinker_info(id)) { - idr_remove(&shrinker_idr, id); - goto unlock; - } - } - shrinker->id = id; - ret = 0; -unlock: - up_write(&shrinker_rwsem); - return ret; -} - -static void unregister_memcg_shrinker(struct shrinker *shrinker) -{ - int id = shrinker->id; - - BUG_ON(id < 0); - - lockdep_assert_held(&shrinker_rwsem); - - idr_remove(&shrinker_idr, id); -} - -static long xchg_nr_deferred_memcg(int nid, struct shrinker *shrinker, - struct mem_cgroup *memcg) -{ - struct shrinker_info *info; - - info = shrinker_info_protected(memcg, nid); - return atomic_long_xchg(&info->nr_deferred[shrinker->id], 0); -} - -static long add_nr_deferred_memcg(long nr, int nid, struct shrinker *shrinker, - struct mem_cgroup *memcg) -{ - struct shrinker_info *info; - - info = shrinker_info_protected(memcg, nid); - return atomic_long_add_return(nr, &info->nr_deferred[shrinker->id]); -} - -void reparent_shrinker_deferred(struct mem_cgroup *memcg) -{ - int i, nid; - long nr; - struct mem_cgroup *parent; - struct shrinker_info *child_info, *parent_info; - - parent = parent_mem_cgroup(memcg); - if (!parent) - parent = root_mem_cgroup; - - /* Prevent from concurrent shrinker_info expand */ - down_read(&shrinker_rwsem); - for_each_node(nid) { - child_info = shrinker_info_protected(memcg, nid); - parent_info = shrinker_info_protected(parent, nid); - for (i = 0; i < child_info->map_nr_max; i++) { - nr = atomic_long_read(&child_info->nr_deferred[i]); - atomic_long_add(nr, &parent_info->nr_deferred[i]); - } - } - up_read(&shrinker_rwsem); -} /* Returns true for reclaim through cgroup limits or cgroup interfaces. */ static bool cgroup_reclaim(struct scan_control *sc) @@ -468,27 +228,6 @@ static bool writeback_throttling_sane(struct scan_control *sc) return false; } #else -static int prealloc_memcg_shrinker(struct shrinker *shrinker) -{ - return -ENOSYS; -} - -static void unregister_memcg_shrinker(struct shrinker *shrinker) -{ -} - -static long xchg_nr_deferred_memcg(int nid, struct shrinker *shrinker, - struct mem_cgroup *memcg) -{ - return 0; -} - -static long add_nr_deferred_memcg(long nr, int nid, struct shrinker *shrinker, - struct mem_cgroup *memcg) -{ - return 0; -} - static bool cgroup_reclaim(struct scan_control *sc) { return false; @@ -557,39 +296,6 @@ static void flush_reclaim_state(struct scan_control *sc) } } -static long xchg_nr_deferred(struct shrinker *shrinker, - struct shrink_control *sc) -{ - int nid = sc->nid; - - if (!(shrinker->flags & SHRINKER_NUMA_AWARE)) - nid = 0; - - if (sc->memcg && - (shrinker->flags & SHRINKER_MEMCG_AWARE)) - return xchg_nr_deferred_memcg(nid, shrinker, - sc->memcg); - - return atomic_long_xchg(&shrinker->nr_deferred[nid], 0); -} - - -static long add_nr_deferred(long nr, struct shrinker *shrinker, - struct shrink_control *sc) -{ - int nid = sc->nid; - - if (!(shrinker->flags & SHRINKER_NUMA_AWARE)) - nid = 0; - - if (sc->memcg && - (shrinker->flags & SHRINKER_MEMCG_AWARE)) - return add_nr_deferred_memcg(nr, nid, shrinker, - sc->memcg); - - return atomic_long_add_return(nr, &shrinker->nr_deferred[nid]); -} - static bool can_demote(int nid, struct scan_control *sc) { if (!numa_demotion_enabled) @@ -671,413 +377,6 @@ static unsigned long lruvec_lru_size(struct lruvec *lruvec, enum lru_list lru, return size; } -/* - * Add a shrinker callback to be called from the vm. - */ -static int __prealloc_shrinker(struct shrinker *shrinker) -{ - unsigned int size; - int err; - - if (shrinker->flags & SHRINKER_MEMCG_AWARE) { - err = prealloc_memcg_shrinker(shrinker); - if (err != -ENOSYS) - return err; - - shrinker->flags &= ~SHRINKER_MEMCG_AWARE; - } - - size = sizeof(*shrinker->nr_deferred); - if (shrinker->flags & SHRINKER_NUMA_AWARE) - size *= nr_node_ids; - - shrinker->nr_deferred = kzalloc(size, GFP_KERNEL); - if (!shrinker->nr_deferred) - return -ENOMEM; - - return 0; -} - -#ifdef CONFIG_SHRINKER_DEBUG -int prealloc_shrinker(struct shrinker *shrinker, const char *fmt, ...) -{ - va_list ap; - int err; - - va_start(ap, fmt); - shrinker->name = kvasprintf_const(GFP_KERNEL, fmt, ap); - va_end(ap); - if (!shrinker->name) - return -ENOMEM; - - err = __prealloc_shrinker(shrinker); - if (err) { - kfree_const(shrinker->name); - shrinker->name = NULL; - } - - return err; -} -#else -int prealloc_shrinker(struct shrinker *shrinker, const char *fmt, ...) -{ - return __prealloc_shrinker(shrinker); -} -#endif - -void free_prealloced_shrinker(struct shrinker *shrinker) -{ -#ifdef CONFIG_SHRINKER_DEBUG - kfree_const(shrinker->name); - shrinker->name = NULL; -#endif - if (shrinker->flags & SHRINKER_MEMCG_AWARE) { - down_write(&shrinker_rwsem); - unregister_memcg_shrinker(shrinker); - up_write(&shrinker_rwsem); - return; - } - - kfree(shrinker->nr_deferred); - shrinker->nr_deferred = NULL; -} - -void register_shrinker_prepared(struct shrinker *shrinker) -{ - down_write(&shrinker_rwsem); - list_add_tail(&shrinker->list, &shrinker_list); - shrinker->flags |= SHRINKER_REGISTERED; - shrinker_debugfs_add(shrinker); - up_write(&shrinker_rwsem); -} - -static int __register_shrinker(struct shrinker *shrinker) -{ - int err = __prealloc_shrinker(shrinker); - - if (err) - return err; - register_shrinker_prepared(shrinker); - return 0; -} - -#ifdef CONFIG_SHRINKER_DEBUG -int register_shrinker(struct shrinker *shrinker, const char *fmt, ...) -{ - va_list ap; - int err; - - va_start(ap, fmt); - shrinker->name = kvasprintf_const(GFP_KERNEL, fmt, ap); - va_end(ap); - if (!shrinker->name) - return -ENOMEM; - - err = __register_shrinker(shrinker); - if (err) { - kfree_const(shrinker->name); - shrinker->name = NULL; - } - return err; -} -#else -int register_shrinker(struct shrinker *shrinker, const char *fmt, ...) -{ - return __register_shrinker(shrinker); -} -#endif -EXPORT_SYMBOL(register_shrinker); - -/* - * Remove one - */ -void unregister_shrinker(struct shrinker *shrinker) -{ - struct dentry *debugfs_entry; - int debugfs_id; - - if (!(shrinker->flags & SHRINKER_REGISTERED)) - return; - - down_write(&shrinker_rwsem); - list_del(&shrinker->list); - shrinker->flags &= ~SHRINKER_REGISTERED; - if (shrinker->flags & SHRINKER_MEMCG_AWARE) - unregister_memcg_shrinker(shrinker); - debugfs_entry = shrinker_debugfs_detach(shrinker, &debugfs_id); - up_write(&shrinker_rwsem); - - shrinker_debugfs_remove(debugfs_entry, debugfs_id); - - kfree(shrinker->nr_deferred); - shrinker->nr_deferred = NULL; -} -EXPORT_SYMBOL(unregister_shrinker); - -/** - * synchronize_shrinkers - Wait for all running shrinkers to complete. - * - * This is equivalent to calling unregister_shrink() and register_shrinker(), - * but atomically and with less overhead. This is useful to guarantee that all - * shrinker invocations have seen an update, before freeing memory, similar to - * rcu. - */ -void synchronize_shrinkers(void) -{ - down_write(&shrinker_rwsem); - up_write(&shrinker_rwsem); -} -EXPORT_SYMBOL(synchronize_shrinkers); - -#define SHRINK_BATCH 128 - -static unsigned long do_shrink_slab(struct shrink_control *shrinkctl, - struct shrinker *shrinker, int priority) -{ - unsigned long freed = 0; - unsigned long long delta; - long total_scan; - long freeable; - long nr; - long new_nr; - long batch_size = shrinker->batch ? shrinker->batch - : SHRINK_BATCH; - long scanned = 0, next_deferred; - - freeable = shrinker->count_objects(shrinker, shrinkctl); - if (freeable == 0 || freeable == SHRINK_EMPTY) - return freeable; - - /* - * copy the current shrinker scan count into a local variable - * and zero it so that other concurrent shrinker invocations - * don't also do this scanning work. - */ - nr = xchg_nr_deferred(shrinker, shrinkctl); - - if (shrinker->seeks) { - delta = freeable >> priority; - delta *= 4; - do_div(delta, shrinker->seeks); - } else { - /* - * These objects don't require any IO to create. Trim - * them aggressively under memory pressure to keep - * them from causing refetches in the IO caches. - */ - delta = freeable / 2; - } - - total_scan = nr >> priority; - total_scan += delta; - total_scan = min(total_scan, (2 * freeable)); - - trace_mm_shrink_slab_start(shrinker, shrinkctl, nr, - freeable, delta, total_scan, priority); - - /* - * Normally, we should not scan less than batch_size objects in one - * pass to avoid too frequent shrinker calls, but if the slab has less - * than batch_size objects in total and we are really tight on memory, - * we will try to reclaim all available objects, otherwise we can end - * up failing allocations although there are plenty of reclaimable - * objects spread over several slabs with usage less than the - * batch_size. - * - * We detect the "tight on memory" situations by looking at the total - * number of objects we want to scan (total_scan). If it is greater - * than the total number of objects on slab (freeable), we must be - * scanning at high prio and therefore should try to reclaim as much as - * possible. - */ - while (total_scan >= batch_size || - total_scan >= freeable) { - unsigned long ret; - unsigned long nr_to_scan = min(batch_size, total_scan); - - shrinkctl->nr_to_scan = nr_to_scan; - shrinkctl->nr_scanned = nr_to_scan; - ret = shrinker->scan_objects(shrinker, shrinkctl); - if (ret == SHRINK_STOP) - break; - freed += ret; - - count_vm_events(SLABS_SCANNED, shrinkctl->nr_scanned); - total_scan -= shrinkctl->nr_scanned; - scanned += shrinkctl->nr_scanned; - - cond_resched(); - } - - /* - * The deferred work is increased by any new work (delta) that wasn't - * done, decreased by old deferred work that was done now. - * - * And it is capped to two times of the freeable items. - */ - next_deferred = max_t(long, (nr + delta - scanned), 0); - next_deferred = min(next_deferred, (2 * freeable)); - - /* - * move the unused scan count back into the shrinker in a - * manner that handles concurrent updates. - */ - new_nr = add_nr_deferred(next_deferred, shrinker, shrinkctl); - - trace_mm_shrink_slab_end(shrinker, shrinkctl->nid, freed, nr, new_nr, total_scan); - return freed; -} - -#ifdef CONFIG_MEMCG -static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, - struct mem_cgroup *memcg, int priority) -{ - struct shrinker_info *info; - unsigned long ret, freed = 0; - int i; - - if (!mem_cgroup_online(memcg)) - return 0; - - if (!down_read_trylock(&shrinker_rwsem)) - return 0; - - info = shrinker_info_protected(memcg, nid); - if (unlikely(!info)) - goto unlock; - - for_each_set_bit(i, info->map, info->map_nr_max) { - struct shrink_control sc = { - .gfp_mask = gfp_mask, - .nid = nid, - .memcg = memcg, - }; - struct shrinker *shrinker; - - shrinker = idr_find(&shrinker_idr, i); - if (unlikely(!shrinker || !(shrinker->flags & SHRINKER_REGISTERED))) { - if (!shrinker) - clear_bit(i, info->map); - continue; - } - - /* Call non-slab shrinkers even though kmem is disabled */ - if (!memcg_kmem_online() && - !(shrinker->flags & SHRINKER_NONSLAB)) - continue; - - ret = do_shrink_slab(&sc, shrinker, priority); - if (ret == SHRINK_EMPTY) { - clear_bit(i, info->map); - /* - * After the shrinker reported that it had no objects to - * free, but before we cleared the corresponding bit in - * the memcg shrinker map, a new object might have been - * added. To make sure, we have the bit set in this - * case, we invoke the shrinker one more time and reset - * the bit if it reports that it is not empty anymore. - * The memory barrier here pairs with the barrier in - * set_shrinker_bit(): - * - * list_lru_add() shrink_slab_memcg() - * list_add_tail() clear_bit() - * - * set_bit() do_shrink_slab() - */ - smp_mb__after_atomic(); - ret = do_shrink_slab(&sc, shrinker, priority); - if (ret == SHRINK_EMPTY) - ret = 0; - else - set_shrinker_bit(memcg, nid, i); - } - freed += ret; - - if (rwsem_is_contended(&shrinker_rwsem)) { - freed = freed ? : 1; - break; - } - } -unlock: - up_read(&shrinker_rwsem); - return freed; -} -#else /* CONFIG_MEMCG */ -static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, - struct mem_cgroup *memcg, int priority) -{ - return 0; -} -#endif /* CONFIG_MEMCG */ - -/** - * shrink_slab - shrink slab caches - * @gfp_mask: allocation context - * @nid: node whose slab caches to target - * @memcg: memory cgroup whose slab caches to target - * @priority: the reclaim priority - * - * Call the shrink functions to age shrinkable caches. - * - * @nid is passed along to shrinkers with SHRINKER_NUMA_AWARE set, - * unaware shrinkers will receive a node id of 0 instead. - * - * @memcg specifies the memory cgroup to target. Unaware shrinkers - * are called only if it is the root cgroup. - * - * @priority is sc->priority, we take the number of objects and >> by priority - * in order to get the scan target. - * - * Returns the number of reclaimed slab objects. - */ -static unsigned long shrink_slab(gfp_t gfp_mask, int nid, - struct mem_cgroup *memcg, - int priority) -{ - unsigned long ret, freed = 0; - struct shrinker *shrinker; - - /* - * The root memcg might be allocated even though memcg is disabled - * via "cgroup_disable=memory" boot parameter. This could make - * mem_cgroup_is_root() return false, then just run memcg slab - * shrink, but skip global shrink. This may result in premature - * oom. - */ - if (!mem_cgroup_disabled() && !mem_cgroup_is_root(memcg)) - return shrink_slab_memcg(gfp_mask, nid, memcg, priority); - - if (!down_read_trylock(&shrinker_rwsem)) - goto out; - - list_for_each_entry(shrinker, &shrinker_list, list) { - struct shrink_control sc = { - .gfp_mask = gfp_mask, - .nid = nid, - .memcg = memcg, - }; - - ret = do_shrink_slab(&sc, shrinker, priority); - if (ret == SHRINK_EMPTY) - ret = 0; - freed += ret; - /* - * Bail out if someone want to register a new shrinker to - * prevent the registration from being stalled for long periods - * by parallel ongoing shrinking. - */ - if (rwsem_is_contended(&shrinker_rwsem)) { - freed = freed ? : 1; - break; - } - } - - up_read(&shrinker_rwsem); -out: - cond_resched(); - return freed; -} - static unsigned long drop_slab_node(int nid) { unsigned long freed = 0; From patchwork Mon Aug 7 11:08:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343341 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 32E9DC001DF for ; Mon, 7 Aug 2023 11:10:39 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 872DF6B0078; Mon, 7 Aug 2023 07:10:38 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 849BA6B007B; Mon, 7 Aug 2023 07:10:38 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 712348D0002; Mon, 7 Aug 2023 07:10:38 -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 630EF6B0078 for ; Mon, 7 Aug 2023 07:10:38 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 355991406F5 for ; Mon, 7 Aug 2023 11:10:38 +0000 (UTC) X-FDA: 81097040556.12.76E0813 Received: from mail-pj1-f44.google.com (mail-pj1-f44.google.com [209.85.216.44]) by imf06.hostedemail.com (Postfix) with ESMTP id 5CD66180004 for ; Mon, 7 Aug 2023 11:10:36 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=kCYTaRcf; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf06.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.44 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406636; a=rsa-sha256; cv=none; b=hE74/WKEMtamyY5sOAiaQ/v3n2tdWzxQCb+OvPinoQN7riwRm4sKE/mrC0a0q4pfANbr2S cU37lxq7p/iRy3CvHf1+Zjf51Hdj9mTDvgh1IXUwQUiT/6GRqDkVgXxGPkjEra4xX6hTzz 6mBO/8yiadLlkK3olKTraIENodcrHio= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=kCYTaRcf; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf06.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.44 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406636; 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=v13l7IPlOPgFsnMxGKXfyNRR5BVZeBzBNEaAsOIHoYU=; b=mGOeolfOZy2EzB3T9l6zuCFkRE4PaOmrTj/eooHdaBuKv9Lwx69s3I4AHVrCwy8q64zasV Fii/AuAHXAss1tuSvFMzjCtBxN8AT7j0wpNSazfI2vtkSdp2PLb+wvhkAuieWqyS7fpRu2 TBO8gvVpgFTYOYh+6Dp2xAKFxA9p1r4= Received: by mail-pj1-f44.google.com with SMTP id 98e67ed59e1d1-2690803a368so590160a91.1 for ; Mon, 07 Aug 2023 04:10:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406635; x=1692011435; 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=v13l7IPlOPgFsnMxGKXfyNRR5BVZeBzBNEaAsOIHoYU=; b=kCYTaRcfjrYSEt8G3Tw1f1acTO5J6yxn7oF0SsGLa85MduwVEgH5omvSEO969tp3LA wpvSUu2A7//qJL2ilMqNB9PtHKQAFVNRC9oXX6TEGsUMhNv4mOxpl2C1YAZnVZpulCYe yLDYKwIJ4bAvkX2QuqtJJDYUJRh6vr19t7PfH+lhQ++ji8JDwdveN3FzqnpipfKLqAIG dvafeOsYb5J4XciY9gtlA1gSl238AIRfFhWaOJMr5WdeT5BLHH+Cl6s3+MJ/6Htxm+Cq sbYQtf3+i0mELZ2fQ4kGZP1NFS47ge8l8Znqj7GoIxgmAjgbPULzYpOui4TUq64XmvYi qgMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406635; x=1692011435; 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=v13l7IPlOPgFsnMxGKXfyNRR5BVZeBzBNEaAsOIHoYU=; b=LOgpF9dumm4hvhoxU/FTCIy2QHH+wiUtt8BMiZuuJwhbVoGSS7lCNId31W7PEvb1ob xqQF6a7fOMd7im0523a2+cK3QtBKLeV0rWjDnZShKsu78rU/hYnGncRfRytHiUa9UMr0 a9BGlC81jndtVdLIWK09T1w/7SOpD3LIX+ot9W4mtcFpGjQyHBargZg536qq6lnZYxeK zXIPaxXHpBW2w/AgQe19UH6tyRlfUY6VXVybzL1yJqagfRgIUmMBZECEGiT17haNfVUv HgSh/ZCRVrue5EkdZvPVpUrUbrEOaHZaDgfn9t3nGxqa22W7WAjkN1XTiuUpn94mRwU6 BbrQ== X-Gm-Message-State: AOJu0YxIC4T0ipetjL/mJ4MQFt7JpKW/Z0/yHA7hLHLRpLzwTT/diDBR OFHUz5oF4Nsx91xHkWqJYEEV0Q== X-Google-Smtp-Source: AGHT+IFtRmyHpiiF2qszY30g7vYVkD2mnACy5d4vfrtyjmwLjyswWFf77Xamslud93nGDOipc3oAlA== X-Received: by 2002:a17:90a:69c4:b0:269:34a6:d4ca with SMTP id s62-20020a17090a69c400b0026934a6d4camr6363728pjj.0.1691406635181; Mon, 07 Aug 2023 04:10:35 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.10.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:10:34 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 03/48] mm: shrinker: remove redundant shrinker_rwsem in debugfs operations Date: Mon, 7 Aug 2023 19:08:51 +0800 Message-Id: <20230807110936.21819-4-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 5CD66180004 X-Stat-Signature: r8g3i4u7ugmkrju1wgak6w1uuy597t3p X-HE-Tag: 1691406636-644222 X-HE-Meta: U2FsdGVkX1/JHajRLk+REHxpdhuHAxdhTuFj/VEH8se3V+sNsTDKl+C9HIjK1gtWmdeEN9WLnTg1P+MnANv3bCkej0Om+9GkIvSMm+P3RoFKjxtYpXNCgmtZtymOxSjyi+yqUoYC3Xb4F09V+r10SQ5dhf5UZ9mEbd5KPz7NlibVk/hNUXz11xKBZ3Zj39jwGYaE4UibKNDl1FHNbYraSuRjxNqq7eYjbJ1TTFBYLWkAYotdtBAQTiXxCi101OKQVYSJvf6AKjO9vEYh8saRuA7iPGzinzEZYXNL3cjFsp4SvS6eNKGxMYyop+3+/cyy1gHyOTKAbLdJ/e7N0m5ZJV5iWUA4ulQfX3t5hhhoN5lHB6w4uUbLu5UY4F7gDrTpsa8SK3bbcO1X1a3/6uopTb4dSqwnw7E78xJTo4E5pzZ5wZL3m8kduH2RWyHJJFo0zyuTvSYOvDRW1rXMZCGRwWnt7MJ1g7U26R/a6hTN+BOTMrFe1QgF/ZoDUM/vou+qT3dE1PqLmwzL0iUOhLOQXRDWEoFRBYWcj8LvYenAZRBzflGwi6bmjWxJjvNA3Nla8V5c73ICFqDGCvB/om9T/nCMup8DBsNfKUuhAi+gYEiQ1O53l6ZvKwZHrYQi/6tYv0LmP2/FMrdoNsqlVd3/QakEVb7qZiyxIDDJZUsFJLdPWogiNHO8/brB7GrgyiPkZbr/eUdjwiqIhwtNztp3TKXJ4V4rG4r5H6LdJWBE6wbCZu8Gr04PQdO/YH9vDrdwNbk9RYZNOhLROAtIa3vv/XY+BBKBHXsb5BFBXgso6HOthFhEBZg3qGGUx9CgUvJk95GlH6F3mRH77zoJB6/pAfZYDDb1Iehw4D5COvsrdNNz8FY6BNFvyVIom+pb7YtjyzKiivN0XxY24Lf6gWdOFxEq4WAjb5v5JuAbzOqWJoXT6OvEtU3Ee1Bd44h9fpGG/QskF/0Wcq1BgDitOHK 5mv+5Id8 SWeW012hJo1GUVMtaG1vzqO3XxiNU8hXQ/+qFz9deKlnp4ccmxtK2W4ne09LaIRi+ph6Wy83LfR7j2L/hBzQyEDZrHGKas/zYlQ+uMXQVU7uvB+lPymg8NBScij5p+ynlQAV/ZQAqOpSMzcK076snkoD89unH66+60ic4tTXW77icCXv+DG4UFmcb9HL81V8/ax0dK7qY5Yljqo1R4WAN/tSfu5YXqIXm4cTdP4zbRaHwtDB0TEkOSZwJUN6sMYwdrcennkIQeMZeUHqI1ziNgov49IK6q+r8FqsccdpRe+n9OICBc8d0Zd252lgg9IEUfEWi/W4k1GNN/IVoSI8HIW7lax8g/G7t8kAFweZi2BNLG+tWAersMfXXQ1Qop+2qkrzBDxi5uj4m4F0eiDX+hNZBq93HkpFbpV2MSETYQqwVIaQ/BZcIo8pOWeDIaWMOLRH8xMCg+hCRXv2cu4QGi6IcMw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: The debugfs_remove_recursive() will wait for debugfs_file_put() to return, so the shrinker will not be freed when doing debugfs operations (such as shrinker_debugfs_count_show() and shrinker_debugfs_scan_write()), so there is no need to hold shrinker_rwsem during debugfs operations. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- mm/shrinker_debug.c | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/mm/shrinker_debug.c b/mm/shrinker_debug.c index 3ab53fad8876..61702bdc1af4 100644 --- a/mm/shrinker_debug.c +++ b/mm/shrinker_debug.c @@ -49,17 +49,12 @@ static int shrinker_debugfs_count_show(struct seq_file *m, void *v) struct mem_cgroup *memcg; unsigned long total; bool memcg_aware; - int ret, nid; + int ret = 0, nid; count_per_node = kcalloc(nr_node_ids, sizeof(unsigned long), GFP_KERNEL); if (!count_per_node) return -ENOMEM; - ret = down_read_killable(&shrinker_rwsem); - if (ret) { - kfree(count_per_node); - return ret; - } rcu_read_lock(); memcg_aware = shrinker->flags & SHRINKER_MEMCG_AWARE; @@ -92,7 +87,6 @@ static int shrinker_debugfs_count_show(struct seq_file *m, void *v) } while ((memcg = mem_cgroup_iter(NULL, memcg, NULL)) != NULL); rcu_read_unlock(); - up_read(&shrinker_rwsem); kfree(count_per_node); return ret; @@ -117,7 +111,6 @@ static ssize_t shrinker_debugfs_scan_write(struct file *file, struct mem_cgroup *memcg = NULL; int nid; char kbuf[72]; - ssize_t ret; read_len = size < (sizeof(kbuf) - 1) ? size : (sizeof(kbuf) - 1); if (copy_from_user(kbuf, buf, read_len)) @@ -146,12 +139,6 @@ static ssize_t shrinker_debugfs_scan_write(struct file *file, return -EINVAL; } - ret = down_read_killable(&shrinker_rwsem); - if (ret) { - mem_cgroup_put(memcg); - return ret; - } - sc.nid = nid; sc.memcg = memcg; sc.nr_to_scan = nr_to_scan; @@ -159,7 +146,6 @@ static ssize_t shrinker_debugfs_scan_write(struct file *file, shrinker->scan_objects(shrinker, &sc); - up_read(&shrinker_rwsem); mem_cgroup_put(memcg); return size; From patchwork Mon Aug 7 11:08:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343342 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 B3519C41513 for ; Mon, 7 Aug 2023 11:10:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4537C6B0075; Mon, 7 Aug 2023 07:10:51 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 404548D0003; Mon, 7 Aug 2023 07:10:51 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2A6478D0002; Mon, 7 Aug 2023 07:10:51 -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 1AEE76B0075 for ; Mon, 7 Aug 2023 07:10:51 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id DF4A240995 for ; Mon, 7 Aug 2023 11:10:50 +0000 (UTC) X-FDA: 81097041060.10.01FCDD8 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) by imf04.hostedemail.com (Postfix) with ESMTP id 130B340016 for ; Mon, 7 Aug 2023 11:10:48 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=XqSgm7kB; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf04.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406649; 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=0+ir4b8RJjPS6OIbAMeQuS4120VPLjqRz3YtsLadct8=; b=aqE22c1og3sWVMjzw7J2qaMRbeqc02cN3QhhpA67Eh8z0rrkfJJZMbfX64MKvh4sezjn6z aXNeMP0RFV2y3fbmb+JpRuro2K25HzalbhZKuycRTITei8OVoB12u8gHKYZv7TQktcPCom MfkTvfDT6RaClVetMnZFrioGqZy6ewM= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=XqSgm7kB; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf04.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406649; a=rsa-sha256; cv=none; b=wWnCT87MqjxgPkpn+q2EbSSv6ErGShfnopBHJykFlaOdcx1zlB2JZ0aCECDj3XCkIRCieS jsP4oYlCfTxMhnj8m2YwcY3pN0uIijNcnlrWUJuMerOA24BpAzxUPWvMx/88xMCf6FRiaA 9SV4SFR97OnYFIF2in02GwVkSoOax5w= Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-1bb91c20602so9340915ad.0 for ; Mon, 07 Aug 2023 04:10:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406647; x=1692011447; 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=0+ir4b8RJjPS6OIbAMeQuS4120VPLjqRz3YtsLadct8=; b=XqSgm7kBpeCnE2gk/ybefyIcAxePmTjaifDT0pHnXDcb/Nc/UeCuy/rdgy4xRowAkQ aP4dUp/hrUWHR/4zWDCrbxFRixmFOlV8pnAOQyS1AwDBmMy6PTOmr3iG0yKzCbxujje0 t73ctUmXR29afAKI5JNarlJvM1vvoPYY3cx3UcuU87ePLchKbMsLak0/Jvs9wqFUCDZe F5bgU4otH0OCdVxWD0sXM2a1eraAUukOoDwvlCcB8mzgk3iB2I7g5XjW4+48PuHaFgCc uOLaUcpy4QuZWt68WuxcqsF9z/vzQ2XOsuEa2jtvaGJ4t8kUtmd0Q7Uf/YTK0wRowRTP E2tA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406647; x=1692011447; 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=0+ir4b8RJjPS6OIbAMeQuS4120VPLjqRz3YtsLadct8=; b=Xr1Yko/yH3IUcMMzXhLa6eiqksex0CXOJSTIPN8WguRZx8R8WUQ6uiYBqFlFVrOCkM UlOQmdzMauyZCTQFTlNRz1llVjf+9iIuBRodMaBeFqjDGRa6QjoF7iPwjVi+TzXc5NKR rpYeda6z4aNiIbKtKsdbbPVniB6WbCvHNpJ7SQ2YTa36kqjAqEUCIiRJafhShMPBQt6X FNDR09OveNtqIS/VAuUqrYggmV+8i3xtO3wt5PCjC/6kM+IycvXipvjgw2wq7+57sD7e xdTyCkzLOqDyoZZSxYrLYByZ9UNN6ymy2LAbb8NU9Ij18uQXk7xj/XN1RQ8EFKzad8al 7GdQ== X-Gm-Message-State: ABy/qLaxR1gwVxHSUdMAhfGTSTOiWM+x60ERp6EYFDO8Dnm12qyTM4mH ZWYrVlCgYNT2yIv8hu4Yslozbg== X-Google-Smtp-Source: APBJJlHuLqAtKowl4cccNcqjA9V94U7s0kNn49/V0/tk7bu/NPlYiQpbpDIicm2vAutfhjwO22jVoA== X-Received: by 2002:a17:902:f54d:b0:1b8:9fc4:2733 with SMTP id h13-20020a170902f54d00b001b89fc42733mr32837074plf.3.1691406647588; Mon, 07 Aug 2023 04:10:47 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.10.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:10:47 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v4 04/48] mm: shrinker: add infrastructure for dynamically allocating shrinker Date: Mon, 7 Aug 2023 19:08:52 +0800 Message-Id: <20230807110936.21819-5-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 130B340016 X-Stat-Signature: zdond1h9eaust41tiyzojzyfwoys9ucp X-HE-Tag: 1691406648-962551 X-HE-Meta: U2FsdGVkX1/YXIC2yq7wTz0Tavy+i77dQr/56TCNy1WjpPXeBZjXq7UVzAiX2XSwUGxi+5l6P/YqFNHRgPYx8q92D2QEss2EPn8WBB6S3/iLxqOG/wwb75SIzNWIgYaqTfdPxxMC/3Rt7TDfZw5BLmNnWrUHwozr5RpIUvI0AHRdBxbP464s9b1mGQaR0UX0z4VXRt2kZ01oizxGy8irvWSEOjkVKJhtMGDIGtJvrzJ0olQ5+VBgeFqldlTaWzC8m7pB3Jqn0L8yC52pT4Z8HCgipyTciOyMKIzAKXEhGSn8KWWFwQnNXCX7nJ5aoItweDLiB+vZCGcmHbJ4WNQ0Rwn1zYHrFDGwR7/lkpx5gxsKzfuxyiNOFX0QKmk5t1NlxiMzk5PMta4YUlux46Qhz1pSVldZzTDpev8PYcfyOQHSLH3/HjBB238Vgt2I9HvaVtzNtWPRc37dK8N7BnutNR2UTi6DeBvGAVa9Tj/qnMAAlC9waiP6e96lq1anDNs3/bOD1aP2QuTn353AhZXfJSshbAMn9/VAv3ctMWeyCcdu033eKSMZr0cPDrmLxgsTIBbl8eqEM8asDMDuIYpa8CAtRlTbp3GiN36TQeez9uDndg5AySX4UjD1I+Ch99bgxv4vFUmbvJPNiDQEgnmC9bPwApoCrJRHM7F1YHoDC8bHP/23/3I9fcEUEVNKciVWF+iIOAMpVBAYSHnNXl3ixUyJUYBgKA/lpuiWqc7XjY6e20uziRihlV7Mqb7BD6wx4+2RIwfHxaSYIpIR+Hog/475qzr5gtLSTx9Z9ZuZnvzRoNUBhhUooFmOoK8xISurK5WNxw5w7z3L+QI2oUzwnLxtGFyZvKC4tuSWmbfPueYbMgjxpF7rYf4mDt+bi4mrfmXlzVsMaB5jVe43ZhjrFOG8f2RD2ZaWZfkSU+LR2RV4ovDMZpb2R6DCZC+XrcY1SER5DfkLnctIce9PAdk N/ocD3oT 1eIAFMLYZnJSJdBRKQylSm3zeBBjrMFyW9yN/3miZMyEYwTWLWZwbAgmocBPnaWIPmHzfLYJ8OD4w6IHmGevUugbCteIJmoZk1kTPhun+/3axtr5zUENgwf3EpEPVoZoDJ1jeHS0DHqkw4EefX3AgX2O93t4r8AUtUaMmCLaUHNcS2/SXupN8zdosx7mYjjzGP56ASmJqjsQEeh9NaT8PnuMrZ/csOV+yo7Sx981hclxKpxaEpuaydUwlKHO6F687Ab+ikuzIgYDfjGttqFTrE0WlkCziCLRZx5+pNqvy7AEIx9IVaCDbf2Akvb1HaAnsEsGFh7gRiwgWytA6W/nB7B0vmOE3JR1p3X0ocvwQfbu7gb+QQjYPCurwiBXPj4xEKdpN+4R6hjn5X3d6boxmzcX3Hm0IJRKSOxZz X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Currently, the shrinker instances can be divided into the following three types: a) global shrinker instance statically defined in the kernel, such as workingset_shadow_shrinker. b) global shrinker instance statically defined in the kernel modules, such as mmu_shrinker in x86. c) shrinker instance embedded in other structures. For case a, the memory of shrinker instance is never freed. For case b, the memory of shrinker instance will be freed after synchronize_rcu() when the module is unloaded. For case c, the memory of shrinker instance will be freed along with the structure it is embedded in. In preparation for implementing lockless slab shrink, we need to dynamically allocate those shrinker instances in case c, then the memory can be dynamically freed alone by calling kfree_rcu(). So this commit adds the following new APIs for dynamically allocating shrinker, and add a private_data field to struct shrinker to record and get the original embedded structure. 1. shrinker_alloc() Used to allocate shrinker instance itself and related memory, it will return a pointer to the shrinker instance on success and NULL on failure. 2. shrinker_register() Used to register the shrinker instance, which is same as the current register_shrinker_prepared(). 3. shrinker_free() Used to unregister (if needed) and free the shrinker instance. In order to simplify shrinker-related APIs and make shrinker more independent of other kernel mechanisms, subsequent submissions will use the above API to convert all shrinkers (including case a and b) to dynamically allocated, and then remove all existing APIs. This will also have another advantage mentioned by Dave Chinner: ``` The other advantage of this is that it will break all the existing out of tree code and third party modules using the old API and will no longer work with a kernel using lockless slab shrinkers. They need to break (both at the source and binary levels) to stop bad things from happening due to using unconverted shrinkers in the new setup. ``` Signed-off-by: Qi Zheng --- include/linux/shrinker.h | 7 +++ mm/internal.h | 11 +++++ mm/shrinker.c | 101 +++++++++++++++++++++++++++++++++++++++ mm/shrinker_debug.c | 17 ++++++- 4 files changed, 134 insertions(+), 2 deletions(-) diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index 8dc15aa37410..cc23ff0aee20 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 @@ -95,6 +97,11 @@ struct shrinker { * non-MEMCG_AWARE shrinker should not have this flag set. */ #define SHRINKER_NONSLAB (1 << 3) +#define SHRINKER_ALLOCATED (1 << 4) + +struct shrinker *shrinker_alloc(unsigned int flags, const char *fmt, ...); +void shrinker_register(struct shrinker *shrinker); +void shrinker_free(struct shrinker *shrinker); extern int __printf(2, 3) prealloc_shrinker(struct shrinker *shrinker, const char *fmt, ...); diff --git a/mm/internal.h b/mm/internal.h index b98c29f0a471..7b882b903b82 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -1152,6 +1152,9 @@ unsigned long shrink_slab(gfp_t gfp_mask, int nid, struct mem_cgroup *memcg, #ifdef CONFIG_SHRINKER_DEBUG extern int shrinker_debugfs_add(struct shrinker *shrinker); +extern int shrinker_debugfs_name_alloc(struct shrinker *shrinker, + const char *fmt, va_list ap); +extern void shrinker_debugfs_name_free(struct shrinker *shrinker); extern struct dentry *shrinker_debugfs_detach(struct shrinker *shrinker, int *debugfs_id); extern void shrinker_debugfs_remove(struct dentry *debugfs_entry, @@ -1161,6 +1164,14 @@ static inline int shrinker_debugfs_add(struct shrinker *shrinker) { return 0; } +static inline int shrinker_debugfs_name_alloc(struct shrinker *shrinker, + const char *fmt, va_list ap) +{ + return 0; +} +static inline void shrinker_debugfs_name_free(struct shrinker *shrinker) +{ +} static inline struct dentry *shrinker_debugfs_detach(struct shrinker *shrinker, int *debugfs_id) { diff --git a/mm/shrinker.c b/mm/shrinker.c index 043c87ccfab4..43a375f954f3 100644 --- a/mm/shrinker.c +++ b/mm/shrinker.c @@ -550,6 +550,107 @@ unsigned long shrink_slab(gfp_t gfp_mask, int nid, struct mem_cgroup *memcg, return freed; } +struct shrinker *shrinker_alloc(unsigned int flags, const char *fmt, ...) +{ + struct shrinker *shrinker; + unsigned int size; + va_list ap; + int err; + + shrinker = kzalloc(sizeof(struct shrinker), GFP_KERNEL); + if (!shrinker) + return NULL; + + va_start(ap, fmt); + err = shrinker_debugfs_name_alloc(shrinker, fmt, ap); + va_end(ap); + if (err) + goto err_name; + + shrinker->flags = flags | SHRINKER_ALLOCATED; + + if (flags & SHRINKER_MEMCG_AWARE) { + err = prealloc_memcg_shrinker(shrinker); + if (err == -ENOSYS) + shrinker->flags &= ~SHRINKER_MEMCG_AWARE; + else if (err == 0) + goto done; + else + goto err_flags; + } + + /* + * The nr_deferred is available on per memcg level for memcg aware + * shrinkers, so only allocate nr_deferred in the following cases: + * - non memcg aware shrinkers + * - !CONFIG_MEMCG + * - memcg is disabled by kernel command line + */ + size = sizeof(*shrinker->nr_deferred); + if (flags & SHRINKER_NUMA_AWARE) + size *= nr_node_ids; + + shrinker->nr_deferred = kzalloc(size, GFP_KERNEL); + if (!shrinker->nr_deferred) + goto err_flags; + +done: + return shrinker; + +err_flags: + shrinker_debugfs_name_free(shrinker); +err_name: + kfree(shrinker); + return NULL; +} +EXPORT_SYMBOL_GPL(shrinker_alloc); + +void shrinker_register(struct shrinker *shrinker) +{ + if (unlikely(!(shrinker->flags & SHRINKER_ALLOCATED))) { + pr_warn("Must use shrinker_alloc() to dynamically allocate the shrinker"); + return; + } + + down_write(&shrinker_rwsem); + list_add_tail(&shrinker->list, &shrinker_list); + shrinker->flags |= SHRINKER_REGISTERED; + shrinker_debugfs_add(shrinker); + up_write(&shrinker_rwsem); +} +EXPORT_SYMBOL_GPL(shrinker_register); + +void shrinker_free(struct shrinker *shrinker) +{ + struct dentry *debugfs_entry = NULL; + int debugfs_id; + + if (!shrinker) + return; + + down_write(&shrinker_rwsem); + if (shrinker->flags & SHRINKER_REGISTERED) { + list_del(&shrinker->list); + debugfs_entry = shrinker_debugfs_detach(shrinker, &debugfs_id); + shrinker->flags &= ~SHRINKER_REGISTERED; + } else { + shrinker_debugfs_name_free(shrinker); + } + + if (shrinker->flags & SHRINKER_MEMCG_AWARE) + unregister_memcg_shrinker(shrinker); + up_write(&shrinker_rwsem); + + if (debugfs_entry) + shrinker_debugfs_remove(debugfs_entry, debugfs_id); + + kfree(shrinker->nr_deferred); + shrinker->nr_deferred = NULL; + + kfree(shrinker); +} +EXPORT_SYMBOL_GPL(shrinker_free); + /* * Add a shrinker callback to be called from the vm. */ diff --git a/mm/shrinker_debug.c b/mm/shrinker_debug.c index 61702bdc1af4..aa2027075ed9 100644 --- a/mm/shrinker_debug.c +++ b/mm/shrinker_debug.c @@ -191,6 +191,20 @@ int shrinker_debugfs_add(struct shrinker *shrinker) return 0; } +int shrinker_debugfs_name_alloc(struct shrinker *shrinker, const char *fmt, + va_list ap) +{ + shrinker->name = kvasprintf_const(GFP_KERNEL, fmt, ap); + + return shrinker->name ? 0 : -ENOMEM; +} + +void shrinker_debugfs_name_free(struct shrinker *shrinker) +{ + kfree_const(shrinker->name); + shrinker->name = NULL; +} + int shrinker_debugfs_rename(struct shrinker *shrinker, const char *fmt, ...) { struct dentry *entry; @@ -239,8 +253,7 @@ struct dentry *shrinker_debugfs_detach(struct shrinker *shrinker, lockdep_assert_held(&shrinker_rwsem); - kfree_const(shrinker->name); - shrinker->name = NULL; + shrinker_debugfs_name_free(shrinker); *debugfs_id = entry ? shrinker->debugfs_id : -1; shrinker->debugfs_entry = NULL; From patchwork Mon Aug 7 11:08:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343343 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 294A1C04A6A for ; Mon, 7 Aug 2023 11:11:04 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BF5216B0072; Mon, 7 Aug 2023 07:11:03 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BA68F6B0074; Mon, 7 Aug 2023 07:11:03 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A6F158D0002; Mon, 7 Aug 2023 07:11:03 -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 960ED6B0072 for ; Mon, 7 Aug 2023 07:11:03 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 4BB901208E9 for ; Mon, 7 Aug 2023 11:11:03 +0000 (UTC) X-FDA: 81097041606.05.17877DE Received: from mail-pg1-f170.google.com (mail-pg1-f170.google.com [209.85.215.170]) by imf20.hostedemail.com (Postfix) with ESMTP id 7C2FE1C0017 for ; Mon, 7 Aug 2023 11:11:01 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Gyvrq2nf; spf=pass (imf20.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.170 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406661; 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=gw0136sZs5r00/aJ54ocs9PBikYP7lRbXpwQPAfPTOc=; b=J8PTDDsCLGPvhh/Y1ln9fxnaVkiA8gRwYXuaOtiWVc8leM9pJnKMHhzh5Wi+MBRZHbapIM ozkTH7qig0XH+VVMf0qeBSfEoYmcmVABouf5AQudskbPJfGh2CpWl+b3AX8VEiXGNKL9tH lNf+s7gMOVnvEaATXAJ7tNQqIhm2Hac= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406661; a=rsa-sha256; cv=none; b=E4cnVcylbuuaoMviE6GsLdjcYOzxSVpM87sJTvbDLSJo3zd1SjnpQOThFGRgTWx3dumATc +UguvHq49lVJOm/wEniUdtwyIoCgHak3pcRrqiqMJFjmEP0oDwmxW9VZrkW1CXEbPWlenc r+a44PRwUHxmDUoQSq+HMgUUKpv1P8I= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Gyvrq2nf; spf=pass (imf20.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.170 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pg1-f170.google.com with SMTP id 41be03b00d2f7-55badd6d6feso571218a12.1 for ; Mon, 07 Aug 2023 04:11:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406660; x=1692011460; 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=gw0136sZs5r00/aJ54ocs9PBikYP7lRbXpwQPAfPTOc=; b=Gyvrq2nfyAR2gtiKV5zvL8Xhj+SCDDvYcDtn1XMvCOK2WxV+VSYbUnzAoQjYyvGt5+ PHTlpGahxelrDvlDYfQpwR6LaV4hFOqIXHRHdsrciNy+7qVINos9dShQ72ovzklZpuaN tBKHGkUe3hFlhdPUgFyU1ktgofOKrrDExvQw3WHpY26rCW0nNqj3a0s5WCQXQ9Bd9I93 TEwgyMogZ1mPzKBfTbunK1McubgsswcAT76vheTTNvE/WuA1UFNnV1+1CWE/ou902ykn 9hSF0PrzcrYBFpqGd0qLFTJvVM4g/FWHVeqzvA2yGx34iIfgBZSGKt0JN+J335S8BL/2 72/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406660; x=1692011460; 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=gw0136sZs5r00/aJ54ocs9PBikYP7lRbXpwQPAfPTOc=; b=hLmMoZP2yOEAw1HXPXQ7efIXb8usT7ld/nc3fQPD3pE7Sr0V2TUEf3eZ7CvKgmcMqq +eFZ2t9epFoxmWpttHuizSIMDYB9HQYNSJArCvRBl8A/GRii5AsCdPPgH//SzjHngrYE 4zo7YqA3lm6o1BrQEiNyrfaF+kbK8K6/xBbmW2E5OkcVJB22mNTmuZXd1nmc7wWGtz0j No3i9ef7+8Lei/6OqHOxLXV76adIgPZcWm0tpbfrqFqo2jKrGitc4Ae+bj05h21QEjgB LNhOKb3qFj25+CwnFvO7MTmyp669gCoPLZqYOnVLkff5A8toksEbd8paUUEr/gMQhdgA Vk+w== X-Gm-Message-State: ABy/qLahmMxjB71hV3LC4edAgICCzmua7dKfFmEdCGyPuVy2klz8cb8J XjVh2LV3qw7oj2lNWMGgogG2TQ== X-Google-Smtp-Source: APBJJlEPLwCkyM2NxjgH9xwMvzhNNiNlagu6lRBAbkDAEcDSA5oH2sSREkdo5fvCbnVAS1DDWMCKvg== X-Received: by 2002:a17:90a:4104:b0:25c:1ad3:a4a1 with SMTP id u4-20020a17090a410400b0025c1ad3a4a1mr24588690pjf.1.1691406660379; Mon, 07 Aug 2023 04:11:00 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.10.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:10:59 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 05/48] kvm: mmu: dynamically allocate the x86-mmu shrinker Date: Mon, 7 Aug 2023 19:08:53 +0800 Message-Id: <20230807110936.21819-6-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Stat-Signature: wdgo49rsyb7kmt6jpprt9opu3hs6rb1r X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 7C2FE1C0017 X-Rspam-User: X-HE-Tag: 1691406661-206719 X-HE-Meta: U2FsdGVkX1/iX3LiMQg6pmBZ6ZdMpuTU48gll2Kp5XlDlQZBGCQ1w8GK0vElIwH/UVEodxDVMs/pHyp+NXkpZO48ShWhk019qPzJWix3xA+TgSEOq6EodyauNqr9cuztG+4re2zQs+5oKstDoTkw6b2tosN0s/Z+XMogFhvEfcjBlKLXqkzBeGui5CejwZJ2g0FsAjwImlacEYGruWhqyRTIIkOUYS4m72HaGbz47iM9JWUHbjT+m99oIJwaQmoRXVVV+a/PE8Sga5uXuAKdrGBzGDg6UJmZ9kta6wlkY7OdZchKGjLPSb6eV8gO8RyJDk7QAPvEvXIz3udj1jHlRhYC0WnNsjbzHsfRuLTB7jXczu5GUc4ikxKrKiiRsUuNhYappSryj1uf1cpLAoWw0/5lEiSr9g3r3Bd+fB5QOQLXCVEiJw9ah9Xuklvb8BKBONp7HeTnjUzW86M8D7BkCIBz+oS48234Y49wrq3D/bylMU9zWit7wNDOdIEVVdTyXbLDRJ+H53icSjfEfhb3qHI5o7XOtpDPJ/qETMqpTHXcRuXNjYaKvX+eYhkeernawJdn3noHgaglDoFcFcC8xQLVxfyeh11jCJiloppgh72DYXOvXrYDC+uF1rOULHy873d0w9W8dgVwnIHAMUrm+oIabrqEACgmmc2zo/ej0T6IU+kRJTE0wUkZWkfA+YUnHgyiNRcGXKWIXnObsRru190tZvjYSPMxbFekOF8dXqA4WCHYKnYuQguoqyIIQnuMvWUWo81LlXyFIirujf0B2494At4vzOpMIZLrGvtk2z9SEkLzHPhyUiTRQ5O4CxRCtooY6hzBlrSDCoorsaNkLzCWo068jlPb3YVQOcKqb0xPn7RIPdC4mWycXoQGZFA70gqDKDG0r90VwT/tsrBWIv/Jz0lX5xOksAEwtdDVjnYQPzL//EL5JK6DovmF8F2pBBDCc2xsyRlRfoRr0Gt T6hVkkIh Ax9uLrjvGw2mcBaQ4KGIm709VjtATHtwyYPBNkTWQjoEHRXQ4KDJhfxOMIQFR9KwAZHFdxYEdh1X/ZfXaP38Jp+mYcxTepiLUYecBlK1nyYPv9tqSD6Wk+KS+/fKt03OvI2KC3EvV96utwA6j1JLwjREZdy7fAe92nMjWPSWYNyTxmbvOcJAk+ygbWUzMgRJnTq0c2vTwjEO4TVsRD8yEjetwAuBxfivNdeMze6pwPoNnnctEnIar9k2vOaB4o5QdFx6ZHjTZl1NMSQTAe24fe1hCNLm7GXnG1EOKwj758M/8VKwTFYWEHjmZXdw5kN0JQEnV4v61BZAxk9njEUWkRiwbSVlhrgXapYxoDhUYGfw7tc+wmi3znO32XtcjQW2IV4kwgW6KeQ6C/o6jX96gTWDwxy9faGGqhfBS X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Use new APIs to dynamically allocate the x86-mmu shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- arch/x86/kvm/mmu/mmu.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 9e4cd8b4a202..0386d5ec97b0 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -6804,11 +6804,7 @@ static unsigned long mmu_shrink_count(struct shrinker *shrink, return percpu_counter_read_positive(&kvm_total_used_mmu_pages); } -static struct shrinker mmu_shrinker = { - .count_objects = mmu_shrink_count, - .scan_objects = mmu_shrink_scan, - .seeks = DEFAULT_SEEKS * 10, -}; +static struct shrinker *mmu_shrinker; static void mmu_destroy_caches(void) { @@ -6941,10 +6937,16 @@ int kvm_mmu_vendor_module_init(void) if (percpu_counter_init(&kvm_total_used_mmu_pages, 0, GFP_KERNEL)) goto out; - ret = register_shrinker(&mmu_shrinker, "x86-mmu"); - if (ret) + mmu_shrinker = shrinker_alloc(0, "x86-mmu"); + if (!mmu_shrinker) goto out_shrinker; + mmu_shrinker->count_objects = mmu_shrink_count; + mmu_shrinker->scan_objects = mmu_shrink_scan; + mmu_shrinker->seeks = DEFAULT_SEEKS * 10; + + shrinker_register(mmu_shrinker); + return 0; out_shrinker: @@ -6966,7 +6968,7 @@ void kvm_mmu_vendor_module_exit(void) { mmu_destroy_caches(); percpu_counter_destroy(&kvm_total_used_mmu_pages); - unregister_shrinker(&mmu_shrinker); + shrinker_free(mmu_shrinker); } /* From patchwork Mon Aug 7 11:08:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343344 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 0B2B7C41513 for ; Mon, 7 Aug 2023 11:11:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8E9586B0074; Mon, 7 Aug 2023 07:11:16 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8BF846B0078; Mon, 7 Aug 2023 07:11:16 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 787668D0002; Mon, 7 Aug 2023 07:11: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 6744D6B0074 for ; Mon, 7 Aug 2023 07:11:16 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 3C5A51C992F for ; Mon, 7 Aug 2023 11:11:16 +0000 (UTC) X-FDA: 81097042152.15.53C8575 Received: from mail-pg1-f172.google.com (mail-pg1-f172.google.com [209.85.215.172]) by imf10.hostedemail.com (Postfix) with ESMTP id 62354C0015 for ; Mon, 7 Aug 2023 11:11:14 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=ln47b2De; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf10.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.172 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406674; 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=YQ2nJ797AaeiRC4tEbuFSwr/qroaEGD64TBkJX9gwcc=; b=BJmBEPk9497s/+ZgpA0ytICI5ylJldgwcBck4/PP85qQhEhWJT+E2OCu7D0WbR4VUOnbsC EEkgTAbysZaPqU6uM5vogPGWd0iOWIHlikcu9GR0Bsk3nOo7BygwMeJUu7UoqgfQgdlh0l 7m/BZpPFg6bbU3QEsmGlYK7T0Jl7koY= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=ln47b2De; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf10.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.172 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406674; a=rsa-sha256; cv=none; b=yKIpZ3PE7tqIbtHAdQRat3BzFKCAysJAPtZhSe8peFzu5tHrj7eAbUjVejXTRnqJyi4SDj gPxub3uqExYRzwG8Vjs1DFpOTw/blXj8hTo9MkpW+B4BhHXgvEWp7U2pCPaKlJsPTs/y1Z dNeqeQvA0DYR5AsHybm7eLQCzv5+v7E= Received: by mail-pg1-f172.google.com with SMTP id 41be03b00d2f7-51f64817809so359940a12.1 for ; Mon, 07 Aug 2023 04:11:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406673; x=1692011473; 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=YQ2nJ797AaeiRC4tEbuFSwr/qroaEGD64TBkJX9gwcc=; b=ln47b2De8WoaconN/yovNFIYkpyrSlbHjJ7O30AuN0v3fhaptV8Rv8p/uTgMw5ewUp ZG1baXWX3w4cWqVDXIBOemS0oLj2+PNkaGXC2OZVpKMXphkVdxVMTs/lnTAL5HQl/5sY XaAH/gxR2iJTsD9i1SGvIVeauJ8ohBUlyO6fZCAIfCsaCSqlNBgSWC3X4OcCTxOF8D8P aJ3rhIbrBRQ4RScgXu8Juii6sq5YNvbJw6x09Ixyfaq7t74WXRGryvfs7JEz6b0jZFwc ahGUwsb8fn5Z7b9T7/r6r1MmeGyYyDblu8RFgBNHHb0eaf9aJCBTyNjHYvmNxb3vGqrU A9hQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406673; x=1692011473; 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=YQ2nJ797AaeiRC4tEbuFSwr/qroaEGD64TBkJX9gwcc=; b=mIBH8ICdpAWojS1QC4sE0m3Nhup1wMuyRtpNmOGkjzaxsT6FS8kQVGEUuvarSn5+6j VzDYQRUx4TYcM2fv6TXywnTWKD0jB1lfKV73tsSAeqp3Erj8qrrJ/54xuO7DqE97kOtE y7kLBc343H9rsLhvaVzaea4ZUyU+b4yqCE0VKfpvkzZptw/QidYtANeRMn1EHTPyxAMC oGw9E4Z0ZTe+NKzUEsBmltYdLqGDnKUPE6mtFq7CihLp3MCB8UeIX+Rj+gpZIDrPSxZa 2ohL5XiuObt2Kms4skPZaE3DVp+htjir9XVBRHQhdWjJZxj6UlPudTy9zdnY6a+xoJKt CT7A== X-Gm-Message-State: ABy/qLZNBDH7A5lbYh7UJR3deMyHwjBgadXKr6SSNcqL5AZrSb3O3M+I AQlv6F74BZqI5gmao/eTmKU7Cw== X-Google-Smtp-Source: APBJJlHrBtuiCQCJiVcJQ0g2xFi5uTTiYi1uZvqZ47NJp4VxlVmrIr4dlBS1TaGO2GoKAlBNE4DJvw== X-Received: by 2002:a17:90a:53a3:b0:268:437:7bd9 with SMTP id y32-20020a17090a53a300b0026804377bd9mr23468663pjh.3.1691406672888; Mon, 07 Aug 2023 04:11:12 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.11.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:11:12 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v4 06/48] binder: dynamically allocate the android-binder shrinker Date: Mon, 7 Aug 2023 19:08:54 +0800 Message-Id: <20230807110936.21819-7-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 62354C0015 X-Stat-Signature: fd6w6g53r4u9rwg6kaagm3zqd3n75r8n X-HE-Tag: 1691406674-85565 X-HE-Meta: U2FsdGVkX18RHxZ2W6DlRzK4GiYzquu7pprnr7iZ6n241rnTu9wQx4BF4L6omKMqUke3GJA9K9M9OBq02+Sg/oXE+5mmPQCyMwfMCWyoAIY6yQ1LLGR61B/3RR/iOCVqZmFX9e1PNxWK7+HYWooVE8M4rEF1jhMZPN0797e8UsMi7+oT4EUVgYWZDJST9YDuTK/TgltzmY1lADtrt6M8kO/DVbh6lFhp+BdI7vumZKvhpwTdYeb7Es9k/JPqPHMhlTZvyv4ifZB1H/7be/t0WPvGTMDsdtPyiXxfxmE1VqgsDdAb0zct9eGiSkKDXqnS5TdxYJul+AdVJJMdk99o6GlAhcfyA0qq2DYrtdq7hCg6hQctSBNMi13MgcrhhgDuVHas/Dl/hXeV6ksxc+sYUHZccvcd82CSOzv6xx7Wl7a0OE/qVhDXCuV2WeGVfsMGg2TBPTfiE06Na+BFvVluH9niGjHNZhyL6KqalUVXyRjc0pzp0+ED0Ev0XMmKo9QZUYnHpDG5jualTD1ULj018wz8Jmxf0Y5xUvEs8Dh55a+sSVCcsCnIvczlHZmaH3VvIc4ulbo7/SqJ8caGhU55QCmy4eyX2HATy3Fs36d95Sxicmf2b46qn0mz7rIc8tuNL0dMiNzZehjgR2lhdSstwW0F4N5OlBYpv/UWwZN2va25jnDZsYbio2IMQ9gHULMto29mzxSN2DnxIxEYPTAWc+Vhg8ccpoX+xUx3Jz6UerHVOh9EjFLP7cyCJuCUkyl0Zr18kxktRdZwla2xMSdpddgRMCCRehN+yeudVH8j8VEBagRoyTDGNnmKpIDs4HFUoa3i08e6CtB0zcgcYEiNg/urP4RzR6kCtxxMPp6WuRUR/LiZQZT2UJPHUCORSqqV8JZd7oFJPJzS8OdQkwMvhMG7RhC5HGsP5ZUq9r916krC/Z/CSs/7tT4BcyYYzfnUJLjsCNl88kUcTPgxHAL IBLIJkgZ HOYKR83870wqeO9YLU+T5pjcrutkHh9Y65xFNBDsh6+Sv/otVYkYqnhnzuzO2EPSUiOq76G9TJP14EbP90OSoLQPka5e/RWxEoKjXS12DDvoqNW0Nloq7goYoP39A6noasma083wOo0VUkU090q9eKI9AYhIB5Gq7IAmKGyEU2wSEqVpBPgTeCVoz2SF0hFArUb1h9BcyaLHENTPXUZwoT+8gCnkXfIhOn7CDLc3O4pcPJMheY1SZ+ggzCIynIZnuB2at1aSHQ1kdIhn7zrAwS3qTynBU8BqlHXPTlwXhwgAdd/VWP56EdI4veEAwsZm7uQQg5JgZDJ7ELnVQhD22E9JzqlKbof0r+aPxDcVHc5yDhK6jdwZRD1avEkSA726339oYX0cbMefgZW/yk6O0GZ7PHEnBHv0la6sJ X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Use new APIs to dynamically allocate the android-binder shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/android/binder_alloc.c | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c index e3db8297095a..62675cedd38e 100644 --- a/drivers/android/binder_alloc.c +++ b/drivers/android/binder_alloc.c @@ -1053,11 +1053,7 @@ binder_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) NULL, sc->nr_to_scan); } -static struct shrinker binder_shrinker = { - .count_objects = binder_shrink_count, - .scan_objects = binder_shrink_scan, - .seeks = DEFAULT_SEEKS, -}; +static struct shrinker *binder_shrinker; /** * binder_alloc_init() - called by binder_open() for per-proc initialization @@ -1077,19 +1073,30 @@ void binder_alloc_init(struct binder_alloc *alloc) int binder_alloc_shrinker_init(void) { - int ret = list_lru_init(&binder_alloc_lru); + int ret; - if (ret == 0) { - ret = register_shrinker(&binder_shrinker, "android-binder"); - if (ret) - list_lru_destroy(&binder_alloc_lru); + ret = list_lru_init(&binder_alloc_lru); + if (ret) + return ret; + + binder_shrinker = shrinker_alloc(0, "android-binder"); + if (!binder_shrinker) { + list_lru_destroy(&binder_alloc_lru); + return -ENOMEM; } - return ret; + + binder_shrinker->count_objects = binder_shrink_count; + binder_shrinker->scan_objects = binder_shrink_scan; + binder_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(binder_shrinker); + + return 0; } void binder_alloc_shrinker_exit(void) { - unregister_shrinker(&binder_shrinker); + shrinker_free(binder_shrinker); list_lru_destroy(&binder_alloc_lru); } From patchwork Mon Aug 7 11:08:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343345 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 D0460EB64DD for ; Mon, 7 Aug 2023 11:11:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7161E6B0078; Mon, 7 Aug 2023 07:11:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6C4546B007B; Mon, 7 Aug 2023 07:11:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 58C278D0002; Mon, 7 Aug 2023 07:11:29 -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 496076B0078 for ; Mon, 7 Aug 2023 07:11:29 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id D1C3D140879 for ; Mon, 7 Aug 2023 11:11:28 +0000 (UTC) X-FDA: 81097042656.23.604610B Received: from mail-pg1-f176.google.com (mail-pg1-f176.google.com [209.85.215.176]) by imf28.hostedemail.com (Postfix) with ESMTP id E7188C0018 for ; Mon, 7 Aug 2023 11:11:26 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=MlLUTFwB; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf28.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.176 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406687; a=rsa-sha256; cv=none; b=CUeHoLufXsluflVCyL0l3HqeMQKleCXTP8gG1pGeP0x9UA4BmF70d73jZyPj66lm3F1cyr OZjgFLkX7wP8nTYk0cA77CjEmzY11hLdXk8j5NNqzyO96HgptB5wVb3xBh2qGPYVVWRUoE mGx+SWk6+xbvbR7DNPa1zR3gPN/W+DI= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=MlLUTFwB; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf28.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.176 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406687; 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=ppdDbzxLfV7T8uyJ0+LWzuRMVQS50F9BO9dGotbDPbU=; b=6gyOnlRCitj/Wy0vLPBAGyww0oZRAGqArswFqbf3HUyWMGi6T0F8jSzA/iGrVaUzn6/rJo M3bAplsoktkRX0xFEbJ31IKiEl3DKA6Wwh9xrmoxwQ9UBszVUKE+dnY7lDa8KfpyOE0mRq MXYzreLuVEA8J/GvJAA4FOUOwBUa1Yo= Received: by mail-pg1-f176.google.com with SMTP id 41be03b00d2f7-56462258cdeso525401a12.1 for ; Mon, 07 Aug 2023 04:11:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406686; x=1692011486; 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=ppdDbzxLfV7T8uyJ0+LWzuRMVQS50F9BO9dGotbDPbU=; b=MlLUTFwBYj7txqomyX5RsQbZ0tuOTesyUPZa0imDy/CbzwI18VWLrI273BHEpiy/59 rQ1jtyDjjrm0A2fn5g0PDon6y1ODu6aNGJCylYpk7eBz5aCl8EYDqiryatgBLfE6j6wl z5DQPgedGrLwi+nxG0CDlruIcPgTiyaIMd4jUriznEP5tOm9lhp6XNenm09AU0AYyYPz hP8xB6m5xmZ4JEVQ0Bc2ouPU+2lWMJulVYbharTYlD2LjNPOhOgz1BVr9kOg3WfUC2R8 kqamQX4BkmNd+ktmJD6D1JNyz78v+ezzbXueyJ3khYdsrERbOdoO7diXy9Rr3O+Hss94 NCVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406686; x=1692011486; 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=ppdDbzxLfV7T8uyJ0+LWzuRMVQS50F9BO9dGotbDPbU=; b=CtqaEhFgXrUeP68p/mTPiCyuVG/rQwhuI9lCuHAk2I1myGHN3NmWZavKXzLmOek5LI /Z7IM+kVWL1gwG7Lpryqu47So+QdmuW1x4E9qGR9tlB071AA1FcDAIpQrEceq9uppCje mAwDK+q6LEPzchQq3scNzBLw6hqtLHrAY8+hRJoPTx6puM3QmT8fBGkketNFPWVI64Sj 7faT6+aGxAsTSaDR3PE0/YOBLY0eEJbx1pBLNMIx8YMiEJDQnCDLOLRn7VzsuP6waXZx 2SUeh6eWfelJYckqpQPz2Cy6bieERM4F/if/skPq7qAQoDL85HSxnB0Ix8ameAKyjx9A rO1Q== X-Gm-Message-State: AOJu0YwGhlF4G3XbptX3C9cx1gyTnKZh6oGhD7xSPcLMpP2VMcEnM6cM ezh1pVjienHaJc5/g7iwhUb2bQ== X-Google-Smtp-Source: AGHT+IF4N48rqO+yuBXOFXn//EzxG9zSjzgF29ivUv9kLYfrFhE3z4laIyd5mkV4h78zNK2JaBG8Rw== X-Received: by 2002:a17:90a:9c3:b0:269:41cf:7212 with SMTP id 61-20020a17090a09c300b0026941cf7212mr4956295pjo.4.1691406685878; Mon, 07 Aug 2023 04:11:25 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.11.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:11:25 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 07/48] drm/ttm: dynamically allocate the drm-ttm_pool shrinker Date: Mon, 7 Aug 2023 19:08:55 +0800 Message-Id: <20230807110936.21819-8-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: E7188C0018 X-Stat-Signature: d9p9zdhzpiydapi7qqybm7bo69ouugpd X-HE-Tag: 1691406686-822658 X-HE-Meta: U2FsdGVkX18Y/3cnZZ5ktNKRxiB7vbHTMdcZhxCki3xyhG41OKjVhqHP0LXdEkGO6UgztQDjSh6fzn+hFAJRnDPbhOXiIj8y2Xs9ah5Ki4Pt7pFV9qSR5t+S8NpU6DTkELahiUk48U+Mi+5J6R6Jwqknhxg1WkfFT1j/khErvS1yiV7IWodRlShebNdLKh2yGxHcRKr+tJGJ7bnmTOFSGoS6zVSNtLB7MAAqmy9OuCpy1i2pUTh1UvsDM92zW+CJyCIF860bAU2IoHLYuzuwj7kwG78peWreeA7EMOvNKxTFtwaYXmc4iev3NXnXhjwlDCAN9A65r+y1zFMPNdyXNUgMchbcmeBBohb9M7RcvfMuUYIvirR+RPXhTj7P5Vc26B1+GcgM+JYdxuH0fGeNW1QpnPVkRyd51KQCHqkRkP2F7mDHKJR+8FXCqQpc6ovHtSxOKbckLmykU2esiofp6h0OycylKU0OHd1sp74xIMJqxUmM55xojUNF5rwvfPeserkUw1Vufn6YUHGeA1ieIvzs47Pe07EG6BQ4NgsDzWUdtDsQU3wzhgBPIlyFUEg6TzzyzMubyJBIYsj47sD6LyuO1EaBAc2B3ZxTxnyGOsNmi+CP7ajykeNclMgCDYlwG0GdS4Co1tJuiwy6vK6rMc9GBRQNjGnA0sZa9hYBuZspO8WnJnF5Hmt9vl4I5tM7hq9cVjrECoxI/RsJouXLuOolP+RFR2QgEI1joXzdx6kjWh4LTYP9UeUN5q2uUtD9mW/FzOpUVUijt/8ZbbYDpoUNlm4odoiITSY+t3NmlWjDKJvcPpiVsvTtvvm9Z1nEkthu0lIaSBo+LPKbYPtRZUY4hT5tURzCyn2crWkQGA1Cf1qNL9o88V2HT+xCop8xpQONyP5vV2Lep/8w//XLyJgC96Ix3fSRCb3bcPRaF5vWn8J74F8SA5fkppnQxNWp1K/AwZ1hYb7YHngUPZJ zM0eqVep pK69Qr0PUPraQD/fQr96lZkarPUXsUnu3rFnOi0HmawYMkGBE6DaICh9ye4yas2FOmY2fkqepwtVqLiEvhQMoUy3wstwZG7mz/RtdUnwesHjVgfWoGxthXAc7G2teiKeYmJlOab4gi6g0xzeJI31+q3IsPFf4pQYlxM5GkNA+CVTaYFAA5HtmooEgZ894SbyXXl06DHQcMaQd5FgxA8tS3JjP8FDebokMSCdQRVpgudKgrPNeRA2KxTPwyt+PBMBMJdMnntaZiU50oed/PBPY08Dqs2ju5VN4rChwvt8TWABcouJ77ocmYA91nYpDzPQchZPZpuzA4UEc1Q57bwBr3PINJvWmR0RJXIcHPet76IylfcjjFXA0ltJTmPZu68ZSJUKbnW8O3yDdbWrZ4PsMPp2GdW2AIeHW4Jr9NVazBbRXsXPkAb13gFN/FSmkfBBpYifMrAjG1Cd2i8bimMrSXgDQSw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Use new APIs to dynamically allocate the drm-ttm_pool shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/gpu/drm/ttm/ttm_pool.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.c index cddb9151d20f..c9c9618c0dce 100644 --- a/drivers/gpu/drm/ttm/ttm_pool.c +++ b/drivers/gpu/drm/ttm/ttm_pool.c @@ -73,7 +73,7 @@ static struct ttm_pool_type global_dma32_uncached[MAX_ORDER + 1]; static spinlock_t shrinker_lock; static struct list_head shrinker_list; -static struct shrinker mm_shrinker; +static struct shrinker *mm_shrinker; /* Allocate pages of size 1 << order with the given gfp_flags */ static struct page *ttm_pool_alloc_page(struct ttm_pool *pool, gfp_t gfp_flags, @@ -734,8 +734,8 @@ static int ttm_pool_debugfs_shrink_show(struct seq_file *m, void *data) struct shrink_control sc = { .gfp_mask = GFP_NOFS }; fs_reclaim_acquire(GFP_KERNEL); - seq_printf(m, "%lu/%lu\n", ttm_pool_shrinker_count(&mm_shrinker, &sc), - ttm_pool_shrinker_scan(&mm_shrinker, &sc)); + seq_printf(m, "%lu/%lu\n", ttm_pool_shrinker_count(mm_shrinker, &sc), + ttm_pool_shrinker_scan(mm_shrinker, &sc)); fs_reclaim_release(GFP_KERNEL); return 0; @@ -779,10 +779,17 @@ int ttm_pool_mgr_init(unsigned long num_pages) &ttm_pool_debugfs_shrink_fops); #endif - mm_shrinker.count_objects = ttm_pool_shrinker_count; - mm_shrinker.scan_objects = ttm_pool_shrinker_scan; - mm_shrinker.seeks = 1; - return register_shrinker(&mm_shrinker, "drm-ttm_pool"); + mm_shrinker = shrinker_alloc(0, "drm-ttm_pool"); + if (!mm_shrinker) + return -ENOMEM; + + mm_shrinker->count_objects = ttm_pool_shrinker_count; + mm_shrinker->scan_objects = ttm_pool_shrinker_scan; + mm_shrinker->seeks = 1; + + shrinker_register(mm_shrinker); + + return 0; } /** @@ -802,6 +809,6 @@ void ttm_pool_mgr_fini(void) ttm_pool_type_fini(&global_dma32_uncached[i]); } - unregister_shrinker(&mm_shrinker); + shrinker_free(mm_shrinker); WARN_ON(!list_empty(&shrinker_list)); } From patchwork Mon Aug 7 11:08:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343346 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 54C66EB64DD for ; Mon, 7 Aug 2023 11:11:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E8DF26B0074; Mon, 7 Aug 2023 07:11:41 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E3DFC6B0075; Mon, 7 Aug 2023 07:11:41 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D065F8D0002; Mon, 7 Aug 2023 07:11:41 -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 C0C1C6B0074 for ; Mon, 7 Aug 2023 07:11:41 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 8FEBA40960 for ; Mon, 7 Aug 2023 11:11:41 +0000 (UTC) X-FDA: 81097043202.18.2BC8CC0 Received: from mail-pg1-f178.google.com (mail-pg1-f178.google.com [209.85.215.178]) by imf20.hostedemail.com (Postfix) with ESMTP id A83E81C001A for ; Mon, 7 Aug 2023 11:11:39 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=V+0c3qPh; spf=pass (imf20.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.178 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406699; 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=bO4yc6b0222dRNj48HoFyPuU9QjRVolFKKVhhMGpLKw=; b=WSr2CD1Sk5h9S8zd2z1VVrRX8pw0chIHMCiKD5GV9mzPtajf/qNcO6F9MTAWQjG5Nef1q9 w1Dkx5txns+le1KJZ3p53jc9ImKP0Kznl/XC9gBXbpAp9kUGIvCQteARYwhY43KD48CJmk XyrSkjLJk1Y0WjwYc+8OFiuaFE5LoAE= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406699; a=rsa-sha256; cv=none; b=hKjbxlff7MWxelK40L4OonwDdPU2eA51AXNnDLs2NG+2t2gywSpjB9yK1x7f+IlvfYiAdZ ZYwmRt11Z0h8MH4kd+r7Im9bg40HzdYi7FPBrbNmAsO398jBZFfqZaxBg4og5ZyjjcTL0T /SaPNUM2HVfdJU1WZG4SZ1FW8+tDHlI= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=V+0c3qPh; spf=pass (imf20.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.178 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pg1-f178.google.com with SMTP id 41be03b00d2f7-5643140aa5fso525264a12.0 for ; Mon, 07 Aug 2023 04:11:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406698; x=1692011498; 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=bO4yc6b0222dRNj48HoFyPuU9QjRVolFKKVhhMGpLKw=; b=V+0c3qPhJ3OvHdRK0zt0jjicV8eIk4mcEJBfZa3lpQkwu54lWNVPIEieS4PtRydxoC SOQosWaNmtA5ijvBvBTHzjmbD0d0j9BAeGMmaW/jH6uvD6Ej2n/njXM3uIqGlzrBkh1f 4pNHqPhVUKAnLp7tAzH1vcGObvmfuMOiL8NrO6wDjhRhzYUa1svLTbbXU3r4juxNC7M+ zvZ3SM7T/9w0Je9dQGJ4Z6qlkuAYn1bir+6JxlC1Qr6arztdDyFiMoqBolNxM3VBbd9i jsX4xXrnwmvTP/fkwCWNcOiK6G4rP96fjoeNSyiOnE04LmSKfInS+5dfsRm42DUoM8bY LffQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406698; x=1692011498; 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=bO4yc6b0222dRNj48HoFyPuU9QjRVolFKKVhhMGpLKw=; b=L7j8e5knhzXMuVI0FFVjl6FjVOOkYNfmYw+laSqBOemkxVA+qokLdfx6y/dYVSeRBw ayXByyo0OI8f3q2aUhleZieAcp+2fPtqY+4ygSRNq6q1HtLlTgaNHMbSgLzoqu1BuT8y 3atUSRGGoOO641B6/Js4hScAllBRvUe9GWVWk5s97u/t/nXCXV5kmoXx2smXlWAqTKM9 Si4SIAiI5d/KWUMX8optFaeh92r4I5AIzUXy5Cn6L90821nrcLU+Pfr4NSN2kkrT41wG bNk9kXFFkky2KLjTZ4Gbm8AWdmaepv6W7k9sumetKfRN+rYQuEuhHjgaaj/LMTBLab9k v3JQ== X-Gm-Message-State: ABy/qLZn4CffHRrwLwg5ykCUxxrgv/CryRvYgeosY/u/lA7+u05OPrK9 7ly7YpbHS3rlCDZNdcLqRF7NOQ== X-Google-Smtp-Source: APBJJlHTPEiI4d70NxX2nHst3XkAfiDRggXx1NmGRpA10Zf8iDezZWW8ih32EzxQIqpHPiYHvUOM5w== X-Received: by 2002:a17:90a:1f83:b0:268:3dc6:f0c5 with SMTP id x3-20020a17090a1f8300b002683dc6f0c5mr25027705pja.0.1691406698603; Mon, 07 Aug 2023 04:11:38 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.11.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:11:38 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 08/48] xenbus/backend: dynamically allocate the xen-backend shrinker Date: Mon, 7 Aug 2023 19:08:56 +0800 Message-Id: <20230807110936.21819-9-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Stat-Signature: hn4fe6j3o5knc1x8tfdyjza91npidbw8 X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: A83E81C001A X-Rspam-User: X-HE-Tag: 1691406699-147981 X-HE-Meta: U2FsdGVkX19pIJh5Q5GulrBb4VnHu43v5qLoDL7UTzxESh/FWEN98hRFJCl49MN5DajrHt7cwaEcYpRzLL9bzGEMuoLghOnprUVSg3q2zEQVZkFmQuM9I5e8enzE3mwGnURaUmC0j97X3s0Wn4eRBbd4A74zbPEtigbIEswOmzi4ruWRdI+CHwsk8tiOK1L28YH4mgtAN2Em0npaQQBPWx5kVlNzqX0La4w+itG3rFi46gq+mXPJeo1tmTqhMHE2cToJ4iXYPsn4k9fzK+JUADq1MoJS/hxZsY9iRt4p8ERX7Mt8zBPTb+pEzuEIvKE0T4Y3oly6DtCeGuFDGZtCKF6x6ibgR61U0gAspYSKcl/zIVizSFf7dcC7e6pDGAf12A74sKu/PVnCBANVrgP0QOVspNsjYRNcA3ANzD5IAYFiBbLDA37qjrAbUsF2NYbGUbbanjwSMESFVcwyovfHUsrE0fvGxpNXRjBipxrgesquu4oPX5cbnr9QJFgecDmBGB1l5Yk8zDw4so3y872mhcgd/wmulqRxlPjauEZRGQryZeFRzMrmVXcbaMmOxszQ32hME5Cp0yq2VdKocgGKuVzwMWn5Li+J0OcSdSltUQsxBrWHaVrjFZXNKHwu/zhb/CVj6HBzMOPhXGxDURTZiixNJ1rymh67tfmS2oMnS0jToRv0z8EeQDUYXKF2Yb0+aetrvwZQdiVY5cl/0rD6ZvHOQI6HlJOMpVn5avKdx7F19TOrs/m3+QjFL+A448dDCdED5FtweeyxZQBJzGE3lHRj0lRpY0awPrs7hJ2IqlLCMylan7XEUOKLLMW6Ji50yS+aOJa9owRRSB71XMfWl4RvKpkN1ly3KQiSdBwDtwwiFxUT/DKkBy7ZhVEdF6y8s5Es/zelNeaMonil3BWxlDkC3tJM/0uIC75aLO/R2NT3dvIgojgrwzEmxAUbV1UOeyeXzcccmdBVrhBbvYn EBUuyxjg eZDOqAjIPUOJTRAYtm4FcIV4YdqYs3dGnwERkmDnunjz8BGS4yORmxuCoLtX7gmG7mvBJJX9xq79Z+DolOp1QlMBETqK1okG5KUVCQYp+ss2/dggDUjmIxQ3e1TaCpAnQxrIknFy0t1dDH3olAI1pLQg0vgtVTrnGEWlozHp2JUmXgVFCz+euhZ6/w5AnR0D4YlV48+FqFdtEdtP2xXSRhCg1vP9lAOz08X4434y44h6Kvs3/K6nQmyh802QlZNky8hbtnhiX3va3vXFXYyMKpKSYyfdUPnflO2+rGbDxtCnjiXJ04ST4yAaaUW9jt3LoVp0oOCaUUuBcCHphqnh4ZyLPCsyEqg2R4M+EHBjs3TBxzxM/lmxM+1vjszXAXs8en2BRh4IVpx1MTEPuG/3IvyUk4+wviMERKcn4 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Use new APIs to dynamically allocate the xen-backend shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/xen/xenbus/xenbus_probe_backend.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/drivers/xen/xenbus/xenbus_probe_backend.c b/drivers/xen/xenbus/xenbus_probe_backend.c index da96c260e26b..929c41a5ccee 100644 --- a/drivers/xen/xenbus/xenbus_probe_backend.c +++ b/drivers/xen/xenbus/xenbus_probe_backend.c @@ -284,13 +284,9 @@ static unsigned long backend_shrink_memory_count(struct shrinker *shrinker, return 0; } -static struct shrinker backend_memory_shrinker = { - .count_objects = backend_shrink_memory_count, - .seeks = DEFAULT_SEEKS, -}; - static int __init xenbus_probe_backend_init(void) { + struct shrinker *backend_memory_shrinker; static struct notifier_block xenstore_notifier = { .notifier_call = backend_probe_and_watch }; @@ -305,8 +301,16 @@ static int __init xenbus_probe_backend_init(void) register_xenstore_notifier(&xenstore_notifier); - if (register_shrinker(&backend_memory_shrinker, "xen-backend")) - pr_warn("shrinker registration failed\n"); + backend_memory_shrinker = shrinker_alloc(0, "xen-backend"); + if (!backend_memory_shrinker) { + pr_warn("shrinker allocation failed\n"); + return 0; + } + + backend_memory_shrinker->count_objects = backend_shrink_memory_count; + backend_memory_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(backend_memory_shrinker); return 0; } From patchwork Mon Aug 7 11:08:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343347 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 20E9EC04A6A for ; Mon, 7 Aug 2023 11:11:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A21966B0075; Mon, 7 Aug 2023 07:11:55 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9D2726B007B; Mon, 7 Aug 2023 07:11:55 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8998B8D0002; Mon, 7 Aug 2023 07:11:55 -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 799156B0075 for ; Mon, 7 Aug 2023 07:11:55 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 4350780909 for ; Mon, 7 Aug 2023 11:11:55 +0000 (UTC) X-FDA: 81097043790.22.727CBC7 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) by imf07.hostedemail.com (Postfix) with ESMTP id 4BFBA4000E for ; Mon, 7 Aug 2023 11:11:53 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=G6tJn+16; spf=pass (imf07.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.180 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406713; 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=ubpyp4SIhGXjO6/VTKiZvWjlRzyN8ANvKHVN5xSGnIw=; b=UsYu9UD+P3UURnOovXFh+TF9r8nYoe1UrmLMEXYuuVxFyJmnv6DpIVXIjHgZSIFgV0lyS4 KyXJPt7ht00/X9yqebXivHncpUkavhEvstk1gx4QgIF1rZ2mLeDoKmdqI+Zq+B2TDyKfOy ehk19JinUES528BVP7uLCG5RhzuFNmk= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=G6tJn+16; spf=pass (imf07.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.180 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406713; a=rsa-sha256; cv=none; b=RXHDVV3VkfCgdPcqS7uO8IdoLTPZ9avNjk1tTEdQjueWij7T7eM2EdGpvFHUVbJsz+VDhs MZetXjXd7JJ+L2zlQIE3mHrU4PPwzchHgV0pMP5DOwWEC6JnUVB6hdPqJuV7sI+ZrXo/1l cRv4eB+cNYHxgJnJ4PopfTi0PRQGy2M= Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-1bb91c20602so9342295ad.0 for ; Mon, 07 Aug 2023 04:11:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406712; x=1692011512; 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=ubpyp4SIhGXjO6/VTKiZvWjlRzyN8ANvKHVN5xSGnIw=; b=G6tJn+16QVti2qtu2hqYljseIE/XGpe1Yhsul4LFU6R/aCDAM7lceOlES83Z0B/Pue 2irlih/PCzGRhADqlmxdT4ZmTPg/rDw2XT4QeZKx/Tui9xhVWAtyJogqiocaYi2mPJVJ JfsH0RSoKbpVavaYBWWtyo/mJh8W+H0WFTE4SVefHn6UoqHLIS8l90Z//i2iVib88cLh SO8x9HJ9eijOF2Obr6A8OaZNG3N0xetNtsejNB5r0CVLeObeV8ZzJa8r4m2G8/H610tO JRFiieD8eIQL4G+uzuFBv5AMDY6TbkMqFwB+fegzuV4xQGReerwz1d1NP8JNZHZ17Zsd g+Fg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406712; x=1692011512; 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=ubpyp4SIhGXjO6/VTKiZvWjlRzyN8ANvKHVN5xSGnIw=; b=MF21Zb2ahhHvarvpjm0pKVGymlmJVlVVIFpSSRprjt/ZwOLtLs7w6WL2vrrByLpr0+ +3Y7vPUGv7V5yk+Wmu1PCQ8byZsBWeBLWce2oGmV04pwYQ8Def8gNUVRIaJkrcPAnoi8 89yoPetxS6vVrQSmTOGPTX2gN4mv7jHZxmhe9RvFjw3+hM429q61LLYqxcHAjnUFLhcy xdDRMcMzerrwoun+zeenwMTRAJxg47kKO0+oKtrt0pVi93Er4XeH3mtKTVwe1wdmcSl7 HgoewtEwv9xYlzWLP/Ppqog1+XOEgkagUjK5m6xSk38PevQk/koUFFaEqor7dwwiezwT kqGg== X-Gm-Message-State: ABy/qLYqiWFyMHiABqIzuPHxB1zccFkeskspBiTKo9Ttmrjbb1XTkqT6 0I38BwE6/nNnAQqTDhB+zNY/Mg== X-Google-Smtp-Source: APBJJlGAdl0ewhYUg6UhJdRJKXIwq0U3XoR/AJshcbF16xE0A4mgQC4Umc8PgwnpC/Hq6tl8ikCZEw== X-Received: by 2002:a17:902:ea04:b0:1b8:17e8:547e with SMTP id s4-20020a170902ea0400b001b817e8547emr32460173plg.1.1691406712196; Mon, 07 Aug 2023 04:11:52 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.11.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:11:51 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 09/48] erofs: dynamically allocate the erofs-shrinker Date: Mon, 7 Aug 2023 19:08:57 +0800 Message-Id: <20230807110936.21819-10-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 4BFBA4000E X-Rspam-User: X-Stat-Signature: 89jzenxgf89o3g9dwtumwws8tg9rx6n7 X-Rspamd-Server: rspam01 X-HE-Tag: 1691406713-954720 X-HE-Meta: U2FsdGVkX1+DohrFcPk2QC8Vvm2oSQOT3Y0LRI+o8esQ7MBOXpd0Ky5kWWMrH7FLU7wofkAsX/T2eQZYJIfucrb5S9KOfy0592K1usXONIXSQAGY9FWOX7QF41RK/52SYmHX2iWueKpFVpBL1zD6RXpOmeKKCfDXLC35OxA/kJA3KBjxyWFtDo3WaPtTkmjDKRdRdnzSeGB4o1f5iT7P/Yvlx8eBLMdb8fjA/pCBk9lb5FVt0HNZ1iSgoc9J3zLzO7sN3+g23DFQTGhADpHJs/0iHJIO52ON3N8yITsTyqzyemjqAx3luDJ4k2scpDB95z00oqhC/DAYBFHB0djuUYSRrjc4xh9PLUGqhemTsOimWWiWhKoTxBtekQdnntsDP0Q6ofWDNb0NQ5VAZZgPbY+C6FckvkMo8dsDAXMF4pW5uCjWmwT2sWCQzlgoWvX5Ynfe4ImQl3XfKDhgk68REQhM5oAeCSFA3inHBWBkaOciz7bMZ93RfwB4Sp1uaQ2BxQQP3+5D3mbljDePxNp/MueCY4p8tM3+1Si1sxKXGtjb0JuSSQv3kYfrPTrNiAwPlgTOZcsmF4TeLb/TA/YDbN+qnCU1OLgoDugwLShNP0KsAVj0IlELuen3JbLsdNZYbQZezsaoMBovvdw2Tu0LVNUQKdf8buLEh+BpF2jSR2yiXy0BdJlxzeq6N3CchVazVTbpF+llIOI5vIsCoSKNZN4FImqU1Gc0qJcRWc/kog9j7ZErQwsSoWQwyLwtWD3Qo6DWtS3CcWpXXcfisumxvejGDsl9K0Ke/8et//VcfegQkntiafcjYnB+0g8pSHyetC7WKw5jc+TFyrIheXJ9gufEMY4B0BOwNCiIWMNLXtSANjX8P0R3ir8RlokyTddNJmXyHk5h/rV5XG7zKro/iBoDwRhrwgMZ7ClTU13K05wc7hziRb9KJE4BbRXcbJV5ABzUsCokvVaLOF/dEJr 66Ouv8it 4VtL7t4L0XET5wcbMLTQW3JZZPEF5N+G8C8Q66vJMV03rmtqfPAKkzb3MSFhpgrN0EnWNiwmCLtN2udXqHlD2f3W71n+jmeal2JnCZv8M/Q8RJHoxj6QpfjvNOLpmgmD8qVrPhJrnYDLa3LVUYwB2noQBXGOFaoSLOVLndvpQoAEBY3FP9YA9bGcVV39gwkbDajKsmL4kbRmS6n2L7xc0zYmgNJqXKbQbmTocHugIy9UzfT5CPtdQAM7XRe5AZlAVzk3XyX0MVyFdITZJzQRb7PqiK00qd17Sqv9l4bnuLluKRuYtwLcLGhmVeJQsOjHAJ9VfE00pcAbjEF33PYfuVr6NdpE97TEnqC/e+6yVtnlzetc0W/vsArMUPisgDDU2giSxfHAcM00cn8qUMjCeToDTPqEVNYo9tV0z X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Use new APIs to dynamically allocate the erofs-shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/erofs/utils.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/fs/erofs/utils.c b/fs/erofs/utils.c index cc6fb9e98899..6e1a828e6ca3 100644 --- a/fs/erofs/utils.c +++ b/fs/erofs/utils.c @@ -270,19 +270,25 @@ static unsigned long erofs_shrink_scan(struct shrinker *shrink, return freed; } -static struct shrinker erofs_shrinker_info = { - .scan_objects = erofs_shrink_scan, - .count_objects = erofs_shrink_count, - .seeks = DEFAULT_SEEKS, -}; +static struct shrinker *erofs_shrinker_info; int __init erofs_init_shrinker(void) { - return register_shrinker(&erofs_shrinker_info, "erofs-shrinker"); + erofs_shrinker_info = shrinker_alloc(0, "erofs-shrinker"); + if (!erofs_shrinker_info) + return -ENOMEM; + + erofs_shrinker_info->count_objects = erofs_shrink_count; + erofs_shrinker_info->scan_objects = erofs_shrink_scan; + erofs_shrinker_info->seeks = DEFAULT_SEEKS; + + shrinker_register(erofs_shrinker_info); + + return 0; } void erofs_exit_shrinker(void) { - unregister_shrinker(&erofs_shrinker_info); + shrinker_free(erofs_shrinker_info); } #endif /* !CONFIG_EROFS_FS_ZIP */ From patchwork Mon Aug 7 11:08:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343348 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 80D48C04A94 for ; Mon, 7 Aug 2023 11:12:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1BDC36B0072; Mon, 7 Aug 2023 07:12:08 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 16D8A6B007B; Mon, 7 Aug 2023 07:12:08 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 05C388D0002; Mon, 7 Aug 2023 07:12:08 -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 EB2436B0072 for ; Mon, 7 Aug 2023 07:12:07 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id C0247120A0E for ; Mon, 7 Aug 2023 11:12:07 +0000 (UTC) X-FDA: 81097044294.30.FE4A2FE Received: from mail-pg1-f173.google.com (mail-pg1-f173.google.com [209.85.215.173]) by imf29.hostedemail.com (Postfix) with ESMTP id EC71F12001B for ; Mon, 7 Aug 2023 11:12:05 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="Xc/b9RVe"; spf=pass (imf29.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406726; 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=2qNGhCyBYRkIC+KqhUj1bienmPbnCoyI88yux10rL0c=; b=2g8dS6NAXH70ZBTobyCCmKBezoTcGUbqcWCqbmyXLncRlz8jlSLYE0BWggJdQ3nvwe1cle pBVI1K5MwaN/eMPfit8FpZAKciVLph1AF6OHvJRpSGqw9xP2zPZLpPp6rWgX0XEi8BtRBR lqNjC1cAAR0NEyaqYDikGdHt01JhYrQ= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="Xc/b9RVe"; spf=pass (imf29.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406726; a=rsa-sha256; cv=none; b=wniaKph+TsFtoiNtmIF7AB9MmU9DicW0nvFLfKY4+Zt7gXNSPYHc9xnLcYSt3xP8vP10bQ foLHgGTjhP99EsRWiOAncFP8YkMPa6aBtYIr5ohZSllAF0SjhL78wB0cQlBF8uN0WnM+gZ 10+mavTD49ty8IFyWHn8Gg25RMhWESs= Received: by mail-pg1-f173.google.com with SMTP id 41be03b00d2f7-55b5a37acb6so361939a12.0 for ; Mon, 07 Aug 2023 04:12:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406725; x=1692011525; 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=2qNGhCyBYRkIC+KqhUj1bienmPbnCoyI88yux10rL0c=; b=Xc/b9RVeZGabBZRzbFnLG60A3XcuysnQbX8QDB63xQh9Qsy33GgzK9r54ssZ8BRYsv Zo1icyrpegHwV8KMFlNuxd6Vv7rJh2g9STB5A/Cyu6q4WM+YLxsvvmbNVVdkSntCluNl It/PLVMY+sHjh9niVg4dAEeIOr6EcMWhtMnuFdCY7H6/MC8Iz/ZfTZnLr8OJnSIA36e9 mmNGX7xKmI8VWlsJYDncO9Zq/rF2h1OiOCACwI0xXgbsWIREHFfM5CkS8NCDLLHpFGlK JETB4OwnLh2lGmaSIFNM9gd2qMpLx0zP9hut1e08UtN8MQU5ZK62c3ni+xnuk2sIAfG7 kkXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406725; x=1692011525; 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=2qNGhCyBYRkIC+KqhUj1bienmPbnCoyI88yux10rL0c=; b=TpCjOawhgxedr7zEQCx7Q+q/jV9rTtMRJACnfgjfbCVc2LuIBaNUQ0zd2VlrSgDNAB 0U/0aN0BGz1vNa0Xt/PK6s8efPkshk1v8Qdg07MbhSbxzjiOqznmpxy5UaSOdPQjDSYE ngVvKPH4qLX8oRy8c1ogzwtkB23FmRQZjdPBzlumV8mbedf2T2K7XR/77gJV4CS+/g0y ibCNb6J6CYQlnOV/cNCc+bGMyFxv4SrrXy5E9rwToD82NEtdYhcFuokNIaQjEFs1LuhT jYfilDU27VI9TmplFUKLPv2qAMXBMPcDpqqLWkQ3eF8BR7RlEmi67J3LHHIqUeQPpOvW 9Yaw== X-Gm-Message-State: AOJu0YzCgZIuJxDXuoE5z7klrmE1GpcPUQruBCUk9yGvTFwFWsZk9Lro aiS/WZ7ZCw/t75RExVbfT416zQ== X-Google-Smtp-Source: AGHT+IH0i+Trkswf5ZN/Zo/hyk0nSAkeHBCb5cnTJePkF3I+vCqNyDS8fjeM0LPIBtSn2h3E1rmPDQ== X-Received: by 2002:a17:90a:2909:b0:269:5bf7:d79c with SMTP id g9-20020a17090a290900b002695bf7d79cmr2210453pjd.1.1691406724771; Mon, 07 Aug 2023 04:12:04 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.11.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:12:04 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 10/48] f2fs: dynamically allocate the f2fs-shrinker Date: Mon, 7 Aug 2023 19:08:58 +0800 Message-Id: <20230807110936.21819-11-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: EC71F12001B X-Rspam-User: X-Stat-Signature: j7r47oy9gmgtu3p5k16tyk7x5kh79o65 X-Rspamd-Server: rspam01 X-HE-Tag: 1691406725-470877 X-HE-Meta: U2FsdGVkX18MRs20yj58Qaqmv4CZEjnXUvpmur6gMUrY0HlMoprS3kc0KMmpolfUL3kWqFiWBGXLnkuE41aIcrWXsRhBnzC773a5wmDDobX1kyvTKGObpenNaGUnwXxD2zFiVR36c2yXT43j2pJgriCB3PcOdSQbcF6R0OzbsXo8pPuBnTSUQdfFiCCbXoGYGk6n7+FlFy+Osen43t8b2dpnu7cbgWRJf50m44Y/S4hj25583f2w7tNC1+K8ivyJCuUDTVzWAYjCp15gasu/9d/wcSgeqTA47tzdWG800WMtxLXxAUvXY4b6meKKpVBbDgNZ7QyOoT73eDR2P7z/rnewSe1daaWJ9ubKYSKx9nkHH/+1WZxJJiyrUgB+EcQVm9cuph1y6BkrpSG6+kpJbYcMFvJhzJMqT1KY5Jc0P7FhixdfFZqpQnlRT3FR3gv+vTYDDoo4duRzQ7hhVzhPHIQcR+Ps+aSQmX3ClQD4OBkeo7m1YUi+IO5R3kLAx3IZIyoBh+6oG2bq7i6PXSVxa4x+LxWs9KJnjJ6L+nZAisgY6tMgU+E+Arm/z4UGOVFBP+9Sw4rIFbb+SWEvei3YXrGv6nZJ3gNYbDDUjQMDx2B/UX2U/BCdaRX3HqLo05TvQCoN0zj3+20lNXcvrGevHyCsK5PzTOCsEpnJuQ8yQ62wsayAu0rPizAuoYevPst/AYWH8vzDTKZx1DPt1c6/Js0IBgdbgZcwX1KnKH82vHUby0Oy0OztNy+3y/IJ8vz62FMfCKAmf9tyl2RwxnsXxlFPFGtGBCm+MNpweqyio1IWd4yXV3DMwxz5wXW6Rysfb7tn+22wx8U3kF5ydq3sYSOQOqEckb8/AGvvX5hVk8LFopkSyeZ4obafi0DNf5gqjIVRWmhj/ECTn4mqPtUDlH70BJnSr+0Ic58hNJfK6gcnyO3xs0O9rpMpKhYyKPgPC/VUtScvKTc+e9DEAF7 3SDCaBnK AN1rglc36GPbpr3nabykjVNFv8KLEEHRhOi0pS4obg9AcqbrYjHjXE4d1WuKSxa9Oe2L1ZRWmm8hUeEdRKFefqElWyt7QxhjWFhxlaQxj8w3TVlRaROSlAi1qK1oStRwicjVzWq6bBVDrxi4Qc9ieGg8S/EMySGEF+aJogq9iciGgNh6zIZh89iJVMdsnjqApttBHm6MZsL9hbuDC+h5ml4xHlI9xrbIeSoGGdnyX2CkpUmgaibyMUTBa6tgNFyk1RJQdadLVe+URd8CVDcmp87uja6xvSj1YZA9G5E/I5K8BZDG5Cv6+KcFj+MvTMocZUuDaBYuM85wYVoDdiM5vnBgMa5MbsO16RhyGS96dZI0YEOFw8zqsDULR8SknmDk30IXKVOEX7D81NoAd1CgqZTBKsCCQtItURTJW X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Use new APIs to dynamically allocate the f2fs-shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/f2fs/super.c | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c index aa1f9a3a8037..9092310582aa 100644 --- a/fs/f2fs/super.c +++ b/fs/f2fs/super.c @@ -83,11 +83,27 @@ void f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned int rate, #endif /* f2fs-wide shrinker description */ -static struct shrinker f2fs_shrinker_info = { - .scan_objects = f2fs_shrink_scan, - .count_objects = f2fs_shrink_count, - .seeks = DEFAULT_SEEKS, -}; +static struct shrinker *f2fs_shrinker_info; + +static int __init f2fs_init_shrinker(void) +{ + f2fs_shrinker_info = shrinker_alloc(0, "f2fs-shrinker"); + if (!f2fs_shrinker_info) + return -ENOMEM; + + f2fs_shrinker_info->count_objects = f2fs_shrink_count; + f2fs_shrinker_info->scan_objects = f2fs_shrink_scan; + f2fs_shrinker_info->seeks = DEFAULT_SEEKS; + + shrinker_register(f2fs_shrinker_info); + + return 0; +} + +static void f2fs_exit_shrinker(void) +{ + shrinker_free(f2fs_shrinker_info); +} enum { Opt_gc_background, @@ -4940,7 +4956,7 @@ static int __init init_f2fs_fs(void) err = f2fs_init_sysfs(); if (err) goto free_garbage_collection_cache; - err = register_shrinker(&f2fs_shrinker_info, "f2fs-shrinker"); + err = f2fs_init_shrinker(); if (err) goto free_sysfs; err = register_filesystem(&f2fs_fs_type); @@ -4985,7 +5001,7 @@ static int __init init_f2fs_fs(void) f2fs_destroy_root_stats(); unregister_filesystem(&f2fs_fs_type); free_shrinker: - unregister_shrinker(&f2fs_shrinker_info); + f2fs_exit_shrinker(); free_sysfs: f2fs_exit_sysfs(); free_garbage_collection_cache: @@ -5017,7 +5033,7 @@ static void __exit exit_f2fs_fs(void) f2fs_destroy_post_read_processing(); f2fs_destroy_root_stats(); unregister_filesystem(&f2fs_fs_type); - unregister_shrinker(&f2fs_shrinker_info); + f2fs_exit_shrinker(); f2fs_exit_sysfs(); f2fs_destroy_garbage_collection_cache(); f2fs_destroy_extent_cache(); From patchwork Mon Aug 7 11:08:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343488 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 6C263EB64DD for ; Mon, 7 Aug 2023 11:12:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0AC736B0074; Mon, 7 Aug 2023 07:12:21 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 05C386B0075; Mon, 7 Aug 2023 07:12:21 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E664B8D0002; Mon, 7 Aug 2023 07:12:20 -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 D7F526B0074 for ; Mon, 7 Aug 2023 07:12:20 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id B1561C0A07 for ; Mon, 7 Aug 2023 11:12:20 +0000 (UTC) X-FDA: 81097044840.26.5F140AA Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) by imf17.hostedemail.com (Postfix) with ESMTP id C66D640011 for ; Mon, 7 Aug 2023 11:12:18 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Owhbp+vj; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf17.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.47 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406738; 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=XAY9+N2BbVQBjCT3MmFWkPxUR/2vf6o4m+CtMBoAzag=; b=7mO4oBUMxX13vd/Khdkcrs6zR/VwhgVePYLyhFQqj8c1qF/QcVMHoLh6sJ9segKoSVQWRQ VvEkPvuoiP0lhw8i157TjSuqRlYC8icoSZw44LcGiNnEJZ4Ycg9REs3E8u7Uow0Vxy5pYB wyYjDJ8aIo2L1ldXDBUMG87OkGeysik= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Owhbp+vj; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf17.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.47 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406738; a=rsa-sha256; cv=none; b=N8jh/kQdlcOUoXB24Siz1eh0dBlsgH/g/DSmrnWxL9jdPjhh9+rdE3IcloNOLLNelWzOeC VPhAmDY4Q7E5bF/i6aIMeucsmzteEVMpyAzrEjQE57cIojt6XObEvFx3Rb1IeA3DuiQU+a 2JT8eQ/aiJyuBvZnRs9eopiH0Lyc9nY= Received: by mail-pj1-f47.google.com with SMTP id 98e67ed59e1d1-267f32e89a5so665847a91.0 for ; Mon, 07 Aug 2023 04:12:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406737; x=1692011537; 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=XAY9+N2BbVQBjCT3MmFWkPxUR/2vf6o4m+CtMBoAzag=; b=Owhbp+vjTX9LgSb8kQ7MIhVXGKwDLhR+Ce+1Ax0621Bs9MrN8XWMe5+Ejw9lnwM3Ap IYUW911/vhmnbFJp/stmhIc489u8MPAzdlnhNeoJi8rBqpYOKUrjixaEdD0XprSya4Vj PDunDNjaDu16T3tMnzjFT3t7h/oKuuaUvjmMy7sBXTr5KsxElViOqZ7/5M9dmikw8+EO wMQGbexE8DINXXSrzaCt4DliIlnjdofAsiKIz1t/gb0CaZI+4t4MLa+CBQGQ2Bhdx8d2 /xQiP0jkFYD6YIUPc+4v26SX8VshwmbMbumt9peptq8jkLOVQze1kYBLFAMAnfkePzJe dicw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406737; x=1692011537; 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=XAY9+N2BbVQBjCT3MmFWkPxUR/2vf6o4m+CtMBoAzag=; b=NFRPFZHi2akHmEvqMc7VrLT2vSEh041Qw2c/KpFe8UX+Hxu65L+VpLCcHKbihhgN2L 1mrQcbRCIf82NDKbdTnV4eqXnzEy8teECQKVqWYPdy7eX+P/40+z4YeUcvCRBeQ6lh8I aPjjo6w/EfxXU29m8GTxTF7vfosFaLgnYUE6E5FjvqqejNIrGi/n2FaGpdz55ZhdmU1Q wZqboL/v0PbtkpAtMHz9qYeWBTgh4w5qXOTVFSCLtJkVj0K6RaawJdGzE1psu+Dff3Fe A+3RrkyKlGgDgDH6WgBoS0X0/a241YnY7c/oLx0vxtUUGm+tV+af5uVt675TyCGGPpVa EASA== X-Gm-Message-State: ABy/qLak42XKSUjiWTUeIicFDrTxIhLWHNci4muuaNHFeMgnbZOGmePB yxtVc3xSNvWHzphJa4it8aua+w== X-Google-Smtp-Source: APBJJlGzkEm3Uqt9ffvJXbz1uvSm9jYeOQTwgnDKGaV/IZVLtdfAA6YtivYmWFIriEmVEE/lzsK+Ow== X-Received: by 2002:a17:90a:faf:b0:268:abc:83d5 with SMTP id 44-20020a17090a0faf00b002680abc83d5mr23476433pjz.4.1691406737630; Mon, 07 Aug 2023 04:12:17 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.12.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:12:17 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 11/48] gfs2: dynamically allocate the gfs2-glock shrinker Date: Mon, 7 Aug 2023 19:08:59 +0800 Message-Id: <20230807110936.21819-12-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: C66D640011 X-Stat-Signature: g4t6btuxo5pkeiwwou5d3somschfe5h4 X-Rspam-User: X-HE-Tag: 1691406738-955616 X-HE-Meta: U2FsdGVkX1/rVlRPGJ/0EWRlJSeQlkcJTylAnz7nJw59U2nsZN2cqnWzlwKz4iMM7Qvv9BEU/zii8H19VSjEl35DfwCUJKNleuyHtGwWQpK5Ucr0ZhOuM8CF+jEzoKZPMcxA2vwbPzTrW9TEly5ZM6w+S50DQ7kjgrixIhHX67XK/KC6EQtQW5zgePlfg5usEax47Nk21Bbb1IYe1DTVCYKTrHIndaFhQsLldtXM9+kd1o2hF3gGh17Rk7beVjCofusF4w9IKpDHLv4Pk+XrjLOGXTK1iMCQoh7wtPnn7nvrCLyzz4vknS3A0EWaprlwdt52n09Nkzt5iAYzmV2T/PBlC7FEH4Krn1rJ+VyEiBfF8WQnnpfRaJSkiKBb/Ou2BbRnvD9gF5ewUy1reZPQ0L/+GlEbLtAPcGToM0k/6y8Cq5uw83iqn7+wgn6wbdEHAywQ7oQgNgI2Je7uEmoQNEL3wt9G7vWm99FHqT49yKN83c7xZ0Qsw4CUMPikyWiftS+JiSy46NsNRZnqNGwut5ADdVI9yrR8g44d9yPr1z72k4tmVvbI1uS00x7UHBtsyNLWyQhshN4v+8AY5jlmIBXUNGkuU4K78kEiyRMzOMtzVYa5IIIvCNHvZvHnqGUQ3YEYCgB6c4xjaET/Dae0r7/PJHNq1pJy6vg8jpCUfZGjBhyOBZJ5soUDv7LS9fb2rCTEMlFW9Wa1CztctJQjgiYzgaDmTe20aNs5fQvU0K54eLDdGpi9O+4cM28i+GH33iKcOAMti3nCih6b6qdwGKJjLHMaa+FxN8XVve7KGff94tZ9/GkODM05VrrJiS79d+a6oP2a/U/FNO9aAaKSU+hswAgHCkaZ6NAeOl025fZRKC/aGB3IcE93pFTPVoKbxS4pco75MBKeuArna3Zk28HFbHJXvFByPE/SJungYlqcyDtqppaW8/UTkXDWAXCOE2JYNONrkd/6+uDYFI3 enbZqge/ 41iODcod9uNFFw3SQJAytPbZDzDyKDFktB7acnVfg/b4829ITGbtVR8pQlZj7NF8xWkB9m1q0fnWnkWvTQ9BA6qfgfhCVs0IRCXwFWta0AEBMWQLVoIuWe0S2US7TarJh9h7tFIUE40xf4r0qwN4nv+ZeJDq4lIEp91msjMbNL4+Kp2zKvAquK3OxJdxq/pcPZZdLCwrODXPcrr13l9b8sf8H64FVXrAykMs7y+9o6Tp2IBqInciU9evbG/AikmPXwDCD4+1w3/aQbJAUGE5+/S/QQ2D31AcXYu7w3UHDdGCHE6xHNKpzpcJCLljiuEjps/Y6E6PcVAdGvT5TqzprVW0/YIXFrB/GaLJlOdWAqnXKKqpdSWz+WkMuqEhgW8m2MTbj8xHm9X3DxH8ZDjj3DZsmt2I7f220JoZ1 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Use new APIs to dynamically allocate the gfs2-glock shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/gfs2/glock.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index 1438e7465e30..8d582ba7514f 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c @@ -2046,11 +2046,7 @@ static unsigned long gfs2_glock_shrink_count(struct shrinker *shrink, return vfs_pressure_ratio(atomic_read(&lru_count)); } -static struct shrinker glock_shrinker = { - .seeks = DEFAULT_SEEKS, - .count_objects = gfs2_glock_shrink_count, - .scan_objects = gfs2_glock_shrink_scan, -}; +static struct shrinker *glock_shrinker; /** * glock_hash_walk - Call a function for glock in a hash bucket @@ -2472,13 +2468,19 @@ int __init gfs2_glock_init(void) return -ENOMEM; } - ret = register_shrinker(&glock_shrinker, "gfs2-glock"); - if (ret) { + glock_shrinker = shrinker_alloc(0, "gfs2-glock"); + if (!glock_shrinker) { destroy_workqueue(glock_workqueue); rhashtable_destroy(&gl_hash_table); - return ret; + return -ENOMEM; } + glock_shrinker->count_objects = gfs2_glock_shrink_count; + glock_shrinker->scan_objects = gfs2_glock_shrink_scan; + glock_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(glock_shrinker); + for (i = 0; i < GLOCK_WAIT_TABLE_SIZE; i++) init_waitqueue_head(glock_wait_table + i); @@ -2487,7 +2489,7 @@ int __init gfs2_glock_init(void) void gfs2_glock_exit(void) { - unregister_shrinker(&glock_shrinker); + shrinker_free(glock_shrinker); rhashtable_destroy(&gl_hash_table); destroy_workqueue(glock_workqueue); } From patchwork Mon Aug 7 11:09:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343489 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 39FA0C04FE0 for ; Mon, 7 Aug 2023 11:12:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CE0EA6B0075; Mon, 7 Aug 2023 07:12:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C91FF6B0078; Mon, 7 Aug 2023 07:12:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B322B8D0002; Mon, 7 Aug 2023 07:12:34 -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 A48626B0075 for ; Mon, 7 Aug 2023 07:12:34 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 7AFC5401BE for ; Mon, 7 Aug 2023 11:12:34 +0000 (UTC) X-FDA: 81097045428.14.C920954 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) by imf06.hostedemail.com (Postfix) with ESMTP id A24E8180019 for ; Mon, 7 Aug 2023 11:12:32 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="Y3Gw/8I9"; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf06.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.52 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406752; 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=y2Zq84YPu5W9umXtWflPPzaPyFOqe/t1tbhlrQuOI+E=; b=Es6Q10U+RJwGcPOc3sdi9CXb2drRx93FTVBkVU4bHVNzKiF2RdBU6SKmJ0EMnnvY2AKxaS a4bwJMSFPa/WUhP/zS5JM6yisy3u2M4sxRT9Q91EQcsEpDrweU6pH3cX6gG9SS4Nwk0o4W IIqQtA2RhTxgSrw2swsNXfX9Phx1Xls= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="Y3Gw/8I9"; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf06.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.52 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406752; a=rsa-sha256; cv=none; b=hUiUfH8JycW5lSKUxGnoKGPQBpQfyHXKjvpcn7mZJqk0RVRapWbNDtjj8W1FvEXei/qhhf 4FHhRHkioyqQqLYtQtnDK10bU996XjdVq8BOe/Oej35AIyBkh65OJ+QRcIXOdOBliji2H0 zlIrKofis+I9ivp0zQPMhFiJnPI7vNA= Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-268f6ba57b5so624105a91.1 for ; Mon, 07 Aug 2023 04:12:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406751; x=1692011551; 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=y2Zq84YPu5W9umXtWflPPzaPyFOqe/t1tbhlrQuOI+E=; b=Y3Gw/8I9wjDIixxDLIQ9R5eAEihH4V5EOGMa/tEQP2UVJcVR6XKMsoq0kNQA9Anemf f07XdP3K3VTdRiql0M+klRK3bCLbXjjp+xplnI9SAQQIK1LQ+ZTQ4iN7KAzzTyuvBW+2 22vOneIjM2lcCre/t1Mc8DL07qt3h0LYO3V6dBXrNJ+ZsacS8/3b5gEWrOt6ylq3sp75 +tN/NsYby1EhnscHKGVaTQLZ5Bd9+GL+XZMM1MIKbWLpVeAc6COrlmvCwmGvjTVu68WR OgVgTRpqhZcRZgjQYAuUYTgXANtTE72/EYkbNkp+iXkkiBUoh7hJkggb0sVF4vx/kVZQ USbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406751; x=1692011551; 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=y2Zq84YPu5W9umXtWflPPzaPyFOqe/t1tbhlrQuOI+E=; b=Eftd39IfqsDWUnr53llzkgLCllwYZ73IjFIxLINNg1OiMEqbtBLfV4JNaWfgZjILr0 1KtqKz+iQJmM8b/33R11eNUp2zTjfq2G6bYML0ITWYLIFXiYyp9BZAP6eW1Kcs6DT5t1 tXY2S61Huo2a4nSeCKZT2aY+3Lr6vYPQRH+Bpac2dWFb93V+9AGZv18rhI7aqfLBV1PR 6iTxFiDTqrynP0iND7aXmF6E85ArYuf7taX3lD1y3IafpZ81yDL4RZeVfFqpmBrGw8GP YBWcNQMFe5tOw8pxtOyRSFc+u5R+XZSEud6+KKgx0NuCghlZtNbqko8y1WvnuDabpaP+ M8mQ== X-Gm-Message-State: ABy/qLYPTqlDcFLgS7CHa16T8lVX+Fn4dsERoNZgrGimhH4VRRJc3LbH Kj+rKV++P8Z1qxrmICoM5envZw== X-Google-Smtp-Source: APBJJlFA47zqmiKwpfw7q81pKFEqmAkA29wiqRNlMoLoIZqzioc4qMsA62pUfPaD7HBA/F0aUxQzvA== X-Received: by 2002:a17:90a:6c97:b0:263:730b:f568 with SMTP id y23-20020a17090a6c9700b00263730bf568mr23062652pjj.3.1691406750926; Mon, 07 Aug 2023 04:12:30 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.12.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:12:30 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v4 12/48] gfs2: dynamically allocate the gfs2-qd shrinker Date: Mon, 7 Aug 2023 19:09:00 +0800 Message-Id: <20230807110936.21819-13-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: A24E8180019 X-Stat-Signature: pzktcw3tau9gcwuxfn63gec66616fwxe X-Rspam-User: X-HE-Tag: 1691406752-113165 X-HE-Meta: U2FsdGVkX181hcBhQnm0BIztFy/SlO+PbBb49plLpvMjFPrzdm72Bzozh9B4Zw4yozHG+j4ZmBTSRdHcJ2zuhaGwhxRDCSXrLrGkdVA0CrTi0ENyL+JFVYtaJ/c1ppgawzUcUiwkocHx817++KWkyqdbTlD6koHwT9oLzCx1R7GqgIu9uRZRxYPLAVjzEPTImIwUlQ++yxxm/IMRJja/37nraXnPCl61lswgpxPOl8UxYYP+zJKRahz38CZYla9Dni4GzpPwY+I3XaEbuE6zQVVbgCKYnulcNRdaFLRhGRgIUK5vka7s9RoKHD6uavH6AnH9XV6zxHCRJTKRXpMF+3UuCzzximGXVKi3cLA1O7N0rYXBpjBL/fueI353gzsCd85KtSh/2TlaNWU8wm1gEDFalQUWLvPNOcaHumrQ8BNErebksDZrl8FQ//WBoYS3F3HXe1tl0fNcaZrJR/HSt3fpL3hGejtGryIhKq6g19z6Q8w4YWuDV/TY/kOc78AM49mQEeXvYOTtyoOmZMf4yP722Q5hdyBZVxF24lrmw7VWSwtW8KSyybWY0bE9qdnXhd4MQNi8LecH+2MUTXBC5GMRmZndUPdIcRHMAdboxQTgDxt+Izvv5jmrZTQcE8orN81BQ+0KMLmdIkNIsD1L6oukaXC6xAOgjAn9g0jDm/xJ9hJ5Mxw0TLjSpnnKsUtY3F4eaSNgJ7NfHkGRWKZJF3U7J2g2H1bhUL5Sz0dbMGhsz4K5ZRa/umn5mEboK3cOwVJWbPJNFJhcKWnMt9+O5z2iJf4mYceB9OgIZwYl8WMwH70jrdiu8dFNnJa8FQtn2GG3o64/4hHfsILG4u5PR4UQpxagB4fznCSP3PewKHIcSfZ3kcxYHZKonUWkoIN9ILz6yiafcV0DypSjiN3rOpe6qSEM15O9Gm6ug8l8srKiZh2FclNQjL2+zWngvhMDsuLjXdSG+DzXE3SegVJ U/1ZN2NK GEX2ts6zN/9k5jg8ZfBGbIFpGqIOR2EU+diwdnbcfj2OdRFfO8xZJFBnLkrpwF27ylOMLAgzQ3YK+C+Z47geM5ukn5OygpCJCWpc9t2TPAMS/tehsOaAHkRZf6fbU8qC7yT/AWa3M8qMm24WlMOc+nT7ZqFZVg2/a6zn4hAHmBjetTJvsnnYPEZ0t0LkFzsvy0fpevt1SPHU507IcLf7IS3393VgQxat6XzBZgUMw+wqRDKx6g8/Lq4l7jjM8CIIP3Y/w7HoOrlUXV1TPasJbGlxRMWLu++8Wwq7kmy+J1FcFFo3LAhnwajIFYH1+X7Ng8sT2MrJHfAQ7shLYqoI3oWmxpAkqbgkgw+Pg67RUYYsuBdyHyYw9OqbllwS2LVQJBA2wKn1u32TIzqz9Z2YOlw1u38GzuLqITwrmsVSAn7ittv+hJfW/anzMHgbuRVOhsMGYEMOFBzOR1J0= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Use new APIs to dynamically allocate the gfs2-qd shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/gfs2/main.c | 6 +++--- fs/gfs2/quota.c | 26 ++++++++++++++++++++------ fs/gfs2/quota.h | 3 ++- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/fs/gfs2/main.c b/fs/gfs2/main.c index afcb32854f14..e47b1cc79f59 100644 --- a/fs/gfs2/main.c +++ b/fs/gfs2/main.c @@ -147,7 +147,7 @@ static int __init init_gfs2_fs(void) if (!gfs2_trans_cachep) goto fail_cachep8; - error = register_shrinker(&gfs2_qd_shrinker, "gfs2-qd"); + error = gfs2_qd_shrinker_init(); if (error) goto fail_shrinker; @@ -196,7 +196,7 @@ static int __init init_gfs2_fs(void) fail_wq2: destroy_workqueue(gfs_recovery_wq); fail_wq1: - unregister_shrinker(&gfs2_qd_shrinker); + gfs2_qd_shrinker_exit(); fail_shrinker: kmem_cache_destroy(gfs2_trans_cachep); fail_cachep8: @@ -229,7 +229,7 @@ static int __init init_gfs2_fs(void) static void __exit exit_gfs2_fs(void) { - unregister_shrinker(&gfs2_qd_shrinker); + gfs2_qd_shrinker_exit(); gfs2_glock_exit(); gfs2_unregister_debugfs(); unregister_filesystem(&gfs2_fs_type); diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c index 632806c5ed67..d1e4d8ab8fa1 100644 --- a/fs/gfs2/quota.c +++ b/fs/gfs2/quota.c @@ -186,13 +186,27 @@ static unsigned long gfs2_qd_shrink_count(struct shrinker *shrink, return vfs_pressure_ratio(list_lru_shrink_count(&gfs2_qd_lru, sc)); } -struct shrinker gfs2_qd_shrinker = { - .count_objects = gfs2_qd_shrink_count, - .scan_objects = gfs2_qd_shrink_scan, - .seeks = DEFAULT_SEEKS, - .flags = SHRINKER_NUMA_AWARE, -}; +static struct shrinker *gfs2_qd_shrinker; + +int __init gfs2_qd_shrinker_init(void) +{ + gfs2_qd_shrinker = shrinker_alloc(SHRINKER_NUMA_AWARE, "gfs2-qd"); + if (!gfs2_qd_shrinker) + return -ENOMEM; + + gfs2_qd_shrinker->count_objects = gfs2_qd_shrink_count; + gfs2_qd_shrinker->scan_objects = gfs2_qd_shrink_scan; + gfs2_qd_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(gfs2_qd_shrinker); + return 0; +} + +void gfs2_qd_shrinker_exit(void) +{ + shrinker_free(gfs2_qd_shrinker); +} static u64 qd2index(struct gfs2_quota_data *qd) { diff --git a/fs/gfs2/quota.h b/fs/gfs2/quota.h index 21ada332d555..f0d54dcbbc75 100644 --- a/fs/gfs2/quota.h +++ b/fs/gfs2/quota.h @@ -59,7 +59,8 @@ static inline int gfs2_quota_lock_check(struct gfs2_inode *ip, } extern const struct quotactl_ops gfs2_quotactl_ops; -extern struct shrinker gfs2_qd_shrinker; +int __init gfs2_qd_shrinker_init(void); +void gfs2_qd_shrinker_exit(void); extern struct list_lru gfs2_qd_lru; extern void __init gfs2_quota_hash_init(void); From patchwork Mon Aug 7 11:09:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343490 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 6325FC04A6A for ; Mon, 7 Aug 2023 11:12:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 036676B0074; Mon, 7 Aug 2023 07:12:48 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id F29D78D0003; Mon, 7 Aug 2023 07:12:47 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DCA138D0002; Mon, 7 Aug 2023 07:12:47 -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 CA5AF6B0074 for ; Mon, 7 Aug 2023 07:12:47 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 904FB1A055D for ; Mon, 7 Aug 2023 11:12:47 +0000 (UTC) X-FDA: 81097045974.17.1F02F18 Received: from mail-pg1-f171.google.com (mail-pg1-f171.google.com [209.85.215.171]) by imf26.hostedemail.com (Postfix) with ESMTP id B630C140007 for ; Mon, 7 Aug 2023 11:12:45 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=aL2IlnUy; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf26.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.171 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406765; a=rsa-sha256; cv=none; b=ImV2Vo0okGIqItqldz3vdcnRwBOVGTw8DkMEGkeG4CZLVhSVaO3Hry00T5hqUagpJxysKg bcL+E7Q/tlFVctINs2iyxUFdFpQBk4mIc7L7PP//MD1ggQ8vG8UUV1YdTGyP63utUb5QX1 E2oLP9L9DGiBY2+u23fwdk+ai/YzZGs= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=aL2IlnUy; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf26.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.171 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406765; 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=XXAG7UeexodYStcT1Y2gz+/6q+0E2xrK+D1h2eKApUE=; b=RKKJi55LJF1aDiSGf20w6r+xIkL3tgQ9GpKh7E3CNhKCbWbYnmdVeRG/QP+i9rMbaV+skR Nyn695wSfWVY4Bnavr/esAyQObYfhhvrfMn7wcaZhWQR0zcUqO+aer+NObEclqph81Umpw MnRvwLCL6KP1y4ypy7+oZn7veEJQB64= Received: by mail-pg1-f171.google.com with SMTP id 41be03b00d2f7-56462258cdeso525772a12.1 for ; Mon, 07 Aug 2023 04:12:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406764; x=1692011564; 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=XXAG7UeexodYStcT1Y2gz+/6q+0E2xrK+D1h2eKApUE=; b=aL2IlnUybxJBSaUyx5/2hb4H2bp/OBgBmpkvxoB1jU+rSMlmYgotW9aghIyS5IGFTu jFnKPHdHImGCYC2E/ABE0MKtaUZM35JefrItnSynMzWwfh9y6Muq0ow4RXH7tUjQQfcP Mb/jNbJTqI64OH5TZAbe/9B64ipZHwjSbqJcPzS81ONTFfdvn1WQf8A1oxt4tY2+xFm3 qLJTVdHdHHLy/H07ztqOBHi1YT6PCSLEiwm3BmVRH+v8KbcNGmsDXIWIkoSvX1jpUSeE +aIaBM9zmcPun7sjvVC0D+UUovECfFdX/YnWZ3U8UI2BqXU1g5ckeiBNnyvyn5q9jj5E E1iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406764; x=1692011564; 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=XXAG7UeexodYStcT1Y2gz+/6q+0E2xrK+D1h2eKApUE=; b=bBf5KplMvyw683Dte8GBrh72XEggfXAQtMlmjGgGrYOfqDv+olYM9i8T0VWvg/RpnL zmFM4dGYfaaFQ4QDewE6MMP+e+lOARz+SUagUVOCf4jBBEYmP57OI/oIcNHfhnZJxarC BmZBGwbrhPG+6VNC5k4g5EUmxAeM1cgk8c6h7NeSmHXX6YKh+0ElThajAqm3iiEGS8aL MKgzy7bnvkq02iX54QSwqfByVkUNStD/nsPrZKYa2LcX1VqgPXVo542fa2pRMX7GMwTX 45gLu4vtLxj2OyhMNx4myFE4OYYM6jlJKzUIzvYW3zgEcOXZ62Vh50DeN9scKGbSDZ92 pGrQ== X-Gm-Message-State: AOJu0YxL6U35zvks6YgGtgMHxlKvAOagUqJUEljKLZNhExwnT1QunCvd IAtVOeOLIH3SViGiFAQ3SwaGRQ== X-Google-Smtp-Source: AGHT+IE0EldDhRUbVC2QQ5qQQy0UrFFq3L83zUgt+LShkd8AG+beTExy84fPX5FeRRz/rZ+raVP35g== X-Received: by 2002:a17:90a:9c3:b0:269:41cf:7212 with SMTP id 61-20020a17090a09c300b0026941cf7212mr4959141pjo.4.1691406764622; Mon, 07 Aug 2023 04:12:44 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.12.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:12:44 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 13/48] NFSv4.2: dynamically allocate the nfs-xattr shrinkers Date: Mon, 7 Aug 2023 19:09:01 +0800 Message-Id: <20230807110936.21819-14-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: B630C140007 X-Stat-Signature: 6wxceamztygkrgwd7z8i7yscg5d67ods X-HE-Tag: 1691406765-534287 X-HE-Meta: U2FsdGVkX19wKwJQhFPzS6/VW1Xt2nN40FnESD+iUmJkxS87RAFmdKXWfgLrYD8Udpf0l3b9Bsl6OPtbcox7G7j9IREmLX99mycaR9HtGFPLdFzAhid+uOH8ApuY8QUtn3Pbuw6hoT0lOtEvTMAEbXBxjszmGxFUf09K2Jy/0ynCQ9iXmCFQ8ODbTuo1s35ve3//GAvmAg8XxtgoteL7cuJeHDEHDuFYemUOjKjRBK+r8gq1yPj5uRaYkruIbZC1Qo+oiP/vyne4IsQjDii7RWDOtxdmZIeYjATqeaHPdhpXtYMvEUY1jJi/W6BZxUpgfW9Fz4gl1cinQQ2SHXt3pLMiAwayIOnekxdzb7BJHXEE7T+lYotVUmiX626MoxWQ4ncM/6gmKIcz+8NABtFs8LFfg8xs/W5hDmek6xb/e06pkVF57/1AZObfeE9r+z4O6K3iGFT9k6Q+fDsCeNqmCOEj5I6ZthazBHbXBgxrQSfOab0s8BnqV8gV+dG98a4zoLB1tPcewWbi1cS9dwaQ58PJnkGnqJ9u68t4dzAC06XTczYwpCttOUm+fqlDI+Ft9b5QRUO+oSN7lyBlF0i/spMB92PJUdDpI1H1P/9EHspMtMJo2sTfKyKxHA6UO8UvLZ2+cveMnWgJJZfew+5TtftuU+X7FqrALYsfvGxZOCD4TY5PlwsUZ9HBZED332qp53294g2N3mC6rdOB0QWej82BI+4MLdYlREnF1/NyCN41LzH5eqfH8eQhWw64AD3k+7rv91iM2+Hw0Hfv9c9bpfwCss8v67fGfyjPmXnnJm7zGWKf4MSiTvqiPLbL7yZMALF8KEfatawJ/SFXmGQSDGt4FR7ZVyhgeeNM4ROYF8BgXMzlvDVZWA8fIijCTH3+48JF4hfE6Wp4xkZ+53ar+ZZR6eUEuU7uAFe+OHdvKEsWGAuoWlM564x7CsvCgsrRH6ylTeWj2FfqOtgFrzy wH7Yc4nA xZV1uEAMW8Ocx5NmUBg0WY4JTOGR4pGMJz60doG6W2BtufIwFecuivKQ5//tUJSD0GoFSRxnpFKqclozNbAXjgDdvZ/SFf9H8dS5dp290CNAsozyQhcwVEO74jg1mVH79my1paAkB1WF4rAmQVENjzS2+029VnuPEHFMRhoTJnkyfrbp7vTqvpsoP7Dhh+VTA43+zOHZva1dqHpydXUj/4HlELEXUoumHlGo3Q1fFPnccPxtBgTGbJq+pB8x+0BWVXDr+3BSMQEAlyf67f/lK1P95tuvIsXx3DAYWlSX/YrZLyTF9U9XkljhlkulVkP+OoUxVllxgZn/BN5OSsHvhTlx6OTJZUkPnswCU1r7xSWPzNZGuqYeksiRl7dGYVipqp8odVMwtMTJgODxZqa/As2FiULZAQHcP1i9m X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Use new APIs to dynamically allocate the nfs-xattr shrinkers. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/nfs/nfs42xattr.c | 87 +++++++++++++++++++++++---------------------- 1 file changed, 44 insertions(+), 43 deletions(-) diff --git a/fs/nfs/nfs42xattr.c b/fs/nfs/nfs42xattr.c index 911f634ba3da..2ad66a8922f4 100644 --- a/fs/nfs/nfs42xattr.c +++ b/fs/nfs/nfs42xattr.c @@ -796,28 +796,9 @@ static unsigned long nfs4_xattr_cache_scan(struct shrinker *shrink, static unsigned long nfs4_xattr_entry_scan(struct shrinker *shrink, struct shrink_control *sc); -static struct shrinker nfs4_xattr_cache_shrinker = { - .count_objects = nfs4_xattr_cache_count, - .scan_objects = nfs4_xattr_cache_scan, - .seeks = DEFAULT_SEEKS, - .flags = SHRINKER_MEMCG_AWARE, -}; - -static struct shrinker nfs4_xattr_entry_shrinker = { - .count_objects = nfs4_xattr_entry_count, - .scan_objects = nfs4_xattr_entry_scan, - .seeks = DEFAULT_SEEKS, - .batch = 512, - .flags = SHRINKER_MEMCG_AWARE, -}; - -static struct shrinker nfs4_xattr_large_entry_shrinker = { - .count_objects = nfs4_xattr_entry_count, - .scan_objects = nfs4_xattr_entry_scan, - .seeks = 1, - .batch = 512, - .flags = SHRINKER_MEMCG_AWARE, -}; +static struct shrinker *nfs4_xattr_cache_shrinker; +static struct shrinker *nfs4_xattr_entry_shrinker; +static struct shrinker *nfs4_xattr_large_entry_shrinker; static enum lru_status cache_lru_isolate(struct list_head *item, @@ -943,7 +924,7 @@ nfs4_xattr_entry_scan(struct shrinker *shrink, struct shrink_control *sc) struct nfs4_xattr_entry *entry; struct list_lru *lru; - lru = (shrink == &nfs4_xattr_large_entry_shrinker) ? + lru = (shrink == nfs4_xattr_large_entry_shrinker) ? &nfs4_xattr_large_entry_lru : &nfs4_xattr_entry_lru; freed = list_lru_shrink_walk(lru, sc, entry_lru_isolate, &dispose); @@ -971,7 +952,7 @@ nfs4_xattr_entry_count(struct shrinker *shrink, struct shrink_control *sc) unsigned long count; struct list_lru *lru; - lru = (shrink == &nfs4_xattr_large_entry_shrinker) ? + lru = (shrink == nfs4_xattr_large_entry_shrinker) ? &nfs4_xattr_large_entry_lru : &nfs4_xattr_entry_lru; count = list_lru_shrink_count(lru, sc); @@ -991,18 +972,34 @@ static void nfs4_xattr_cache_init_once(void *p) INIT_LIST_HEAD(&cache->dispose); } -static int nfs4_xattr_shrinker_init(struct shrinker *shrinker, - struct list_lru *lru, const char *name) +typedef unsigned long (*count_objects_cb)(struct shrinker *s, + struct shrink_control *sc); +typedef unsigned long (*scan_objects_cb)(struct shrinker *s, + struct shrink_control *sc); + +static int __init nfs4_xattr_shrinker_init(struct shrinker **shrinker, + struct list_lru *lru, const char *name, + count_objects_cb count, + scan_objects_cb scan, long batch, int seeks) { - int ret = 0; + int ret; - ret = register_shrinker(shrinker, name); - if (ret) + *shrinker = shrinker_alloc(SHRINKER_MEMCG_AWARE, name); + if (!*shrinker) + return -ENOMEM; + + ret = list_lru_init_memcg(lru, *shrinker); + if (ret) { + shrinker_free(*shrinker); return ret; + } - ret = list_lru_init_memcg(lru, shrinker); - if (ret) - unregister_shrinker(shrinker); + (*shrinker)->count_objects = count; + (*shrinker)->scan_objects = scan; + (*shrinker)->batch = batch; + (*shrinker)->seeks = seeks; + + shrinker_register(*shrinker); return ret; } @@ -1010,7 +1007,7 @@ static int nfs4_xattr_shrinker_init(struct shrinker *shrinker, static void nfs4_xattr_shrinker_destroy(struct shrinker *shrinker, struct list_lru *lru) { - unregister_shrinker(shrinker); + shrinker_free(shrinker); list_lru_destroy(lru); } @@ -1026,27 +1023,31 @@ int __init nfs4_xattr_cache_init(void) return -ENOMEM; ret = nfs4_xattr_shrinker_init(&nfs4_xattr_cache_shrinker, - &nfs4_xattr_cache_lru, - "nfs-xattr_cache"); + &nfs4_xattr_cache_lru, "nfs-xattr_cache", + nfs4_xattr_cache_count, + nfs4_xattr_cache_scan, 0, DEFAULT_SEEKS); if (ret) goto out1; ret = nfs4_xattr_shrinker_init(&nfs4_xattr_entry_shrinker, - &nfs4_xattr_entry_lru, - "nfs-xattr_entry"); + &nfs4_xattr_entry_lru, "nfs-xattr_entry", + nfs4_xattr_entry_count, + nfs4_xattr_entry_scan, 512, DEFAULT_SEEKS); if (ret) goto out2; ret = nfs4_xattr_shrinker_init(&nfs4_xattr_large_entry_shrinker, &nfs4_xattr_large_entry_lru, - "nfs-xattr_large_entry"); + "nfs-xattr_large_entry", + nfs4_xattr_entry_count, + nfs4_xattr_entry_scan, 512, 1); if (!ret) return 0; - nfs4_xattr_shrinker_destroy(&nfs4_xattr_entry_shrinker, + nfs4_xattr_shrinker_destroy(nfs4_xattr_entry_shrinker, &nfs4_xattr_entry_lru); out2: - nfs4_xattr_shrinker_destroy(&nfs4_xattr_cache_shrinker, + nfs4_xattr_shrinker_destroy(nfs4_xattr_cache_shrinker, &nfs4_xattr_cache_lru); out1: kmem_cache_destroy(nfs4_xattr_cache_cachep); @@ -1056,11 +1057,11 @@ int __init nfs4_xattr_cache_init(void) void nfs4_xattr_cache_exit(void) { - nfs4_xattr_shrinker_destroy(&nfs4_xattr_large_entry_shrinker, + nfs4_xattr_shrinker_destroy(nfs4_xattr_large_entry_shrinker, &nfs4_xattr_large_entry_lru); - nfs4_xattr_shrinker_destroy(&nfs4_xattr_entry_shrinker, + nfs4_xattr_shrinker_destroy(nfs4_xattr_entry_shrinker, &nfs4_xattr_entry_lru); - nfs4_xattr_shrinker_destroy(&nfs4_xattr_cache_shrinker, + nfs4_xattr_shrinker_destroy(nfs4_xattr_cache_shrinker, &nfs4_xattr_cache_lru); kmem_cache_destroy(nfs4_xattr_cache_cachep); } From patchwork Mon Aug 7 11:09:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343491 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 6A9EDEB64DD for ; Mon, 7 Aug 2023 11:13:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0AD5E6B0075; Mon, 7 Aug 2023 07:13:02 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 083BD6B0078; Mon, 7 Aug 2023 07:13:02 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E8DA88D0002; Mon, 7 Aug 2023 07:13:01 -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 D75946B0075 for ; Mon, 7 Aug 2023 07:13:01 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id AB9BFA05BC for ; Mon, 7 Aug 2023 11:13:01 +0000 (UTC) X-FDA: 81097046562.15.05C8B0A Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) by imf12.hostedemail.com (Postfix) with ESMTP id B59FE40005 for ; Mon, 7 Aug 2023 11:12:59 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=g3KOL41m; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf12.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.178 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406779; 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=iXZOOFmuwv6/pQ9jzhgVENlSQpZ5agnqrhquB4Bsoao=; b=OKW5MyqGc3aeAhmJO6XfCgN+2CeWptm2DXzJooNIxlbFrNLX8de8Jdil7I86dNLBaVB15x +MzHnPFFd05ESrg9DNV5dZuasEKp9GHZD7jNcUSwtJnOYIQJFqVEdwu6wlZu0vPwrgRze3 PkxqZO1f4XbNra/494S8ya6imllGUOg= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=g3KOL41m; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf12.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.178 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406779; a=rsa-sha256; cv=none; b=QqYlE5WAeJ/0kDqxeY7Zwp1TVZA6maK/oxGh2YzBuAk/UixUWMErcdn/tB3ncWY72A5Dmq N3e7lWMioIWs/GTRi9enMBhk8laldyZLLwLuVnVvpfRgDXtycdUOhcDE+W0+AsEf3hUIjm kIgNK/Lib9JmS0HK4Q7rQHsFIK8dMB4= Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-1bc76cdf0cbso594075ad.1 for ; Mon, 07 Aug 2023 04:12:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406778; x=1692011578; 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=iXZOOFmuwv6/pQ9jzhgVENlSQpZ5agnqrhquB4Bsoao=; b=g3KOL41mxVnCoIlh87RyEsDJeaXpKCIwoVRjVxhTYPV9ovyT4HRH6y73TA0C1Q2AYh C+3L3G8pIHBsXVWnvOx0AYLweEtefCIlRKKK8q0sPYgt+7jxn0bL+VsW/sqLMELcQU4/ RSW5M4MR9/5lWavNFyTrMZwhNOCIGcyf5LN7etoWY5j2p6K+9KrJUCEBYyshFVPRQ9qE 9NhNeOSkMhfop8u2oBI3A6CKgZEogh2PPWGLFqTsvR6J0EWD/e9GH+/ajfKoDwPmRCfa I4bJZTgzaT9SOC+CveLtEvd/OempVrgFf6BTSlV6Y7dsnz5tzmtW7m2tX5rTM+xAbpCn YMzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406778; x=1692011578; 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=iXZOOFmuwv6/pQ9jzhgVENlSQpZ5agnqrhquB4Bsoao=; b=OZPgAPgHvb0tM5R5CqDHLMy4ugttE2y1V5msHGGR9rzgAsV8SNAsuZGiKDESfCcKgd poMxFP85XLI1xizdllarQbSv7K5P4z+lPNHnilaDbiVXZi3ewaLfk+mOCcLtV3597Rky YyqEn7kMKcqjScUv04J33jdUUeZkxnZry+KUZffwIXrFqcPC7rXM6ZPVoWG2pF7MNNeq fHlfVZ3StUfASbuEOswuD+PDmWWMKVkYHpzetMc/Zw/P4T4qSssQzaqwp7kkKy+9ZTOT HKCdLTzN2AcJT95aE1xEP64dpvCKWXzNyu0bkzSBBS9w9Rp57RDMI9GQ6xdYJGEUlV9D dXpw== X-Gm-Message-State: ABy/qLagKiJZ/gs4R9egg0jpjuKJgfr4OyAdXkArkL0aLY03ENIzYENQ JMELxRGbR4iwZQth0LmhPzaqQg== X-Google-Smtp-Source: APBJJlFDSvCAq9gTdHkFF7Bzn2YL0W/qaEPzJ7AdGJ/zjCXgG1JFMDLiaFr2l43qqes0mOglkhZu9g== X-Received: by 2002:a17:902:f688:b0:1bb:d7d4:e2b with SMTP id l8-20020a170902f68800b001bbd7d40e2bmr33138766plg.0.1691406778592; Mon, 07 Aug 2023 04:12:58 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.12.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:12:58 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 14/48] nfs: dynamically allocate the nfs-acl shrinker Date: Mon, 7 Aug 2023 19:09:02 +0800 Message-Id: <20230807110936.21819-15-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: B59FE40005 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: pu5obong9yxychc9yhgmgiwt3dpf3u7z X-HE-Tag: 1691406779-869170 X-HE-Meta: U2FsdGVkX19mx9OTReCAJSm8OPj1m54IilkMu3xZO2aj1Wh7l7ns+lRmWnNh/8hOuuWD7EIjoRn38bKaZxL4cMrlN9i09o/vW+I+sDf++ANnQgDtOneEJ/V8/btVeE/igtDxTRGuVluU1VPFLM72y88dOWdV1Xnc5an2GlFRLq5jai3bu/ZdoRB+crhHW/3TP5Be5x/8rygfqXlnBDMciMI1iLIsJQo02VV3AYNVCZKsxUdzIfnbLpBQH316MOuePJpr5+Cc0x978fntwLe6xHXE+F9ZR4BJDptJwK/BKziGEb5YZA7Xas8ny2WuCzmoqjGf0bIEHeJO/+wg+ZIL/lP3ldXS5WYaevrqUMnBb2kn7lOIbxWlY5bDF/2S1zlMoIdRYirI2hTgchj++CaDp85xcbrDkI3gXDnB9T4e8oIELwkZ7LZCbEMgM89Qfny149lAdg7Gt39krtlrG0jKgmpvWDuAIb2cvtIOc/+/syEKhyZLemMWYWQYH9fCuGsQ/zoKk3H5EgKc9TwLaT7x3qUY71v6WPgGwOK3bbHU/sRCu4vtR4f+OvwawjzbnBVaEncknGULc16WTbcF/6sLZ3D3bAoiDrmb9wMODwHTPNOspvQ4aZm10GTq5Mywiu/6XE+0rX6Pj5fOrJehucsTmaeIfYV/HsxYNEKLRMZGf3w6B87E4ghij58DjEX+BcaiRm99+tAfZUGLA6v9BC96Ur+XX0Ul+ga0ulhn+/JCA+dBejwPqPKfCT7ZebsE/WoSzFKMB9q0MbZ1nl51AlOfr+wgA4TE5keFq1Dv1itX1w+r9JOulWKJmAX3pZTAxN1Z6eTqR13vGZpAp4Q0MaYLHTdFs4ygBmKm/hVqBlju1ZDJrdnQ3yf8udqkfbro0vRofhKrPnhKsohxEJ7S/y4BPLCv/Axf6sj8EL7OsQ721GfZIm9hxMKKDC+4bxUSp7ZHp2ZWn8s8YUjVfM56zEq ki3L2KYX UuWfD41OqRxSEWaXwwYplBYw+8EVXZti+pWxTpLhC/TYaCT+CmlsqFLeBh0ALD3tAybXgaG3w30kJGkijqxIt5bfBtVti09DU9erEkbuuOXX5xjVrQGPPxStuzGMXvqtyfJBUTRCWDH/uLciruX5k0DcdvKCx7JcPrC1cH0eCECyTYDHwIseLzdi38dliv1nGXQyAW94f6vL7mCNqzIick6jlOdXbAJnmzAmy0aj4eUtA/3BBvQBD2sMvolUOZtH+e3nmyPldEM+Om6/0dXYMkf1tnoh60Hx53cgeFubBUpTUSLc7avlYhKBKDnPUwOstahjupqdGyM1ZFhHffF960g67ZrTRUZFYMgWl/H+xgDwio3fqkyIEG0ABHO0Hdh6GsNiLs1YOrFP1nM55dMWAAFSo0N9avFBBt/HP X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Use new APIs to dynamically allocate the nfs-acl shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/nfs/super.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/fs/nfs/super.c b/fs/nfs/super.c index 2284f749d892..1b5cd0444dda 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c @@ -129,11 +129,7 @@ static void nfs_ssc_unregister_ops(void) } #endif /* CONFIG_NFS_V4_2 */ -static struct shrinker acl_shrinker = { - .count_objects = nfs_access_cache_count, - .scan_objects = nfs_access_cache_scan, - .seeks = DEFAULT_SEEKS, -}; +static struct shrinker *acl_shrinker; /* * Register the NFS filesystems @@ -153,9 +149,19 @@ int __init register_nfs_fs(void) ret = nfs_register_sysctl(); if (ret < 0) goto error_2; - ret = register_shrinker(&acl_shrinker, "nfs-acl"); - if (ret < 0) + + acl_shrinker = shrinker_alloc(0, "nfs-acl"); + if (!acl_shrinker) { + ret = -ENOMEM; goto error_3; + } + + acl_shrinker->count_objects = nfs_access_cache_count; + acl_shrinker->scan_objects = nfs_access_cache_scan; + acl_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(acl_shrinker); + #ifdef CONFIG_NFS_V4_2 nfs_ssc_register_ops(); #endif @@ -175,7 +181,7 @@ int __init register_nfs_fs(void) */ void __exit unregister_nfs_fs(void) { - unregister_shrinker(&acl_shrinker); + shrinker_free(acl_shrinker); nfs_unregister_sysctl(); unregister_nfs4_fs(); #ifdef CONFIG_NFS_V4_2 From patchwork Mon Aug 7 11:09:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343492 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 EDF8DC04A6A for ; Mon, 7 Aug 2023 11:13:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 800156B0078; Mon, 7 Aug 2023 07:13:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7B06C6B007B; Mon, 7 Aug 2023 07:13:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6509C8D0002; Mon, 7 Aug 2023 07:13:14 -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 5862D6B0078 for ; Mon, 7 Aug 2023 07:13:14 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 2B0851A0413 for ; Mon, 7 Aug 2023 11:13:14 +0000 (UTC) X-FDA: 81097047108.19.05081E8 Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) by imf05.hostedemail.com (Postfix) with ESMTP id 3DCCE10000C for ; Mon, 7 Aug 2023 11:13:12 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=gvEcin7S; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf05.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406792; 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=urGrhHBCGKwKuhIkQmOHRuysXuy1mToQA+AaHWoY6PY=; b=a7gJ3l2ZuYJrmRR92Zf2jUPMlKtnuNRYqBC4oKRkeGAo2N6sMaQ6POSzKD1LJexb2jp/0w /XTXtXJY5zl3lNXEatMNy6zikc1a5znF5CikHdM4F069MMYENCr4lKpco9TS0MA3ehITTu exaK33tnc9k4FDUn9MeZzAXjLG8KB/8= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=gvEcin7S; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf05.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406792; a=rsa-sha256; cv=none; b=BV9racnRYeS+H3LFl5Qt/s85bkgLP7H81mCBlrc/9cfvzTjVjcGL2FLRfwpbz63Cht1Qzm jqi2jIlO/HWH2L/eE5UsGRuIZ8TbV8J8n9BCYSrj4NA7eaCpips+VHvrn6weRqu7NRX2I+ lgLKo/VUL7xfbu9PJgoHni+l4HmSfWc= Received: by mail-pg1-f169.google.com with SMTP id 41be03b00d2f7-55b5a37acb6so362093a12.0 for ; Mon, 07 Aug 2023 04:13:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406791; x=1692011591; 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=urGrhHBCGKwKuhIkQmOHRuysXuy1mToQA+AaHWoY6PY=; b=gvEcin7S0wJ5rW0wtj9WnWp/4gO3FOqyEc5Qy3KVjjCOMIdl063r7goatTKMU5K63u IABDDkTZbyMiPq/rwoG72XrgfLWlV6/YJwymkZtRfBVcrDOzJOk+V88T6EEEXGW6nfh0 le0xVwnZY7As0nXjZy+hSjIWRCXvYGRHiEKZrDZnQb7QflVpjM7uq/81aSxj3traKDGt VXa/baYLLxxBhWBawSSBHT4dMsZ/NRoyUnn0XTD8JWz4/O0ULe9Suh4wohOUxiotc5cA +kJEwQbIJfS1Vrk1T3/Loi8TKjO+pow/TrGBcBE2xp4OSLxBFU0bCUPycoGAdA8SsoOk yeOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406791; x=1692011591; 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=urGrhHBCGKwKuhIkQmOHRuysXuy1mToQA+AaHWoY6PY=; b=KFhz0xp/0s2zr70+3Xxs82aJoqJfWo5uSo8YWy5E1BHYoDce+o/N1n58Y4HcLD104J Tv8R2zl8D3WXD7BNAybhDkw063y723BQs5UisDXG45U4wTslbwmvI82OmyeQ7YrFDO+J Ym8XRGOJvoUZlPAkeHUQQpu7bLJ8UOzcXIfYJsyBR4qy6F6/iV0tDMirW+BgTj9rTzND JnMLIPk4OfwYUYEhu8+RzabJpUgNL+SxMlpSxo3S0K6imzlmT6HTBTKTZ5lpgPUwE5zs 0gh0SV8vvassqJPJyYa4tHDZFM+nbX3DlpNM0xEH+t/wrkdnL5E6ZwyKysLGviDvU6yy Qsxw== X-Gm-Message-State: ABy/qLahF2ISOFbLv0fZHFyMEvQKukX5YMlueY8F68pQnSkhSDXRz3Iu Ovz5eRm4WJo4KoYI5YoBEZSNoQ== X-Google-Smtp-Source: APBJJlGG9fl/KZM7Wu/aB3nA3qPBXzAgCls0ii/X4UboFM2rQSd7zbDq190u8vBbdPOZ8QFUsdy1lw== X-Received: by 2002:a17:90a:faf:b0:268:abc:83d5 with SMTP id 44-20020a17090a0faf00b002680abc83d5mr23478200pjz.4.1691406791204; Mon, 07 Aug 2023 04:13:11 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.12.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:13:10 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 15/48] nfsd: dynamically allocate the nfsd-filecache shrinker Date: Mon, 7 Aug 2023 19:09:03 +0800 Message-Id: <20230807110936.21819-16-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 3DCCE10000C X-Stat-Signature: 54kxj69d7w9xcq7wmm1mqxnnao5ufsma X-Rspam-User: X-HE-Tag: 1691406792-997951 X-HE-Meta: U2FsdGVkX1+JSSheyg83TssjFMtiH/snGjpinj1uR40Sho9Dv/HL9WX1v2VuIOnMX0uLIOYuOMy20CkWS2G5KD7fiI/7kFw5UugFzM3tZaBvPGTkSif7o00Ps2t0KYdvrd0N+nBaTcLFAbljsW6RTDjKu8fwgENbvt8KznIR58oN4HeUKRoy2EkgbdseA4X3Rk6hDsoK3pN3qc9XFQAOVgagZrPlErco7SncvQNYtFNzc46KruujuUbwIDzxsFjVa1qOm1LHhhb8qQEWzHFbZ9S9ro2RCOglAYzbdayY7XDBk7Tz2pjmSufh9auVd/C9X8UkzcvnOEaZI8Z2qh5lLH7ePP41R7Lu+LUppKMkBwcpy28lBWVJLbpSSEF0ab/oI7SJM8xTDvSAU3r3thKT6a6wC4iuIQdRqEBvKQz2xH7DGuSH38kQBVmJ/8FYY7JjbDpuR0a2c8FL9pmmkHRYv0uoX+dFcJ7ddqdOrTaw2h09Xbuncox7Ke1dWgVzQtO/5yxNwd22dFgKXXYOtYGVMeSxtRuZZiexI6AmDbB5nOu7DNnl/jA+B8n47VWKJiFx9UBEsBNGW28YQpIQUgMt9bgg/rf/xQRRTrvjlbxmusa36boN4rmtXDEfidI4zdASvzOtqNoSyj4iS1ZT6B5W8x/QQ0Zud62qGEGYLqI1V3vkELWVITChbtu20ZFCwBQqhtYHAobsUAafnxCJ1ZjnNpozJX3de+fV5MZw/xQLw2TzYsdYss7NpPoDpJM1Oy234NHM2oRm9RF+YnM7CCR4FuEey1JebLrZpxiKTlwJXb+LxgztNyyKBc9rZV3CjxEmbvA2rCdLflbNZAMXOaadOqrX1cK1BYhS/TQpYZcSW4Fa1yQ3afnn9GOMyW5hfwTS//ODT+Va74Lcu7X0FcuLb9RVndCXG9xAozmhj7b8iIwcmKPCa9myQDC9lqKsemehyuKOkmEPR3iz6eaLGXx 8RKkAHrN Y9xEaKYWj20BqYg9WWQfO9DldAuiwdxN1+IhKwquMWq97+WdKKpBaW2FZVH83P8ILTV/MWzFKbVYlzKMFMZ5XxEs0Tp+od6O5GUhsRpN0DSYved4LWI95G5TEDJPvoBd2TAMhrXtkzEexjvIyUWbrglgx1o0WEjyhzT9f/g/TlT8PHBRy3QDXv2xVTF3o+bvPKCPeI7AtTjTSWqoWeCRjEKXMamnqmUnFUkvcBtM9im9/G0M+9GonYQUmOJvHI4V9UiD0W6m4ox1C1h/98DDYqNxsI9V5esk6dYdKpI8v/js82AdrezlkKRurJRjf5JJ9W6GRyjYV0u+xn2yKMtkIVnky/r/IZE2VUMWkMVVJvzveFZc17sGhSyTIxkNesyrJrcJhxy9figHmBcNbZPEPdzg1x+4lYLnB7KXU X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Use new APIs to dynamically allocate the nfsd-filecache shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/nfsd/filecache.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/fs/nfsd/filecache.c b/fs/nfsd/filecache.c index ee9c923192e0..9c62b4502539 100644 --- a/fs/nfsd/filecache.c +++ b/fs/nfsd/filecache.c @@ -521,11 +521,7 @@ nfsd_file_lru_scan(struct shrinker *s, struct shrink_control *sc) return ret; } -static struct shrinker nfsd_file_shrinker = { - .scan_objects = nfsd_file_lru_scan, - .count_objects = nfsd_file_lru_count, - .seeks = 1, -}; +static struct shrinker *nfsd_file_shrinker; /** * nfsd_file_cond_queue - conditionally unhash and queue a nfsd_file @@ -746,12 +742,19 @@ nfsd_file_cache_init(void) goto out_err; } - ret = register_shrinker(&nfsd_file_shrinker, "nfsd-filecache"); - if (ret) { - pr_err("nfsd: failed to register nfsd_file_shrinker: %d\n", ret); + nfsd_file_shrinker = shrinker_alloc(0, "nfsd-filecache"); + if (!nfsd_file_shrinker) { + ret = -ENOMEM; + pr_err("nfsd: failed to allocate nfsd_file_shrinker\n"); goto out_lru; } + nfsd_file_shrinker->count_objects = nfsd_file_lru_count; + nfsd_file_shrinker->scan_objects = nfsd_file_lru_scan; + nfsd_file_shrinker->seeks = 1; + + shrinker_register(nfsd_file_shrinker); + ret = lease_register_notifier(&nfsd_file_lease_notifier); if (ret) { pr_err("nfsd: unable to register lease notifier: %d\n", ret); @@ -774,7 +777,7 @@ nfsd_file_cache_init(void) out_notifier: lease_unregister_notifier(&nfsd_file_lease_notifier); out_shrinker: - unregister_shrinker(&nfsd_file_shrinker); + shrinker_free(nfsd_file_shrinker); out_lru: list_lru_destroy(&nfsd_file_lru); out_err: @@ -891,7 +894,7 @@ nfsd_file_cache_shutdown(void) return; lease_unregister_notifier(&nfsd_file_lease_notifier); - unregister_shrinker(&nfsd_file_shrinker); + shrinker_free(nfsd_file_shrinker); /* * make sure all callers of nfsd_file_lru_cb are done before * calling nfsd_file_cache_purge From patchwork Mon Aug 7 11:09: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: 13343493 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 8708AC001DB for ; Mon, 7 Aug 2023 11:13:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0D5546B007B; Mon, 7 Aug 2023 07:13:27 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 084216B007D; Mon, 7 Aug 2023 07:13:27 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E8E4D8D0002; Mon, 7 Aug 2023 07:13:26 -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 D9F916B007B for ; Mon, 7 Aug 2023 07:13:26 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id B2E1DB213F for ; Mon, 7 Aug 2023 11:13:26 +0000 (UTC) X-FDA: 81097047612.04.DD6CFD6 Received: from mail-io1-f46.google.com (mail-io1-f46.google.com [209.85.166.46]) by imf02.hostedemail.com (Postfix) with ESMTP id C6C858001D for ; Mon, 7 Aug 2023 11:13:24 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=i2oZ2Se5; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf02.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.166.46 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406804; 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=4VJlLpDqVGiuvI83ez+3bl7yR5bVuWalBgtTU2vfBLE=; b=BjvUye5NcH7HHBZHAZU9nL88v4kYI0yc9yGAm9njdurGB3AlDeZvxgA7WmbMW0b9n3yEij 80KONYFWKDIpDt7XvgxHq1GQezv6yM8bfyB2IqpbgjOnLGdkYVjCagOIuWhwMoxDxMaYhh /SwqGbxeQD6zU8OQmx+1W1EsKIT37Ds= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=i2oZ2Se5; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf02.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.166.46 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406804; a=rsa-sha256; cv=none; b=dZNSRKBA0LLhZDaAjY27stixsi1WEDkKYJgc0R9y8E71esJtjNqeb3PHIRfxedHoy58Nfz 2oyiB1CTxfCOPxq2MBY4p4aF4BiK4WPu+3UzWZbAB0cwg6nohiMJ1mJqpOrlW5ZhhSNgBj uXFbPDjCxSwHMpWZnFjTY3WOhbrCIQQ= Received: by mail-io1-f46.google.com with SMTP id ca18e2360f4ac-790b9d7d643so44487839f.1 for ; Mon, 07 Aug 2023 04:13:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406804; x=1692011604; 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=4VJlLpDqVGiuvI83ez+3bl7yR5bVuWalBgtTU2vfBLE=; b=i2oZ2Se5RaRdFd0q9t3NqBTv/dUkxD/p2SyHpAjMjg/XHGqyx1ejwAfepurqt3olXd 4JrDoh1Y9dLDoFntnleeQjfq8XZjg4nTjOSD4Duga+gvfwhzkhg3QVfdrOJlicPQaYUD v5DwTanMH6RhkvK4rWOetuDFETnSCGxcV41PCfrrWGGU2b+vPg8IYLTIauqtUI6qQnyf JDKJFxqA5C/eh/Oo8gwkHqwPIIO1pJg4e68ItW2uJIdbbavFER6b/PwVILGTxzeWrF6b lEtQmpfrwSnO090W7cEUPihusqog8pTCjc32QMYuqZWzqkk8YiBOx308Pfsd+2Yt04OK T2NQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406804; x=1692011604; 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=4VJlLpDqVGiuvI83ez+3bl7yR5bVuWalBgtTU2vfBLE=; b=c89cX5vEcsR3ubJZRfJHoW1r2tu6dePuUydqIiDqTC7AwrXwesti8SCgbPbLO/hiJe uORf4KORDXltOXA9o61WEzPihiVbgbP/gVB2jdiF8mIVQCVj8CVv4Oap3dURInqkDe39 ejkxXJYtSEQ8sqkT43iH4JKRQbhHYyzOqpDeHvag7EUXztZm1EG8OvpwHg3nIWW+jDt0 D8lMb92/b6wU8sXQjsfacj8xk+Stu/ggnkVKFtAVVHnRWMJ1YAq3KfdtVewud2CPGA4f oKFK3/b8DK3kOvZOBezMCDGr/z117Ecuo4w27rycpTp1s7SijBaROW3L288+SyWnPBbZ 4/4g== X-Gm-Message-State: ABy/qLZnp6PNgreq8lcrAPJi+WPnPul5qOOEWwf67uJM6pS/GLON/9MK acxWpSIzG9JO4RckE3+ryUs+rw== X-Google-Smtp-Source: APBJJlG6KxjpSP18cuDMGPLwCal+2Q6XOYkRmOlR+93TSEU+QOz0TNU1VRvfHZPrdEq648UTFq+gsw== X-Received: by 2002:a92:d944:0:b0:349:3c78:fd14 with SMTP id l4-20020a92d944000000b003493c78fd14mr13499018ilq.1.1691406803912; Mon, 07 Aug 2023 04:13:23 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.13.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:13:23 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 16/48] quota: dynamically allocate the dquota-cache shrinker Date: Mon, 7 Aug 2023 19:09:04 +0800 Message-Id: <20230807110936.21819-17-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: C6C858001D X-Stat-Signature: 83rcqqh8xm9mcqckcskxoj7rcc1bnyyr X-Rspam-User: X-HE-Tag: 1691406804-6537 X-HE-Meta: U2FsdGVkX1/CjtcuQGY6DnFfrlG1ZFcunRMcIuUXKj20TtB1JVbPpv6N+6Myvli4G8ZyzpsSB8uBiG9HxPGvVnM/l1NX7oNWU3cd9qO70QL5Nc9VE4Z3AN0jG3bJoblKlbSbD3+jpMoPTgcxUlSlOphdx1nZbucC2uYEpJG8sMn5l550zcILxHEfYfoLwcqgS6rFkNg+yqL0piGcs78ijhxslbGUrafyQVrAhVede44wffpFZdhRYxn49D0bAXC2Wt6l2mWw47pZi/LDyVncZ6HtjjIdWP7vcNBFXO0zrJhmzzko2k8ayeEDPX5JcT4uuDu4jpYwbv6C60DOS4M99LRYzWZXre+8ZAk3G8mcd1D0x9Q7PEbRQTztVz4DhRjKhYiJdC8sgp2fzuhsnteFhuJ/Am22xFr+aMmOnPKWN2BbaRmMBtodlruwMLKblGPnrKBpJnb22Mug5crTuyBFu3hDkuZ/MupnE3bg6Yfj1XiWuPWrUlZ0m0UGReVgLxk6y3qt9eaCvaoxDvqOFrM8Qdnv+XeqVVmWdm2y/ttO3gg5hsErrQzSck2hcHWL+FqDYuMLLkoGA73+yZ0Q81+dPNDpYNosAKNNGUj79Bhy+Hfd/ZiExeXl14A+dnP9lhTUGZd6LP/8243TpDlcCVW4E8eBZ9+VvAq5TAQQrsDWYu5Ntv0PjI6/4AIC/15eW38z6bwW8gKD/IkyxUEJpnU3QJLoadr23mPTbtae+w0wM9A18Pm/hJFYEFsLCSVgvGoL2Y8rjRbTg1NUkI1hZDE+0tOn1/LWnUAnzRTx0buHnwTvO8BbwaDVfcVhYxer7ZyXyPfKjIGxmtBzpD32jYrXx+bNJ2QaDXr6sHiIhUsXWRfXwff4ypRjWTlhRjnwz9vKCk9YX6wIV48R8BS8XVEjztu2ydZdT/mYstmrW1tVyWN2dZsjJm2IXJ5vI5vTcPM6IDZPoieEC8ewdFucl1b 6jhmr29Z dM6eM/d6scM3tybnDUXst25zm7Sb+iOgISGGgcJ3cAOSYBZHonmiPuHb/FsLaOtWL6iip8VgfBxZBk+26rjVRZLB8FUB2dhk7lbrSiwb/e4Ih5EGCmdP909+jI3QefZ6Vog2lPSI//RfqHRj6t1hiopWYqgYi7WWVxenearRW/fxRu9VeA0fHyBXojY/nBsJIWGlJkr3M4k/ZUpP30YlawAHm1JyWownuQ/NFnwo/jJEb1GJOmJj1/33RpJW/YM4aebC2eHaNfaKogguSutWEPmnFJBlHkrKGns6x1EFVgaCTBtcvOOaSXTCu1jzEUL2vUwY/GMvK86tYAUmKp1DPUiIWny3vBYolr/R6gnAMoeBVwZgXGO0MuW2HO2x4a5hCH6oombeubtJY9wZjwOXZ6i+Jly4AIFXyfHpS X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Use new APIs to dynamically allocate the dquota-cache shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/quota/dquot.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index 9e72bfe8bbad..c303cffdf433 100644 --- a/fs/quota/dquot.c +++ b/fs/quota/dquot.c @@ -791,12 +791,6 @@ dqcache_shrink_count(struct shrinker *shrink, struct shrink_control *sc) percpu_counter_read_positive(&dqstats.counter[DQST_FREE_DQUOTS])); } -static struct shrinker dqcache_shrinker = { - .count_objects = dqcache_shrink_count, - .scan_objects = dqcache_shrink_scan, - .seeks = DEFAULT_SEEKS, -}; - /* * Safely release dquot and put reference to dquot. */ @@ -2956,6 +2950,7 @@ static int __init dquot_init(void) { int i, ret; unsigned long nr_hash, order; + struct shrinker *dqcache_shrinker; printk(KERN_NOTICE "VFS: Disk quotas %s\n", __DQUOT_VERSION__); @@ -2990,8 +2985,15 @@ static int __init dquot_init(void) pr_info("VFS: Dquot-cache hash table entries: %ld (order %ld," " %ld bytes)\n", nr_hash, order, (PAGE_SIZE << order)); - if (register_shrinker(&dqcache_shrinker, "dquota-cache")) - panic("Cannot register dquot shrinker"); + dqcache_shrinker = shrinker_alloc(0, "dquota-cache"); + if (!dqcache_shrinker) + panic("Cannot allocate dquot shrinker"); + + dqcache_shrinker->count_objects = dqcache_shrink_count; + dqcache_shrinker->scan_objects = dqcache_shrink_scan; + dqcache_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(dqcache_shrinker); return 0; } From patchwork Mon Aug 7 11:09: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: 13343494 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 495DEEB64DD for ; Mon, 7 Aug 2023 11:13:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DF2FD6B0074; Mon, 7 Aug 2023 07:13:39 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DA37C6B007D; Mon, 7 Aug 2023 07:13:39 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C92608D0002; Mon, 7 Aug 2023 07:13:39 -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 BB3456B0074 for ; Mon, 7 Aug 2023 07:13:39 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 8DE82B148D for ; Mon, 7 Aug 2023 11:13:39 +0000 (UTC) X-FDA: 81097048158.24.A0BF1D7 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) by imf04.hostedemail.com (Postfix) with ESMTP id C2B9440013 for ; Mon, 7 Aug 2023 11:13:37 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=LikGQLIJ; spf=pass (imf04.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.179 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406817; 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=et7oKjMo2RpAm9eGe6PO8KzXkO6yMET8jj6KuxhxE1o=; b=bNcTL6yB0KcLlnRw6RFohlgkrTDebiwe/2p8mAetAn0T3YtoX5BqTb/DNKsjpOft70fcs/ aYYF0fV3MqcQqsCpEMjT8UVYqNfOajNvci9HQ7Ep/j8iIIiMLAOexrcYzSLDz6lvtvrBMO kHGUqe80yfeQvUYwYwecdhxGAzm1fiE= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406817; a=rsa-sha256; cv=none; b=rT4kZOwKSBAFoSNRqJHBCP4dA2HgfZFb039g0cv9RYMoBMD0/uQc6XekD453JV2c4cWJjA at9by44FP+ysP2lx+F0ew6A3tNt7lVHBrgMxF008mGLvpswraZiqPyrWUtVK9Ak5TjN6WQ dDw+2FfPB7RLJx2GXtuZ3A/+fJCzpt4= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=LikGQLIJ; spf=pass (imf04.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.179 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-1bc76cdf0cbso595305ad.1 for ; Mon, 07 Aug 2023 04:13:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406816; x=1692011616; 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=et7oKjMo2RpAm9eGe6PO8KzXkO6yMET8jj6KuxhxE1o=; b=LikGQLIJYBMaIhLRv2oXwUZ1S5/lUocFnmTR+FYR6Ek9DrdoATbLs4CDlynPte0jm9 +o4McGrgBARlkb75OrdIWJKTn+TAsEnotraDhrP3rtl6y6q5edkiQAwqNgCpWHEQGLxu GHvaWLUFDnTHEHQY8B66ZCvfeUOtDRooCdq2e8FvhkYGE0+2kW031xfZ/1GeTTnnyACe erVR01yoMD1wcFa+90Rr7nUgrj+jHy2UHL/0KieWzuXqT/QJWuskjH4/gIAZtbTfNj8h rLHAUVp+wWaVi0Nz3/+zkqLaFK0QZUGbmHkke0Mu+daDajI/xmbze4i5ZAJyYAfaC1ge umJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406816; x=1692011616; 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=et7oKjMo2RpAm9eGe6PO8KzXkO6yMET8jj6KuxhxE1o=; b=dsPfcRjwdp5B2lorvmY3GK1rhWiLLEzInbi64gy/4cho0dwYH9rgIar+RCd2oC1um2 vzjDGTaF8ncP2koqq3EDV7wfcpu2EcUq6a4GqHOEgWhDntjfHiurtxuBBZsfs28+bdMd RP1lQ4iYLvetnFy3fU2RSHX5/EJF1VWC9u56BXPTaGFj8ogC8u4eBBLrMRmtkdkx5jk1 EpqU9abtuzQvVULJd+R1Ux1vWfioX9kiLylMA0VSo1tqszQcx1aYZ3DTYo449baubKbX OvgxluE0meNqj16h4guvWGwN/pERdMkyXrbqYX0sm47hYSM8euMR/UxTcl+nsjCJ4+MQ 2IrA== X-Gm-Message-State: ABy/qLb32Srw3blQYN8psx312MMJTDL6EPVnsIlbPtTddPBL2xH0Ujuf ahbwcJwrThF9sXrteuuj2Wkskg== X-Google-Smtp-Source: APBJJlF9QaWRkA2HFZAXDPGIksSZq6NqNIS7MDluuBXjMUyGz8OacRKwa0/I1dCKrdRRT8VidP2X/g== X-Received: by 2002:a17:902:ea04:b0:1b8:a27d:f591 with SMTP id s4-20020a170902ea0400b001b8a27df591mr32781910plg.5.1691406816716; Mon, 07 Aug 2023 04:13:36 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.13.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:13:36 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 17/48] ubifs: dynamically allocate the ubifs-slab shrinker Date: Mon, 7 Aug 2023 19:09:05 +0800 Message-Id: <20230807110936.21819-18-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: C2B9440013 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: hamcqghywtpxrxc4mbybsgq116hyxid4 X-HE-Tag: 1691406817-763883 X-HE-Meta: U2FsdGVkX18SP/YB6I+/cNQ3/Y/E858UbNX/2P8h6FJGyZCYmam0lj9ieIbsSxKrnUjR92o/BtUXqe4N0l5DIzEkQyhvVOLs4IZYhGim50Uj6twC9BJJu4o/ctmWjXwkoM1GaPgGokOYqaMiHMBH7uGQt9h5EJ0WbxRN7daBNda2UuIsZudlAcQTVnlFb+jfXRog+x6GbYRM/ZaINciDyPC+nca81DsRucxqGL/Fj4Lr0Jw8n5WFULoae4M7IjDUx/AA6Wz7jYBj+A0cLIs79GfKWRyhH65kr3ck21/18nyTqUc+V7WGNFaelVjjj08pN5Z3B/eglPYljeYFeDZh3CaXTF/oczR55WIJ1AQFX3mmxAVk3SeaK7E9Sychvs0+BDGhxzUTsAn7M+oewleNHPcsPSFHPKCTcGWU+xvOD0+Btvo54VcSJ2MjiHKtaBIe7SlJLd1Wu9CGoFwTszxi8S2f1hLeoMNVFBeq5mAt5UPKj4kr3hYtRbSsU03MN74aihZL7qeQIfwkoY4fx2O2C9egJ1SuBFgZEZRv13ZVB7woxzskvapmwEwZN1T4Dtlrm7PsdLcoRbg/O0mNXpu8/4+LlWMLrqBOPZZ+Ay0W+p/ge8w+PjBq+OG4EfPrkVTSNYX/r5s4SPblUQzR+EcKo0AleWImXwqDyHryJl/uColYF/p9AeFCqJc45PSZimniBPRu3m7pyeq4FBPKbU9xoK0/jICU474v3ycbAMsJyzR1LjsBiegIKmO8VWzhEN5y/CQsXlCDijAVLWhcpkfNBEGdbyGOEgdzCb+78p2O4+ESn5AnCctLkuPwmnis3JkXXRw+M7BnJ5gewJ358r7w8w8+/6zzsGMkkuBQVoF6GU1Mz5SfcOO4H3f1d3TG/1WUwSWm8s04UmUyqGKTY4EM6f6wgQYLiqPfs1Q9FwJ6X035k9b5vawdCSdkMlJ9Z9PUQFXpKK50DOdCtYTGMgQ 55+9h/t3 O/ix1qgrKc9X6aC/miqg1NJEIN2XFJcTsMQ/pIVL6jpAtvccuSiWJujuCgnLm2u3V/VIszTtpq0aP68XVj6w3XIDXNy7RILk3nA/JxtK0b49ucqaEvNUdYspxYAk3HsffPq2nu9ziGTbWqIIFft9729cWLGgHqhvpPQbhNo9J4VJQqNTkuUh16virxvCzc2wtLuz6yxvyctxHT9OW+fC/dwDPtWUf7sALaDq8gphDhlktn01vI006owZpAcIyKp6t3zSkOu4xj5BkdOnZ3UycXUKHiSBQN0eIZx3zVuslsAWIEY7g0Jpvj3miCG4bozbb/RzWbvRgtabL2hL6U3TuQ99AvkLhVgZvbp+rVC+DOOAcFUMKhR2eTmjlx0gJAnyyaVb4t3grjj3xg2VYI7c+6/Ub9YM6UWrptYfL X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Use new APIs to dynamically allocate the ubifs-slab shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/ubifs/super.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c index b08fb28d16b5..c690782388a8 100644 --- a/fs/ubifs/super.c +++ b/fs/ubifs/super.c @@ -54,11 +54,7 @@ module_param_cb(default_version, &ubifs_default_version_ops, &ubifs_default_vers static struct kmem_cache *ubifs_inode_slab; /* UBIFS TNC shrinker description */ -static struct shrinker ubifs_shrinker_info = { - .scan_objects = ubifs_shrink_scan, - .count_objects = ubifs_shrink_count, - .seeks = DEFAULT_SEEKS, -}; +static struct shrinker *ubifs_shrinker_info; /** * validate_inode - validate inode. @@ -2373,7 +2369,7 @@ static void inode_slab_ctor(void *obj) static int __init ubifs_init(void) { - int err; + int err = -ENOMEM; BUILD_BUG_ON(sizeof(struct ubifs_ch) != 24); @@ -2439,10 +2435,16 @@ static int __init ubifs_init(void) if (!ubifs_inode_slab) return -ENOMEM; - err = register_shrinker(&ubifs_shrinker_info, "ubifs-slab"); - if (err) + ubifs_shrinker_info = shrinker_alloc(0, "ubifs-slab"); + if (!ubifs_shrinker_info) goto out_slab; + ubifs_shrinker_info->count_objects = ubifs_shrink_count; + ubifs_shrinker_info->scan_objects = ubifs_shrink_scan; + ubifs_shrinker_info->seeks = DEFAULT_SEEKS; + + shrinker_register(ubifs_shrinker_info); + err = ubifs_compressors_init(); if (err) goto out_shrinker; @@ -2467,7 +2469,7 @@ static int __init ubifs_init(void) dbg_debugfs_exit(); ubifs_compressors_exit(); out_shrinker: - unregister_shrinker(&ubifs_shrinker_info); + shrinker_free(ubifs_shrinker_info); out_slab: kmem_cache_destroy(ubifs_inode_slab); return err; @@ -2483,7 +2485,7 @@ static void __exit ubifs_exit(void) dbg_debugfs_exit(); ubifs_sysfs_exit(); ubifs_compressors_exit(); - unregister_shrinker(&ubifs_shrinker_info); + shrinker_free(ubifs_shrinker_info); /* * Make sure all delayed rcu free inodes are flushed before we From patchwork Mon Aug 7 11:09: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: 13343495 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 9141EC001DF for ; Mon, 7 Aug 2023 11:13:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2A8686B0075; Mon, 7 Aug 2023 07:13:52 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 259346B0078; Mon, 7 Aug 2023 07:13:52 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 121208D0002; Mon, 7 Aug 2023 07:13:52 -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 02B336B0075 for ; Mon, 7 Aug 2023 07:13:52 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id D4B021609A8 for ; Mon, 7 Aug 2023 11:13:51 +0000 (UTC) X-FDA: 81097048662.02.56C614E Received: from mail-pg1-f180.google.com (mail-pg1-f180.google.com [209.85.215.180]) by imf23.hostedemail.com (Postfix) with ESMTP id 0718A140003 for ; Mon, 7 Aug 2023 11:13:49 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=dRL5OTw5; spf=pass (imf23.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.180 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406830; 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=GSWsN00ewH1CUxuL2on0amogNZtYjpfZMPk3tXk1MLc=; b=zHyYmN0LUHI+Yo8Sfk3ghi5UkV2lNBUkMz91sMILIpWpGNafA2VoCusU3KbNn/VBInN5eU OTl0eXQr/F7FQyoHHwcuBIJ2pqwrU/9N/Yyb6pISoShyG8lycp05hZ4EiHEK/+llRQrnrf ZL0eQAFQlL9xIkDb8FsnXmdohI+kCnI= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406830; a=rsa-sha256; cv=none; b=zQ0ny2EIanq85Us3dIP6OHD6Yc7PdoyMcarH+31aIP9X0JSApYg+gDLJt38f5jREk1X2Su 5VbmBQKTY8YYzxn4Xghc2NoG4poVcdw82Lz5PpTsOyRXntZTZsPZ0VBWcbRcuEsUTTXuGu QIW9OTz529xp72246THK02xFBlP58Ig= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=dRL5OTw5; spf=pass (imf23.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.180 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pg1-f180.google.com with SMTP id 41be03b00d2f7-55b78bf0423so391756a12.0 for ; Mon, 07 Aug 2023 04:13:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406829; x=1692011629; 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=GSWsN00ewH1CUxuL2on0amogNZtYjpfZMPk3tXk1MLc=; b=dRL5OTw58GKSKLSEPIkOk3RNFcmmAqsiLvwXwuCsQ6898crZQ//U31N7J6aETctBqp +yNfSzW4P67hr/Q5en6KlpeaCzhuSArK09Uv1s7rX7JtU6KCmHd6Mqm/4AQ65zu5m5Io c0AgOv8G8SDnrmCDqGvw9U9rsdHywgcFHequBwptONEnrpN+7djJ7c1au1NclddO4RuF fGkbwSFA8neTzyjHzVx+h2JTuM9t2Q0O3KvbIWMUOl7gxPC5QUE4BflF3xVEC1ALf5VX oJ+rwFdIWe78RvMraM76IWcwrhx+7xBzgx3bdbJKVCqu0ytQTpll1s2Np/nEdRD5cowd HYLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406829; x=1692011629; 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=GSWsN00ewH1CUxuL2on0amogNZtYjpfZMPk3tXk1MLc=; b=Zs1tsC/6/KIgThkg+7+ya4RWoqs3xWTLeVDY2BX00nSr99lmM8a2K4FAUyXh98cye4 zwMcmEgjzPNUymz1a5NbOSiWlLgLuJWN25JbZPALp5fOJ33bqTqmzmzmt2i6sZjxTKmf r3LfOFOTqLXYs6YO0LpcdgZxXkxgChqbkE0HZ/Rd8UZBvNEObeacZX4vjoGJU5kv0QCB RxdcDeoNyOltUgW8xdyGnJPwLT834683QpcrLvJpnkuEpqFF0xOWcKQSs4NCud2G0zmY 4QUMR0bb4Y10Cp28uriUtL/9C9+GTDXjRJeu2upW8Xq9jYS2P5SwEfoNPTCL6Nw1OuRz Pczg== X-Gm-Message-State: ABy/qLZCYqe7f5tXAa743/m0cHox3TjwwfcrNLsaknWobNlsDdQ3SXhN B2ZxFlcENS+ZU1tp4XtirzQQmA== X-Google-Smtp-Source: APBJJlEEwhe0wjgrc7nxC5j9G5K3ZI0sWgwDykpBRAx7nLtKV2LZNd6jgA89VvGSaryf9LAeIFxakg== X-Received: by 2002:a17:90a:901:b0:268:3a31:3e4d with SMTP id n1-20020a17090a090100b002683a313e4dmr23070871pjn.2.1691406828996; Mon, 07 Aug 2023 04:13:48 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.13.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:13:48 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v4 18/48] rcu: dynamically allocate the rcu-lazy shrinker Date: Mon, 7 Aug 2023 19:09:06 +0800 Message-Id: <20230807110936.21819-19-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 0718A140003 X-Rspam-User: X-Stat-Signature: zgudimnzdh5469m68hji8j5pc5yrf86x X-Rspamd-Server: rspam03 X-HE-Tag: 1691406829-570384 X-HE-Meta: U2FsdGVkX1/LVKVqpEy56qZ7QNVh1rs0NaKd7kXBNSYDc7MyPzvtzHB2aU2UhMnsjShHTpbsO15zlddCHfN8BR7N8C8rIbJXXKKBI8WENdA3a/9usP4v7uaJTFAIlh7FIoOKqd3pRCbYcmiTWg+wFt1RjOIlya9jkFvh+Z1j1QYe8HxgKjApmWzk5AnT6Cb1dfkFF7Gk3HdXZRI83AIQen9IQp+faQvmORFawpwXYvZV3ANTBwbB4llLPKtJAoi8LRPBa3jRy0fS+kpvyi+ILMhVpEjCTtMDHO4VlNroIqMmqx+W0ZTBxA7h6NDgt/uNVSGFS/HigkI4/aPqsjB32ksILguxrQb2OwHJjPiK3+sX6Mqd37SaWqLSZZPYSsPd31qrovQCBxQTldKVf0bM6FC2UFnUsFd7YbwhKdWw/58K/3jfIeenzFrZDCOrUP1AO+Qm13RBuhciaN/fuJtpitbYctVHfgy0oJhbfXxmyTC/Mhbei9xeH6gGhVTxUh4kdZOOKarcC4Vtla/qN1Gs5XgYaEU6KxNwiAFBw5dQ2z+6O8R0MBqRuGaDgFCgJzjP4OEjYBXItFMJctxen6SnjC0UlrUvG8ASJKnlTr/hdZU5fSWNkaeC9CxqgHrUw7ad7sn2AvcaphN1M+TEEf1Dv8jWX3PPzOnGS/jwscTnDxepjoecISBSFjqSjwxN3OVbusTk1Ddw27LQ6dDO/MqFBq0k7DkzKLhvfsr1OEXnl2czQwxHe/cS53FHE/5gsK19uilMhBknhWreubBUrow0IZcBIJbaSO8A3WP15xv8zu+eY8nYRqE0DiwNar927PF1FKexZ3hCpWJww2N3moKhISlu6R4eqJgbrKCkCLCjYwXSqHoRTzNYWvRBFcZ0NuO/y5FAJq9BqevqgufCz1xBTeDSGf/oX+8UKCOt5go+ve5MByZbcdOKdwLxMwWgQPiDF/Ggk06SXO+BcgSVB0l Z2NTyPXI uKjEWtOlR/S43s22utShjS17xzzxcAdrPAPE8l1wE6sLfpahpExrt4ljhaD/4h87W+GPjli0NkKT7MwuZUywT6Up3vCIon3W5y/9+EO64prlNRCmMmHSM4dgl1O1zSqcS8wC3JChBUK8yEjI2SicIxHYLxJFrm1uGarBvLRMqmIO54ixPU2YipWRl7GysUV97KDjorfQtlxpCHzzXP0TuKsIK/YKiMKRr7UBXtVr+dgj9wufa/Ib+uv22gAsk8gIoD+AwuvWDbOiUwBNMB4clGwsuDkav8BKxLHPPAxPUM+XHo/1EG3LqWCZIw25OpsICnGy5fVxkRuZbUB/T+8IJQfoLJOurt6O52v+2W11M4sPGDsFIDJSsxsT8vPKl5F166TM1M5jGv/T613PzuMSdZay1nikh7valNEPq X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Use new APIs to dynamically allocate the rcu-lazy shrinker. Signed-off-by: Qi Zheng Reviewed-by: Joel Fernandes (Google) --- kernel/rcu/tree_nocb.h | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h index 5598212d1f27..e1c59c33738a 100644 --- a/kernel/rcu/tree_nocb.h +++ b/kernel/rcu/tree_nocb.h @@ -1396,13 +1396,6 @@ lazy_rcu_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) return count ? count : SHRINK_STOP; } - -static struct shrinker lazy_rcu_shrinker = { - .count_objects = lazy_rcu_shrink_count, - .scan_objects = lazy_rcu_shrink_scan, - .batch = 0, - .seeks = DEFAULT_SEEKS, -}; #endif // #ifdef CONFIG_RCU_LAZY void __init rcu_init_nohz(void) @@ -1410,6 +1403,7 @@ void __init rcu_init_nohz(void) int cpu; struct rcu_data *rdp; const struct cpumask *cpumask = NULL; + struct shrinker * __maybe_unused lazy_rcu_shrinker; #if defined(CONFIG_NO_HZ_FULL) if (tick_nohz_full_running && !cpumask_empty(tick_nohz_full_mask)) @@ -1436,8 +1430,16 @@ void __init rcu_init_nohz(void) return; #ifdef CONFIG_RCU_LAZY - if (register_shrinker(&lazy_rcu_shrinker, "rcu-lazy")) - pr_err("Failed to register lazy_rcu shrinker!\n"); + lazy_rcu_shrinker = shrinker_alloc(0, "rcu-lazy"); + if (!lazy_rcu_shrinker) { + pr_err("Failed to allocate lazy_rcu shrinker!\n"); + } else { + lazy_rcu_shrinker->count_objects = lazy_rcu_shrink_count; + lazy_rcu_shrinker->scan_objects = lazy_rcu_shrink_scan; + lazy_rcu_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(lazy_rcu_shrinker); + } #endif // #ifdef CONFIG_RCU_LAZY if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) { From patchwork Mon Aug 7 11:09: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: 13343496 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 25E1BC04FE1 for ; Mon, 7 Aug 2023 11:14:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B34686B0074; Mon, 7 Aug 2023 07:14:04 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AE47F6B0078; Mon, 7 Aug 2023 07:14:04 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9ACA38D0002; Mon, 7 Aug 2023 07:14:04 -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 8D7826B0074 for ; Mon, 7 Aug 2023 07:14:04 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 39C9EC0A1D for ; Mon, 7 Aug 2023 11:14:04 +0000 (UTC) X-FDA: 81097049208.12.D524C25 Received: from mail-pg1-f173.google.com (mail-pg1-f173.google.com [209.85.215.173]) by imf04.hostedemail.com (Postfix) with ESMTP id 6ED8340014 for ; Mon, 7 Aug 2023 11:14:02 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=j23yTPIu; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf04.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406842; 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=a0ijFA9s9bGVMHT4vLgTYS12L8yx2Rc7o6TjM9ZoJx8=; b=4FvIQ4l2z/TJA3JsFTarSM5OgWxh9bcdlG2ziOcAJA5WH6GgG53effIVL1UMJnjlK3tQR0 ZWoPExxSTRH6/vgGUzxtiKgx948dYXTdBrTcGKGGx2rUqSiw75Yc1B7pbKXMJ9lgVeC08k Rt2pFvuOfbLvHEl+HUhjq51Ui6bjJKY= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=j23yTPIu; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf04.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406842; a=rsa-sha256; cv=none; b=pnqDMyyFJX/aWxfh2GjfoD+cXYOy8eShLEvg/JvrRYfDMkJgerXQ3euoqRTid0Z865RtK8 tNZXbcQDjZ+pXmI2UZCIb64vG2QOMQKVZgOGpSvBN4xqXyR1HbbH0BqZaLPH+KQMI4NYcy bgr0bZHKaOb7FsSRKiDKJS4RH4+faLw= Received: by mail-pg1-f173.google.com with SMTP id 41be03b00d2f7-55b5a37acb6so362193a12.0 for ; Mon, 07 Aug 2023 04:14:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406841; x=1692011641; 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=a0ijFA9s9bGVMHT4vLgTYS12L8yx2Rc7o6TjM9ZoJx8=; b=j23yTPIuNE+5ql7c6DjTIXWDr8oKTSMtsFBsjjClL+S91jhwZsCcQpsRFgnSFEePMC wDGERQ9BkTMGtvLZ5zfdg/UY3HTRyGts+YmZTXabmNDPI0OPAQAqDfrw+jtLBHzydYmo a162rquUe53dODAJSpyuVfvHf3Ov/M30E8XZRIYttEwAxKqQFIS0/ih88OAzPNYyRzzl 3HkOwk/otVmt9H2o9TgGnt1eeNwmmBoINVdlSrRso11GlktIoEp92Q8ZBNulwW/JkpbE xeEGYB8AYsoVpHQBF7XcqQ5QT7dfjGJtE4RXA0EdlD1H8/kYwDQ1OkZhdkl3HITdo9Iq hOkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406841; x=1692011641; 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=a0ijFA9s9bGVMHT4vLgTYS12L8yx2Rc7o6TjM9ZoJx8=; b=UQtRqBugt/Qyqi5nsibE4o7/BFION3qCc7/hcEYaB1ucy8eqnp8xe4ZxC7a8bcaXXJ 7JEaGZBYpuuYSo8bRAsjDK92oQw7ri7i3DYCmAOM1HLY9Sg+OQHt/fuzz8jVtGc4uJZq LV7WfyD/nwt2T8qfOV6r5VjOV/vbdJhHagUNjyG4GBLH6eA7XNEnN/Jc5NbeduDNdX9e 6fjzw2kEZxSMASiKOZZZ0UHHnljNSsM/8Kzgsr4oufwTZ1E0Wb4RYQCJzXm0BuMGHD2r MjVZghW1oRVvltha48BOl9n1pIVjHiDOR6OFbNwhcG6ETJVyCkHTQYYV8+flqxfvf4/V aovQ== X-Gm-Message-State: AOJu0YwI1QZWIiTYxAuiQu3EkuX3u2I1cnl8yt4fyIcTTLG72XYVt7fO lbtpfTXFbfsrW8eEb14ASR05rw== X-Google-Smtp-Source: AGHT+IELWLhV4Bj40lkko/D2F7gtSRcHKPclt9k8JlXsq8dyT7OdoG/0VZRRAUzfMJnehzLNwTS/oA== X-Received: by 2002:a17:90a:2909:b0:269:5bf7:d79c with SMTP id g9-20020a17090a290900b002695bf7d79cmr2214416pjd.1.1691406841328; Mon, 07 Aug 2023 04:14:01 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.13.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:14:01 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v4 19/48] rcu: dynamically allocate the rcu-kfree shrinker Date: Mon, 7 Aug 2023 19:09:07 +0800 Message-Id: <20230807110936.21819-20-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 6ED8340014 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: 4ez8mafe3mzus5z1my3fnc3bpbyjxscq X-HE-Tag: 1691406842-119546 X-HE-Meta: U2FsdGVkX1/gDLVObFzRUkDnHPQhxEUkGFruMXtlhYI9wt95UDIzwV3+lC5Gdb4Vs0ChL4orTOigppPQ9ycArwapJe3ynlGBrMZI+V/n8bnMk+IT/wPobujwfqvK6JCZYxF6Q8SlCJbZpXKRf4t83siGyVc9CuJcIlkyXcw+ba1EFwLim572gPjEydicevrVQVECQq/KxCGyrWHpEyQGjhopYMXIrKh5mhbBwH1SbsNuD+l7dFZ4+/xHByyntIlZpsxyJUIm6CNLeekDfcMsJUiJVwRDGJpefnHcfrOdkASOZC9iro0v2RHArnKvHAfi8rWju4tTnoIGy2ZSxc0Gpw0v4Z/EipigWWRxIjX01h+6cw+ZZv0N/TjrKGKh4PMWUvUvP67oD2L7bK+NnuoWBJdVsmn0D2Ga4wBKLnEk3udYk/0B3Q5wHVrG5yU2nBSwGeRav6hgC1NMwFFo2LOsHnri2dz1HFQNSxmMVmE7gt8p/1/JNZ6K190AUhU5/ypx6Ld3zHZAQteNUcpnSq7FBbeFTsoFkYBJyaEPemYt0zpxcG3lZNsK6BrrRFIFe+bDt3N1Cvv8nRE6ntkrjFs5wtuCAa2pDmB+evSpSPSvJbQvBKxfb1cPgpsCeJkWyLyS/qV7Lslg8oiUiMcH6VYiLpwVHwOOuBgmejrLW3RL5wjoeaxlk5y2PIIiN/vAQDq8RQED7145IOIlsBDcEooVZaH/EvVTNlVYFonQ/WjYDbuwvmM/qugoVaxqmBZ5TdNOwxgDDPl/IRgh23fevdYVnHk7w3gi4tLYBVMjFfFAVc8fQaCPqTFmHbCIR4rWeUrYI69dQaJFYNHz1fEaNTb1anOxtGyJ3lXA1C2Z+zG079DwmAw+3w2ejxl/7eaXMCfuioIKV8Vg4ykBmi/5yc9oOMu7eJIpn2QMTO+ZRkz2rFN4BI0BNC1lbjCSl6ld6bmZFZMz6NlM9ajZbBcl+Im cCdwcGsW 6alnsnPvGXGL7brUCnbKPzKOyivFyQod+0dM9vv9+XUdgtHb7CDp5k46fKc5BXSOErTZxqi5SpegepXDOIug7uQ+CDvzQfBAm6+XlZGQyydSvkQzO39qmo3z2I2Lnox1O1cDSI6yxGIG+N9H1SKiVBL6cqFpMlhlXXFWFcJYLOyGMvuy97yHZUytScSdO76GbubAAiYztBspGb10DKj53i0dqAWqwQON2AJyQqR796euvP9W7YzRgg0vgJI8OQnHnxw9MWXL6bUO1y9H5WNKySyL7f1sT0qW55VGi33vkTZ6ODOvmifda+nc2Bl2SvUt4MFPNA9rLxn5/tExNFS5imzGHowmvHB5slgmpa+8YaY5SxFTYlF7SByHnvAWSq6kGVPjhrXi6OLzlAUw8NlajxugRNyO5wYof49f3JN5WpeQ+DKhD/Kl+hbwjsGc/hBTlQA2x X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Use new APIs to dynamically allocate the rcu-kfree shrinker. Signed-off-by: Qi Zheng Reviewed-by: Joel Fernandes (Google) Reviewed-by: Muchun Song --- kernel/rcu/tree.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 7c79480bfaa0..3b20fc46c514 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -3449,13 +3449,6 @@ kfree_rcu_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) return freed == 0 ? SHRINK_STOP : freed; } -static struct shrinker kfree_rcu_shrinker = { - .count_objects = kfree_rcu_shrink_count, - .scan_objects = kfree_rcu_shrink_scan, - .batch = 0, - .seeks = DEFAULT_SEEKS, -}; - void __init kfree_rcu_scheduler_running(void) { int cpu; @@ -4931,6 +4924,7 @@ static void __init kfree_rcu_batch_init(void) { int cpu; int i, j; + struct shrinker *kfree_rcu_shrinker; /* Clamp it to [0:100] seconds interval. */ if (rcu_delay_page_cache_fill_msec < 0 || @@ -4962,8 +4956,18 @@ static void __init kfree_rcu_batch_init(void) INIT_DELAYED_WORK(&krcp->page_cache_work, fill_page_cache_func); krcp->initialized = true; } - if (register_shrinker(&kfree_rcu_shrinker, "rcu-kfree")) - pr_err("Failed to register kfree_rcu() shrinker!\n"); + + kfree_rcu_shrinker = shrinker_alloc(0, "rcu-kfree"); + if (!kfree_rcu_shrinker) { + pr_err("Failed to allocate kfree_rcu() shrinker!\n"); + return; + } + + kfree_rcu_shrinker->count_objects = kfree_rcu_shrink_count; + kfree_rcu_shrinker->scan_objects = kfree_rcu_shrink_scan; + kfree_rcu_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(kfree_rcu_shrinker); } void __init rcu_init(void) From patchwork Mon Aug 7 11:09: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: 13343497 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 BDFDBC001DF for ; Mon, 7 Aug 2023 11:14:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 58E546B0074; Mon, 7 Aug 2023 07:14:17 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 53F168D0003; Mon, 7 Aug 2023 07:14:17 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4075B8D0002; Mon, 7 Aug 2023 07:14:17 -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 314006B0074 for ; Mon, 7 Aug 2023 07:14:17 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 0B634B1AB5 for ; Mon, 7 Aug 2023 11:14:17 +0000 (UTC) X-FDA: 81097049754.10.B7BD142 Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) by imf08.hostedemail.com (Postfix) with ESMTP id 26B67160014 for ; Mon, 7 Aug 2023 11:14:14 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=ONEUI0If; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf08.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.210.177 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406855; 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=UfFRGPeE2ZLo8C9JFiR7wWvNCzDdrS4O9P7I0rwozQE=; b=v3HdLcibcfW35yKykEFwVncRVSHas+byhpK+rV70lJA8NcKhnpmMLkwvw+/xpUwXpcZDiJ i+li+Rh2uwFgqbvjtO6FvAeEjTHmmuUzy7tfwvqUDh69ggpypYAdiOqz1x8meXx9NxbrR5 MIIxyUiMqnEv+YVa+14RE5tqrEOnDOg= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=ONEUI0If; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf08.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.210.177 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406855; a=rsa-sha256; cv=none; b=vfpfdbmQF7mPKqMRbZYHFbUJU7ac/Wi1PCLgOJPZPryufHRPW0q9VefG//UqhtX/P8i7f1 uNvK/fUbZDlFRxPsAKyJ9QVXTbpIzN+jXftTKpOZcCW24h9jYnBo5S2CHkpCpgq6jRDMA2 mtnMAX9XmLhJtDQP5dgPwfGaNIW8nFQ= Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-6878db91494so757975b3a.0 for ; Mon, 07 Aug 2023 04:14:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406854; x=1692011654; 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=UfFRGPeE2ZLo8C9JFiR7wWvNCzDdrS4O9P7I0rwozQE=; b=ONEUI0IfFZms4FG9PetOl8bvKenOqN1nU77N5Qte1+jcUcBw58bz7f+hU+R7TeYF+V lh6zqoEeFSpZcpg8mRig+kmjWUt6kfXbSu+9NeAXYfo3N+VsjNhMLOsuKkNQEOPAjcDK uUyV00OaSrfiIXIqqcl52eWZs37Xm/4rryCSVvHnIArrw8ERrhcN4eSxoW+GqcL8/yIb KwF9HiN5U8S+9tgj6CAiBWcQ9gvQLYdhSLPDQ8D4Yya1PGPZvz8SVg49P9ivLovoYGLT Rib8AROfQ3COlCK0yM55x9RlvasI2HVvqoY8nt3eQf4jmVmec6kkSrsQ1MGHdEx91QwE bHJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406854; x=1692011654; 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=UfFRGPeE2ZLo8C9JFiR7wWvNCzDdrS4O9P7I0rwozQE=; b=VEQsaKHXDvC7jnojDrM5+jqq6FUx1rF7QQT6kX957UWAsStlLFdFSbJ8t4u4f/eH50 b9MNylL/1xhPEk/rKqNLgyWsEbafGWwnWePDc46dN/xrKghityl808ow+LiIMdYvQEOX ZIYnXli9Vul2ZuRtjHWnVfTWzEefL1XBB6Gwn219A9jD85sgYeUbsOGTTn9wnLymA6Mh DBGn9gNVRChOdg7tAXrZ6wrqa5QBHkf5PaxwOcIQ4Td4BHAZ0UzCOzpyaYNrWctNU8RQ psUEyllow3mY5NJwDUZKTYfk7Axc46hTBZ7oQam02UktCyPFKEvapudgavwSzGy38LXp 6+xg== X-Gm-Message-State: ABy/qLYXrZzmOV7F6HLSSeb8kqZ4edWs9rYZuHeUwT9TF8IDN/N7DsxA VaN3XdHtT9ZnHG+JpoJyGrhlVA== X-Google-Smtp-Source: APBJJlFKEuLPG6rXvjHQ/xhYlF3mJA1G+qTCCufEjWmHi053bG2lxjJC7FtDeUsrnl72QxE+YEuj1g== X-Received: by 2002:a17:902:d503:b0:1bb:83ec:832 with SMTP id b3-20020a170902d50300b001bb83ec0832mr32625772plg.2.1691406854020; Mon, 07 Aug 2023 04:14:14 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.14.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:14:13 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v4 20/48] mm: thp: dynamically allocate the thp-related shrinkers Date: Mon, 7 Aug 2023 19:09:08 +0800 Message-Id: <20230807110936.21819-21-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 26B67160014 X-Stat-Signature: ci11tw8ycka36zo96qrmb5ioi78ckief X-Rspam-User: X-HE-Tag: 1691406854-872454 X-HE-Meta: U2FsdGVkX18B+YdRkoumIL+Ttl33D3f/zUI9gVo+v6EhZVtl3EhfKt53xkjamm1F+8QU5R0iVarxiUQtJ8Ut0zzmMBZK/StXguWMY5FVwPcTVsn3APg0DcfA95BGfTfsj4MDs5QxxXHcvJMHcyEqRPGKnqxkcHdo+KeD8QOqdm87LG43dLYpBRu4VhAdGaU99aJSgo6Ik47H9P1z9sPKL6rJZm5vEWIM4R4izDpwa3MCJfRb7FJhNiB1+EuWdcM8pGqcbeIVC3ICV3E8pEGlEiI904kQ5T/NBEaWk8X2xtZ6lK2sprm+C/CQrRdxk4tzGkc/t8cbfLVYD0wGOTTZQqzR3ZhZbF5aEm2aoa5sOqQzktj9uN2l4P/9KdwsoZn1HtMdxLe7Ho+Jv3LbN+fsHl3OCH1x4xIjHkImbYhy11AaX0PeTsdDj+Niwt0wr+jdobGBy6Z5jT1wgvE/wNR5PCj4V4WUVh2CTKFB7wbb6QXdAmWZmfF4V5EWl59jlnVlBh2MrqMAkvm2q5bIkYIK66mKZseXnMzAwFkbabp6owa7yGapReSEixc0nizof3th/HmybMM516gHCnGLb38ZaZSSKKbebEtxkBR/vyaBo3CVrm9pXMbx5gyQfFLFsX8JIW5JdlWJwJx9MW5xQfK5vvojZUtG8gjKNwQgUZk3BGc2LnhfJi3e0iwYWwontR6wFcB5rRMlcOZkS9nVx29zcDJu9LogSI/KG3CYQ1J97d5HgO4fxu2jaK1LDBe4vlcVvGVNAohgQ6f+Qia5wYymFUlJvyQUCDSStzQaOG4obasRWp+QYb5yWBZDCuSBzwiv9nqurr85rD/g2GMVoFOSJIlk8g64fUoFz3RRZ3+z3LwoE4Akx1hr7K/bPw35Q5zbef2FU0AAdQaEmBbX22V2cZyKqz04w20+nxbQDHEHZnmf767u5nPiQIONV/igIDeFYVCYLWQexCgAHTBev/6 Ba6iiZBW eKJmvXGDGjzK8r7ouiNe1JuVc19dxf1TrQ0rP94h2/RWJ0LvHsX9TnY0M+mdy3iOKMWkpXuhWcYpwDRku58zpd2jUx+AmsMnhcJjjDEYiM3bjEb8PdRnyMrI0iQNLWdJBjYn/rdP94JN17Zz8l5VlDSAnjTmzeocjjgkXHimg3aGdrN61WHpsUlsaHYD48VzCZxEiyVk155oPrlE/4wp4yORtkUdRbtEOj1xTxmMdtmOQkaXUXraXCOSKSSdPF+/YbbPX+SxTbHr/uvJZLVZtEfqZO/ofO9m1E2f7jPVPsZbEPGN9YkeVY1Fcg/plCzzu32MvLE07t07qbBJPjAzsCbXbrvGi6CVIkHiRq/4oTuuEDhQ0lvMWcjv1jzKEENrPr73sD2tcEl+Ol2xoX58kRt3plfIRilcImPk3 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Use new APIs to dynamically allocate the thp-zero and thp-deferred_split shrinkers. Signed-off-by: Qi Zheng --- mm/huge_memory.c | 69 +++++++++++++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 24 deletions(-) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 947001a7cd42..5d0c7a0b651c 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -65,7 +65,11 @@ unsigned long transparent_hugepage_flags __read_mostly = (1<count_objects = shrink_huge_zero_page_count; + huge_zero_page_shrinker->scan_objects = shrink_huge_zero_page_scan; + huge_zero_page_shrinker->seeks = DEFAULT_SEEKS; + shrinker_register(huge_zero_page_shrinker); + + deferred_split_shrinker->count_objects = deferred_split_count; + deferred_split_shrinker->scan_objects = deferred_split_scan; + deferred_split_shrinker->seeks = DEFAULT_SEEKS; + shrinker_register(deferred_split_shrinker); + + return 0; +} + +static void __init thp_shrinker_exit(void) +{ + shrinker_free(huge_zero_page_shrinker); + shrinker_free(deferred_split_shrinker); +} + static int __init hugepage_init(void) { int err; @@ -482,12 +516,9 @@ static int __init hugepage_init(void) if (err) goto err_slab; - err = register_shrinker(&huge_zero_page_shrinker, "thp-zero"); - if (err) - goto err_hzp_shrinker; - err = register_shrinker(&deferred_split_shrinker, "thp-deferred_split"); + err = thp_shrinker_init(); if (err) - goto err_split_shrinker; + goto err_shrinker; /* * By default disable transparent hugepages on smaller systems, @@ -505,10 +536,8 @@ static int __init hugepage_init(void) return 0; err_khugepaged: - unregister_shrinker(&deferred_split_shrinker); -err_split_shrinker: - unregister_shrinker(&huge_zero_page_shrinker); -err_hzp_shrinker: + thp_shrinker_exit(); +err_shrinker: khugepaged_destroy(); err_slab: hugepage_exit_sysfs(hugepage_kobj); @@ -2834,7 +2863,7 @@ void deferred_split_folio(struct folio *folio) #ifdef CONFIG_MEMCG if (memcg) set_shrinker_bit(memcg, folio_nid(folio), - deferred_split_shrinker.id); + deferred_split_shrinker->id); #endif } spin_unlock_irqrestore(&ds_queue->split_queue_lock, flags); @@ -2908,14 +2937,6 @@ static unsigned long deferred_split_scan(struct shrinker *shrink, return split; } -static struct shrinker deferred_split_shrinker = { - .count_objects = deferred_split_count, - .scan_objects = deferred_split_scan, - .seeks = DEFAULT_SEEKS, - .flags = SHRINKER_NUMA_AWARE | SHRINKER_MEMCG_AWARE | - SHRINKER_NONSLAB, -}; - #ifdef CONFIG_DEBUG_FS static void split_huge_pages_all(void) { From patchwork Mon Aug 7 11:09: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: 13343498 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 89038C04FDF for ; Mon, 7 Aug 2023 11:14:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 20D8E6B0078; Mon, 7 Aug 2023 07:14:30 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1BD456B007B; Mon, 7 Aug 2023 07:14:30 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 05E378D0002; Mon, 7 Aug 2023 07:14:30 -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 ED5076B0078 for ; Mon, 7 Aug 2023 07:14:29 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id CD4C5B19E2 for ; Mon, 7 Aug 2023 11:14:29 +0000 (UTC) X-FDA: 81097050258.18.4652BC4 Received: from mail-pj1-f44.google.com (mail-pj1-f44.google.com [209.85.216.44]) by imf09.hostedemail.com (Postfix) with ESMTP id 11238140019 for ; Mon, 7 Aug 2023 11:14:27 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="E/hLPt4J"; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf09.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.44 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406868; 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=igblsYgdIrcTAL0swCZj529c9jjsKo5CwfFS1Qcng2s=; b=2p5LmRCTttI3l2N2EHBU5JisZ493dzuVUc5dliiJYqGmzLjbulIaKRjQXeeS12M3UV6ipf euHFHvkeUKpNEU+KeTq6uYGy+6hDk94sOxFngATj6tr+ew8gqaL8k/mRZEfYUbn8LMszih 7BoePnQuupryFsMbZIpVUqv9/JxGmU8= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="E/hLPt4J"; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf09.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.44 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406868; a=rsa-sha256; cv=none; b=HTdyBNuMKcUOcwWeCdCAY2jaIYnv5f58nPgNkpZm068Mr7XvnSxs2MymO133DRzW6pXZbl 4oySOsxu7lUDJgy+AOTf3vWWdqczfZfJvHhxvnnWh6i85MekII75FSfHErn7rQBzATxkYr wv6N4FnClOb4ExksQk/dS8Atl80niA0= Received: by mail-pj1-f44.google.com with SMTP id 98e67ed59e1d1-2690803a368so590613a91.1 for ; Mon, 07 Aug 2023 04:14:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406867; x=1692011667; 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=igblsYgdIrcTAL0swCZj529c9jjsKo5CwfFS1Qcng2s=; b=E/hLPt4J9XwFdy6Q/ScFkKAboS35nT/aVetijUs1uOyzpCdXJrzvux0WuTkbJahYDU HJ4RnOFgFoSV4vIvUSABYCFS8MT8O5BBdFRn/e0d22QvpkBHCvD7k0jL91l8VKqh/AnF pNO49bmGYrjFLlyM+it2E7+BjcoRQ4qvC4Z3zAnwRx4Mtu2gDzO6KjINZG5u37W7YPwR rd9mA5oeLZ1tw0ARUeeWuqEeVLZXyyZpLkD+mkbNh9jB2r9y+xHrPRtEaxpg/6wzvL2p pP/svPPe0egiR6EyNxAsA97H1SimGEidDNnScRjB0NSGHk7qAYW8vH7pvvrUaRXF4mmo 0r3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406867; x=1692011667; 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=igblsYgdIrcTAL0swCZj529c9jjsKo5CwfFS1Qcng2s=; b=YpQYs6Dxcu0ERlCJQ14JjvZIoqldYPn+NNC4AXeogbXC12o9DAg7mzo0/gPBwTAULf HVFfJV8W5jiTvEQgPkdmHaJMUhIR/zCYXeNMTl42vc+pP47jMAegV6MUQnjUbSaJ2ggh gFIh+6eljfn3Sw6uEmds4yIY5gaSSWEuNiKMFD8TRll8UbQwM26wOS3qHvvti4+CJcD5 3D/dBSw3C4pTDhik8SZZqTeflFSHFoOn4LGksTIeXtiC+h9tf+/nSEjkz+Clc9ek/O6X paf5GkNNdXSaqANOPjcEmn7CmHa+C1mh7/SkRKvMNBBzyHkNwqJIHtfVsRU+qDrWrMSx f11Q== X-Gm-Message-State: ABy/qLZqwXo2ul9ZuOBun9e17VMphmsDdJLtyZmE3x+8Bof9FdV3au/9 3OshZVDh//xFBCaubrh01dWX6g== X-Google-Smtp-Source: APBJJlGEDKqK4nyUWs8xE2EOJL+ODt25deDnA1/u8sHRAURqC7uD6bjxMDwwed+SXn6y84Un7sE7wA== X-Received: by 2002:a17:90a:1090:b0:268:126c:8a8b with SMTP id c16-20020a17090a109000b00268126c8a8bmr24570134pja.3.1691406867003; Mon, 07 Aug 2023 04:14:27 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.14.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:14:26 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 21/48] sunrpc: dynamically allocate the sunrpc_cred shrinker Date: Mon, 7 Aug 2023 19:09:09 +0800 Message-Id: <20230807110936.21819-22-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 11238140019 X-Stat-Signature: xdk6rpzfikk3nszrihbuecmtg14b1zjb X-Rspam-User: X-HE-Tag: 1691406867-38832 X-HE-Meta: U2FsdGVkX18lH82ZeTdEScHqmQg0XP/F/BTd5kti4UdIsdv1/uojr9eGv9L5mkrr3pOCU+vnMMbJIZMC+SnDAVfXB82DIKrPwCwKiwRMvr7ajPp94dwFxhbq61CXYF9lSSmoeztyd/ki9efpTR6EPGZH/1SlSJ7J8NckSt0O5KlfyxF4VQQ5ATfXhLrBgZFo/2cCPt82KRTL2rDuuowaFJhGhNe2/xpL34bh7joDYV/Hp/F8FXCa1JSgPWL0kPawELTCw/rLg2rsGSzgYAM9lQlmpyZaaZWX4ZwwcNI0n5v5H/YSheYGOG/oJbe9d7xDvs15oWqJEQUxCteD1bYzc9HyDXHsyAvL3qwrr9KJSJszkmE2L1t7u9paVtfMBTOIheeTW0ailznx3OgDMUWwc7XfPj+zQnpk3qRIXJS0Q2WMIA+cvti+H0kUvy7/8OZ9W8Nwo3tqD9OQH+xeqtBGDSfmHjnQfu398OSyzuRIFGRPApopqUaep7J147jsO08D4YkioU8aoKfTKeaTVLxZxMI3kEoaTfVCUCli34kUUfly+tqFc0atac0KJ/MUY2TfCjR636kVJYsXB1Lt7480pMGk0t/kfH74bpLUNBiJFdEF3/fPfCiS88YbQ+aWaNNMfYg/i57YSfgRqqyUqgFubHlebf81uIhUUAAh40JDL+foO984m0AuDku2dW/l+wG+4zjnkGayZshrQMIMyBcUgJ2a9Ue9VN0jGWUanN5IuuxwjfBy7/ntRdk2LjIP/HHDrGSNGU01aHo3yDuOFdOF3NXiuY89UZ0WO2KKui9FyThpcjFXodA77x86YeWHQ6A5jS9gilXE6T+jcjJRmOU9VlGOIlwQtVwxazQcxtpJN9u14QwnQHTMJPcKi/AouTP3ZKDUwmQNKjmQnR+4NTW0sxMztjcvrYorjHzXNkBrumYvHixZ3B680ogQ+Z4aMJfxvqGfgr8iUojos5dft1t pUH6Od4Q WwF9097gwXHtBTcxkPVynf2q4UTptHDlJN5sS8PZdBk4Rw9auzrZzLdAtuN/VMlO7fUAVq4HLWpX8Enjslk43h7HQtGY5ZN8NXkXnKWDfUtAZ5R5m6DXvn+3ExHrHmRkZIMGLqEvRA+icaD8+yDVSlxV+uhbLAcsnT0jAZnUkCD8zkbBlrvd0KAQkFPmIhcXhLu0kwtkwdogaTaQfCd9MR3wTdm4HiRREl4wZ23NcHkup+mQivOuTlPwLa4VC8BuuwTRtvcYungjy0k4Hmv1MoQQiuwDMeOOdAT4LL601kmdOfTt2wJMgbaYvaJfvH4ZNBUYufGikxfR5nALruiqB2X4y9i8j6LgRvCSQpkT/81xWX0u1a14tldJJl0CMARbPI3YPkpjwbiO+4yRq0uOP/MNx8RM3rwk4VLrd1OXZhMD03GtMCn4PQxWdB7WxzMekp7OpkIbfQieqNJrO4xDKlVkYgQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Use new APIs to dynamically allocate the sunrpc_cred shrinker. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- net/sunrpc/auth.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/net/sunrpc/auth.c b/net/sunrpc/auth.c index 2f16f9d17966..0cc52e39f859 100644 --- a/net/sunrpc/auth.c +++ b/net/sunrpc/auth.c @@ -861,11 +861,7 @@ rpcauth_uptodatecred(struct rpc_task *task) test_bit(RPCAUTH_CRED_UPTODATE, &cred->cr_flags) != 0; } -static struct shrinker rpc_cred_shrinker = { - .count_objects = rpcauth_cache_shrink_count, - .scan_objects = rpcauth_cache_shrink_scan, - .seeks = DEFAULT_SEEKS, -}; +static struct shrinker *rpc_cred_shrinker; int __init rpcauth_init_module(void) { @@ -874,9 +870,18 @@ int __init rpcauth_init_module(void) err = rpc_init_authunix(); if (err < 0) goto out1; - err = register_shrinker(&rpc_cred_shrinker, "sunrpc_cred"); - if (err < 0) + rpc_cred_shrinker = shrinker_alloc(0, "sunrpc_cred"); + if (!rpc_cred_shrinker) { + err = -ENOMEM; goto out2; + } + + rpc_cred_shrinker->count_objects = rpcauth_cache_shrink_count; + rpc_cred_shrinker->scan_objects = rpcauth_cache_shrink_scan; + rpc_cred_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(rpc_cred_shrinker); + return 0; out2: rpc_destroy_authunix(); @@ -887,5 +892,5 @@ int __init rpcauth_init_module(void) void rpcauth_remove_module(void) { rpc_destroy_authunix(); - unregister_shrinker(&rpc_cred_shrinker); + shrinker_free(rpc_cred_shrinker); } From patchwork Mon Aug 7 11:09: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: 13343499 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 92D5CC04A94 for ; Mon, 7 Aug 2023 11:14:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 281F26B007B; Mon, 7 Aug 2023 07:14:43 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 232486B007D; Mon, 7 Aug 2023 07:14:43 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0FB7D8D0002; Mon, 7 Aug 2023 07:14:43 -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 F3D056B007B for ; Mon, 7 Aug 2023 07:14:42 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id CA07E1A0961 for ; Mon, 7 Aug 2023 11:14:42 +0000 (UTC) X-FDA: 81097050804.10.534F3AD Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) by imf06.hostedemail.com (Postfix) with ESMTP id EFDF218001F for ; Mon, 7 Aug 2023 11:14:40 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=B1CW4rX5; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf06.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.50 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406881; 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=uDu/4z0sff3MNLq2Hem41DvJLtW9HR7Ht2OY0+o3IBw=; b=k7DhdK4yFPkNQSoF6zT6Au4mlLD45d27N0vPIDRCvBj3/WxHN2JJX2CcNlNNIlNwAcYWyc oNfj5TijlY0HT3DyLeOzLxry5pKa8Q75Es1VS0ic1gBOxFp5IzgTzVT5ldb7VM3Fwhb4ze IDI8PCg4lJeXAphWjWdNQlvjk0l9e3U= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=B1CW4rX5; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf06.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.50 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406881; a=rsa-sha256; cv=none; b=NcT2Vg2SSy2wCdfTu8iGS94N5FK+jwl4h1hqb5k4vYOSd1TvhYGYmAMJsPTuB8/BaNszYT xrkIB9ZonHi6t9RGrkc43b/LX3lqLymliKk9uyRv8vbqLM+H0uA+OK6MYlo4myp6wJo13R 7AHLoyviYPL0qVm2bnt1fTh9j0umf6o= Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-2680edb9767so930624a91.0 for ; Mon, 07 Aug 2023 04:14:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406880; x=1692011680; 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=uDu/4z0sff3MNLq2Hem41DvJLtW9HR7Ht2OY0+o3IBw=; b=B1CW4rX5HR96iE4C61mcE8Vf6RLeUtYXgDxnwBceT7ft1IC5S++icQmFIFvrt4cG/L 0c/u6FKIvYpbVXU295bMslZ7j2rgVaXwSjJRaIMLa4dIqq6HefzeIHqMKw0/Lo0rsfaU nsC5mn0wc4B6AcTwpHE7UQo4S/4ZAugQvuMvQEsWqhRZLmPoe9oa0Q7yCYFnuuapzCun SWccc4DpmmmlhTogFq9P0LyJEl3ZRZ2cm803+AIasPp033eu68uxaCfAoKnHA+NQuDMw Rtim+7y0rt6vcYQJO+qKgz5xgBY8yFO2AMQKXPDTy0z1fvoO5gByJOuvIrJQUEDpduII rIFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406880; x=1692011680; 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=uDu/4z0sff3MNLq2Hem41DvJLtW9HR7Ht2OY0+o3IBw=; b=lwFr7qzbvCnhwJ1cLWr8f9CkIViCZikWjiH4+usvN/Jg4LaXcNLiZvPguRvtrIoDyS efq4hJOY9H7bj95WisHxoNMv+Ej0mpKqA4+OZhZOJ64L4r3mHlr+RapM4jX+BFn5Y9lF qVv0NeH8KX2le1D5Dho2yqNGRI/1zOQLL2bwjKwLyh7vStwR3ytmmGEf7mqwsI75w1QV 0VL/WF1q4HV3MVe0oCNqxc5QBWeHD2a8p4fkPW8KMUqc7h+nsCdXyIG4Tsy9RLfTi3vN cMjL53LALqYV6JnjM0amHOEFUzwbOadFpQr16iODh7K2Zs+TEuADZv1hSclfSW1kcNC0 uVDg== X-Gm-Message-State: ABy/qLarscCUNpQF+cpkSGiwGa2fhphW9yofoyg8qQIu840HetDhG+dj X6CfgmoIbQ7ucECPwu4LUbw+4g== X-Google-Smtp-Source: APBJJlE+JUQU2KnCMqxKRhVbnyE7g/MjXwiwJL23ihCwbN9GtK/yS0Snkx/m2fq2fyEzRCC+VQ52VA== X-Received: by 2002:a17:90a:1f83:b0:268:3dc6:f0c5 with SMTP id x3-20020a17090a1f8300b002683dc6f0c5mr25034377pja.0.1691406879873; Mon, 07 Aug 2023 04:14:39 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.14.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:14:39 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v4 22/48] mm: workingset: dynamically allocate the mm-shadow shrinker Date: Mon, 7 Aug 2023 19:09:10 +0800 Message-Id: <20230807110936.21819-23-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: EFDF218001F X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: u85mskdqk71atnzygfzxtf8k7k7hp1op X-HE-Tag: 1691406880-448870 X-HE-Meta: U2FsdGVkX1/7s0Yorq2IQYKM8JB1G/JWFagAdwjaFPHo/Y6dAht8AnmnuufQ5FhlGCPF0B6+IhGLLnNrLqm03tIy5AfwAVZ9x6DW6lZ0ETyBPSM4bchTc5PA9jeFFka7ryPb2q/rAJ7EncYsB6IbB+EuIO0Zp/XZb0Ld0I/lVJN0N9mpGUTfkd1mDdTHMRlkmMMPympuqv4OBOLklRF1gmzewrah9CozyT1iHv8bJrXWzX1pMmagpAHZFcoDYPmsfgJ/SOKsGBng0/9uCY19RbwJnTFnARnSI786GOiBSrQQ/uJ/4a9lQmaEWyaL+lZn+LnsHAEYxhQ9kPYaDvYIbIfFZJvhA26RxFVOOgBiasYRaN/kYOspI2z+FLVIsSCKcJ2hD2gYi6BvHsijeua2oE/ggrwliLYXAV4xoQdq4d2Hj0JOGsgqeBUoePlHas4uWCJCquJRnaKGxzHtO0YKGjoBv6FCwc0ba1PNWmkVbg3ARzJWuWf6joxHkmFqcHLaYl7UEAacDdgqMPwjZhur/dKkY1E6gI1RkVmjYlb8QOXZBoRCILf/vHq50ob28HfwGgCTrS7TxSeL4qDFW3BsjSVzMfZSHX8akDfkv57SjIK3StOh+spvrIS+D7AX4S+MJvzhsVhICrbjb9FBxpnfBi2G9QsrQ7QDheLblWO9LmSSKez1NtMlv5h+P1ZP5kYL3G6p4gDb6VfS4VN4bg9Zk+ykomE4xaBqQZ0JNCmJRM8PmjV43ev0uGPfFPcxqkRJFnonW7Ennq4iVI1xu7/qSqnt8oHobjcaOHnUpLw/NQwRnpxmnwVipLoY0QlxaYlCpMrO4Sf0NPkGAoc3fWUchUfDSiiPLlr7fmGrjOwcOC4ZNMw5yJSw+Dlgadgx+Ra0K877OSsnFJeUc2ffv3tuES0OXrunvVjX2Y9bRk/GNw1wDyNu+2ems3G1BQs9N2Yg5SQV4lmAu5P99tKhgFJ EdSovSat hGjRPqNVcEu1VZ+q7bXJF1+mx7ebJI1ve3HklqOpwyHOVgbhA/hfH/zNt76EVRtjYvxTCw7gc8kRYNGqM9u4r5XZMNbUwaoZVjSVSOSnAQ/QTK71d7NJlL9+I5pYpQloohEYDv4DAudiXmeVz/dv5PAzNvus84r8IaJljOT00q6y0UtbOLN6YtNR6ZIVFgbMe/hFJmRtC6HpAhlCQoIcOT/p7vHBrpgycdrvUm9IH1ZqS/Px3R59Gmff5oiq12bTlCzXq+kZnPID8tfueanp3SQMLlFrt5Mgc/kPsR2eDvGZ2VwXgmSI0DlM6/JxHL0SAWc01P4afPU7Pqh9ONGjcEMFHL/5tj4A8WNdvSzzQM0eo3OmDx+jFabie/jmM66nMwfC0aUYnm0QkQk++NmaiMKOKeVZ952pYsiuD X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Use new APIs to dynamically allocate the mm-shadow shrinker. Signed-off-by: Qi Zheng --- mm/workingset.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/mm/workingset.c b/mm/workingset.c index da58a26d0d4d..3c53138903a7 100644 --- a/mm/workingset.c +++ b/mm/workingset.c @@ -763,13 +763,6 @@ static unsigned long scan_shadow_nodes(struct shrinker *shrinker, NULL); } -static struct shrinker workingset_shadow_shrinker = { - .count_objects = count_shadow_nodes, - .scan_objects = scan_shadow_nodes, - .seeks = 0, /* ->count reports only fully expendable nodes */ - .flags = SHRINKER_NUMA_AWARE | SHRINKER_MEMCG_AWARE, -}; - /* * Our list_lru->lock is IRQ-safe as it nests inside the IRQ-safe * i_pages lock. @@ -778,9 +771,10 @@ static struct lock_class_key shadow_nodes_key; static int __init workingset_init(void) { + struct shrinker *workingset_shadow_shrinker; unsigned int timestamp_bits; unsigned int max_order; - int ret; + int ret = -ENOMEM; BUILD_BUG_ON(BITS_PER_LONG < EVICTION_SHIFT); /* @@ -797,17 +791,24 @@ static int __init workingset_init(void) pr_info("workingset: timestamp_bits=%d max_order=%d bucket_order=%u\n", timestamp_bits, max_order, bucket_order); - ret = prealloc_shrinker(&workingset_shadow_shrinker, "mm-shadow"); - if (ret) + workingset_shadow_shrinker = shrinker_alloc(SHRINKER_NUMA_AWARE | + SHRINKER_MEMCG_AWARE, + "mm-shadow"); + if (!workingset_shadow_shrinker) goto err; + ret = __list_lru_init(&shadow_nodes, true, &shadow_nodes_key, - &workingset_shadow_shrinker); + workingset_shadow_shrinker); if (ret) goto err_list_lru; - register_shrinker_prepared(&workingset_shadow_shrinker); + + workingset_shadow_shrinker->count_objects = count_shadow_nodes; + workingset_shadow_shrinker->scan_objects = scan_shadow_nodes; + + shrinker_register(workingset_shadow_shrinker); return 0; err_list_lru: - free_prealloced_shrinker(&workingset_shadow_shrinker); + shrinker_free(workingset_shadow_shrinker); err: return ret; } From patchwork Mon Aug 7 11:09: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: 13343500 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 568F0C001DF for ; Mon, 7 Aug 2023 11:14:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D30F86B0074; Mon, 7 Aug 2023 07:14:55 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CE0DC8D0003; Mon, 7 Aug 2023 07:14:55 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BD0098D0002; Mon, 7 Aug 2023 07:14:55 -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 ADB1C6B0074 for ; Mon, 7 Aug 2023 07:14:55 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 8D91D8084F for ; Mon, 7 Aug 2023 11:14:55 +0000 (UTC) X-FDA: 81097051350.28.2C57B93 Received: from mail-pg1-f178.google.com (mail-pg1-f178.google.com [209.85.215.178]) by imf07.hostedemail.com (Postfix) with ESMTP id A66794000D for ; Mon, 7 Aug 2023 11:14:53 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=cGZjKVIa; spf=pass (imf07.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.178 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406893; 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=41xmtjHXWdMgLIKiQIRlxv7trVO9ZOyoGRN9dVMIVRc=; b=cmcFMNWU0UIHMA2J/beSZjkWUWLHDTybEaNmFJy0dbKvzH7ol8IALn+BSc9HZLKthF+gPj L1hdFOaHE9owph+O70qLrlG5zSoGcSFq2GFLpZPc3sZCSeENJRNFsmue6105V5oV4gm9NI Zktm/tl/gqdUj97ZOWPkuCSE/PYT4v0= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=cGZjKVIa; spf=pass (imf07.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.178 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406893; a=rsa-sha256; cv=none; b=rrH473kuhfFB6Bt9DUrheSxOwRxZBLmA4skOGpBi1OHUVYAEgfZ0jkaIedD0JJy4CmkZ8U jof3yva+yj9xx7HqkLJU6+AuY4S2i2wSWzhgkCaMXvix5V09CyNiQCLm/pHoxxaX4i4a6g XFISixUCUx709LWHlJr3cuy3/V94K/A= Received: by mail-pg1-f178.google.com with SMTP id 41be03b00d2f7-5643140aa5fso526036a12.0 for ; Mon, 07 Aug 2023 04:14:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406892; x=1692011692; 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=41xmtjHXWdMgLIKiQIRlxv7trVO9ZOyoGRN9dVMIVRc=; b=cGZjKVIao4X1FE56kj8UAePkqWwhSzpoTbmrNAzfkmDpF5Xo4+OZiBUKSePxV9R+oc G1IRJ+7A7isb1SWVoDvsvP7l1acqUKxcQyd+kXEYl5Mu0ooyN6hulkaLMfilFtlIEGla KkeKIkL2nH6oGSLP/+1vanRLPdOnR/fS9enRnBTg7aqB7pi9sxUPyWaMbNSM9pXnXQt9 F+c8OaDe/t6AXuSYKYbMSCyXVTJsX7WpDTPUxY7FQSwi2t5FHO1P7yp1d3ZwE/GiUbMl ZFX6hlQGpFpm61JBWLj396znt7v4WHHVqgWWYpv/xKPpAaGWrpTBuQAyZLcxUgv1USuO WJbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406892; x=1692011692; 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=41xmtjHXWdMgLIKiQIRlxv7trVO9ZOyoGRN9dVMIVRc=; b=VEk45x/EsRkw66p4WAqz8aGg+SiQf4eR7TTJ1IMv4u8U+QYCSu3wFSUSbSGqp1g4xr /t4Y5/plw6ZLBrx5E4RglTL10hSN2YYPz0nBtQPN2D231SO5sJxiYwfKODwuvAf1EhBj +8Fl9H01kK76Nbd5P7v4ufMwLCS9wroZUddT+B/QVWWhrsOGkkrmYd/dbbBHFZgjPGjh oliyd7nQXEp/5xxGBzc3g6iidg7K50gvTGZP1wgEjCJcCqPAw3ZTTeYJ6j7FkxKlc51e wjfjGNwWwy4aiRTl69hFeBiYzfDuE4fRMh/76VaZEZmORLCguOSd/jiAn2hGEZ0FqPew 5HkQ== X-Gm-Message-State: AOJu0YyKeBPPtMoxyKla32gNl0huVXkI6TByKUXGGMit/uVIBSW/7Az+ JEGQb9faWbAHpINJlJ58IZOKCQ== X-Google-Smtp-Source: AGHT+IHGYi4H3eJU6+xZDF9BksA4+I5hA9Bl5pPgRuSaTGIaReiVuXjmY2IFcPrIIfpO+IdhjanDJQ== X-Received: by 2002:a17:90a:9c3:b0:269:41cf:7212 with SMTP id 61-20020a17090a09c300b0026941cf7212mr4963504pjo.4.1691406892562; Mon, 07 Aug 2023 04:14:52 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.14.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:14:52 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 23/48] drm/i915: dynamically allocate the i915_gem_mm shrinker Date: Mon, 7 Aug 2023 19:09:11 +0800 Message-Id: <20230807110936.21819-24-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: A66794000D X-Rspam-User: X-Stat-Signature: sb9oo5jfk58tc5mth7rkgnacasyeupos X-Rspamd-Server: rspam01 X-HE-Tag: 1691406893-684558 X-HE-Meta: U2FsdGVkX1+zzHsx+yby34y3iS5Yqt84gGz2qntIWTi0Ne9v1kPneVN4Y59/CKuejmdtX51EDnzmZrMUA0BtDe2xw4naFmvaPVcTgH2+bYxLXQmAVyayEbgm3bknm/WgUpARLm+1jmyaLN3UbDzPSUvS9lzdZxtvMg3qE07GGXHpoxtTycpxsJos7GBI2w3b7Im7MBa+RQLeIBdyLPpCzMWV6Wte6BC1ck//CXFfgLOcykqG4ujLNEYrCH9+e8J4t1dpurLTtf1EX01hBliYgWjGc41isPfSuYtPLWlTHU898sGyLcWUcjC7zhE4o99tKRHYZYUCcgxECwltvh2p7W6MgZrOSToIcA/Z7uOS4k1eNKjw247xIoiv8GBp/F1LWxjyXdZM/Bf+bmOsRFTeL5CRV1yQHZyClIy+e4YiDRLh59HZEJnPpQVLZ+kIABXy6DT5HGGQRXqa5epo1MdQsluYdCjO3Y7XQdzFHvB1q6p6iZbH7Zkq2dSlDZn32lRce4AgnSwpsloLOxjS9ZA/HmXIrhOqaVO4UGAKfSJXmnbjCWAFfJ0kZVGynkBU7fimunhHqknIRu5Twk6nvMKC2bvjczF760balUyQoobfKRY8GaXYxxaw9Eg+QSGpnP+Yijf040fJBuV+kGQKcs3lRw/G8tgF3//3NbvthNxeGxmXN4+StKqDCaXANnZBCjX4NeCwtEBPCT4a1YPbzS/t1rmPjnjptIHPRMHomq1q1c0jlldF71dEgdFJ8kdqQSqP0n9y/f+N19IAa3by+5b0JsLfUjf9poP8PkCNBALT7NxFfu2fp0YIgSDhc3XGpa8wED/hIZOkkWF+eb6UM112DhxYvDd5OjH0yjqTXFevwXu1+YmGz+UOc2wgRwHa7VY+n+wK2M74P9cGLhJ6WSUTPTi1I+8cApVEe8eMRH9yxWCM74rn3GE8XfH5u+4jZRCXiuBVtTKQD5SZ0rVFNFG uul+d8yo P9PNyWQuaJdZVfJgPxPv6euB8CQSB8B16SwhQHbcrUSNzTXZps8Q1RJ/4IDyrrW6DJbnK3MitwqFEPo/9MaSTTGS1UnPetdssbm7BcvvytbH6beHqw6B7HreqarKItNCXoghfouQMjresAMVSsHULTgeFmh8NpXBaO554nk0tfGUdfkO/ybJvdClhb1RTjwWuN0bbFkn9eSpZcU6ziaXTiTo1bIvbTDi45NriQs6XEkuwhmgPbd2aKWF9sqki6mzw9+q6zWdClJO85Eu6zUQcgw0+HlusvFKC7OTpo1sFYJtEaiUkmaj0dWE6uY9ISW7x8VmxUaRGwRmme0eHOMAKpXsmZH8Q592Zsc2WhqLE/1MEEm6zv179py2SR6arPQgQwlpy92gr6cY7ozlHMztMHI5yfyNUIZm00Z7MEHEed7n4zwD6PfGfZRpU3gHMgTt7wvQR4gWrj45zjdwWWoSzblXZxA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the i915_gem_mm shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct drm_i915_private. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/gpu/drm/i915/gem/i915_gem_shrinker.c | 30 +++++++++++--------- drivers/gpu/drm/i915/i915_drv.h | 2 +- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c b/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c index 214763942aa2..4504eb4f31d5 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c @@ -284,8 +284,7 @@ unsigned long i915_gem_shrink_all(struct drm_i915_private *i915) static unsigned long i915_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) { - struct drm_i915_private *i915 = - container_of(shrinker, struct drm_i915_private, mm.shrinker); + struct drm_i915_private *i915 = shrinker->private_data; unsigned long num_objects; unsigned long count; @@ -302,8 +301,8 @@ i915_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) if (num_objects) { unsigned long avg = 2 * count / num_objects; - i915->mm.shrinker.batch = - max((i915->mm.shrinker.batch + avg) >> 1, + i915->mm.shrinker->batch = + max((i915->mm.shrinker->batch + avg) >> 1, 128ul /* default SHRINK_BATCH */); } @@ -313,8 +312,7 @@ i915_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) static unsigned long i915_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) { - struct drm_i915_private *i915 = - container_of(shrinker, struct drm_i915_private, mm.shrinker); + struct drm_i915_private *i915 = shrinker->private_data; unsigned long freed; sc->nr_scanned = 0; @@ -422,12 +420,18 @@ i915_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr void i915_gem_driver_register__shrinker(struct drm_i915_private *i915) { - i915->mm.shrinker.scan_objects = i915_gem_shrinker_scan; - i915->mm.shrinker.count_objects = i915_gem_shrinker_count; - i915->mm.shrinker.seeks = DEFAULT_SEEKS; - i915->mm.shrinker.batch = 4096; - drm_WARN_ON(&i915->drm, register_shrinker(&i915->mm.shrinker, - "drm-i915_gem")); + i915->mm.shrinker = shrinker_alloc(0, "drm-i915_gem"); + if (!i915->mm.shrinker) { + drm_WARN_ON(&i915->drm, 1); + } else { + i915->mm.shrinker->scan_objects = i915_gem_shrinker_scan; + i915->mm.shrinker->count_objects = i915_gem_shrinker_count; + i915->mm.shrinker->seeks = DEFAULT_SEEKS; + i915->mm.shrinker->batch = 4096; + i915->mm.shrinker->private_data = i915; + + shrinker_register(i915->mm.shrinker); + } i915->mm.oom_notifier.notifier_call = i915_gem_shrinker_oom; drm_WARN_ON(&i915->drm, register_oom_notifier(&i915->mm.oom_notifier)); @@ -443,7 +447,7 @@ void i915_gem_driver_unregister__shrinker(struct drm_i915_private *i915) unregister_vmap_purge_notifier(&i915->mm.vmap_notifier)); drm_WARN_ON(&i915->drm, unregister_oom_notifier(&i915->mm.oom_notifier)); - unregister_shrinker(&i915->mm.shrinker); + shrinker_free(i915->mm.shrinker); } void i915_gem_shrinker_taints_mutex(struct drm_i915_private *i915, diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 682ef2b5c7d5..389e8bf140d7 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -163,7 +163,7 @@ struct i915_gem_mm { struct notifier_block oom_notifier; struct notifier_block vmap_notifier; - struct shrinker shrinker; + struct shrinker *shrinker; #ifdef CONFIG_MMU_NOTIFIER /** From patchwork Mon Aug 7 11:09: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: 13343501 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 23829C04FDF for ; Mon, 7 Aug 2023 11:15:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AA45E6B0078; Mon, 7 Aug 2023 07:15:08 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A494C8D0003; Mon, 7 Aug 2023 07:15:08 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8EA838D0002; Mon, 7 Aug 2023 07:15:08 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 805A06B0078 for ; Mon, 7 Aug 2023 07:15:08 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 4DDDD1C90C3 for ; Mon, 7 Aug 2023 11:15:08 +0000 (UTC) X-FDA: 81097051896.24.FD503D8 Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) by imf25.hostedemail.com (Postfix) with ESMTP id 72242A0005 for ; Mon, 7 Aug 2023 11:15:06 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=a1z4YhZH; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf25.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406906; 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=Tu9w5C30y8MI/napZavPwFZ6nIJBEFlaB1CCEG9BfCw=; b=ayqCxx4bma5/nrNpgl70K++hcafL0XtJslokFMzEKwFt7DjHCx73/8m4foTxhIZBw1re2V FGAQ7nycMUVEVkHIGdBFkETz2jTuDy46zHTM4zulTK9X8YAgG3Sx5psPWCE/jIRvVY8da3 8qmYNrUQM88ysDRC9QZxqUO8UbUKxfE= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=a1z4YhZH; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf25.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406906; a=rsa-sha256; cv=none; b=1xSr3SJo5zOENcNJS32F/7a80LoVuRu5lJvPVAADHK3qE5efVoD4aLJrkGNhNfTO/LfGTf lC2Xe+OV+GkQLIEwyXQdRbyzglxv/P5hZx9GMeATarxcFZNCLqEjIQiA3kLtAtf3YW4ZQw D8owUMX8+0U0+h/2hh/j0Nup7YGRtYs= Received: by mail-pg1-f169.google.com with SMTP id 41be03b00d2f7-56462258cdeso526286a12.1 for ; Mon, 07 Aug 2023 04:15:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406905; x=1692011705; 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=Tu9w5C30y8MI/napZavPwFZ6nIJBEFlaB1CCEG9BfCw=; b=a1z4YhZHvqFoPORrF+lPhY3j/XjC+TmNlvpRZtfYsAqK97Oj+7/3ynKuNED1mH7m1Z 6e06VRzbid9nZWrrMcucwcQQbl3wWoXnyMdc8ZAlXCmo2cCjWRY3iHx4TeC9QHkfs0aM d8RS7FugZHSZy2lCqTJeQn9s7jGIX4/E3wPsaz9+SXihbEJvHaKoo3rxKtwLTkFE7bEU BQoGy+vR8UkI3yNn8zdn5buykCB5rpkHr/BUOTCuwQKNihZsP/3d1GH/pY3/5pZuhseK T4uD+LwrMEDhqbcy3e5z3ztow6Tvzy0xPmsoxdy/BtYqGaCEBDHXu6qpNBRWJ+H1UeBT R1aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406905; x=1692011705; 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=Tu9w5C30y8MI/napZavPwFZ6nIJBEFlaB1CCEG9BfCw=; b=MENx1E5lKV0rbIaZqAhixcvoM6QkIs5kolIJuIxzam456/rWu6F6umsuMM7+PjP9rE /8iip/b2yvSpLIWf6czIxjxeAR0RQgptSMxVFl6gmdXwJKcdy6Y+ebf0wAcvdK9oLQgs wXsJMPTnIxO6sTL4MzxNoPsp2bok6E/taizsXG1W0IOonOKmcxriu45SItDW1GXjUWqW 91TCS/Lv4+OCuIJHqIm5LdVW5WrIy/KLs4cxVF+gBKmTh3f+3uCk5koKxQk3D3B1qDLV Soz2OIzze1FJ8dvlQJBERkynlgEe/bS7YPH8HK+rtxj4FF84jNyOZiLvNyi/h74/o7Uo +DUQ== X-Gm-Message-State: AOJu0YxI9tTRQNbKBtzygsrjGLGNosIVNiQysF26YE3jxAc89UK14Iih OKBb474z/H/q55v3IhbKSvqZdQ== X-Google-Smtp-Source: AGHT+IEpCcigBA86rq7g8CBmKfvn4KajAK33DI3WvO1RysFov39NnZyAmCT+CDGKi31ZOdqYdEGlDQ== X-Received: by 2002:a17:90a:c8d:b0:268:196f:9656 with SMTP id v13-20020a17090a0c8d00b00268196f9656mr12996964pja.1.1691406905372; Mon, 07 Aug 2023 04:15:05 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.14.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:15:04 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 24/48] drm/msm: dynamically allocate the drm-msm_gem shrinker Date: Mon, 7 Aug 2023 19:09:12 +0800 Message-Id: <20230807110936.21819-25-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 72242A0005 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: 16bnbmmd5u7e3d49kq9uhcf9ms6hn1br X-HE-Tag: 1691406906-986596 X-HE-Meta: U2FsdGVkX1/D5nFeA+fYsZyqulVvwfLgXLNezkOt1ZarQ8k6hdg0xLY5kIBWIeZ1VEDLhS1EcGxuBIjZeRl3EK7WY0l9RP+GYvfGIAq7tqwsw55AZIN3F+sfE3VnE09XIrg6cL7L75CXHwquUVwmVTHQVUfWWTy+WOZGLsdmY77qisTXwxyvG3xv+fg8bpvrEy0VOx4UUhKaYSEt5tvTmTsFCiaYn+d8iYaCEW/mjVR9sNBkz1nl6SYF5A5T5ATiwmmWAWikIeTxuC9AqRxkUiEq0CmTI8p7hqfz/pSNdavg7f36URCOSWziYJEfFS7ZICRDct5eaCRKMWqzajD5/sJuSbPdN8sYqxfqHDpVGT5qvCUVmCYWkZDY45HHm+V7vW+t2oTw3gsi7MzHjlQpetMPMjP38x9lTt8wqIaEIwHSogQTvuY/q//ZadQhGIVQe7qGFMUTGYwJgE5vr74OWqktR51EzRg+Ap7bQ0wbCjrcC7oCGYTnnozaEv9LwQH+l7Vn85jPLZeTYuhPM5bl9sskUsEmhxNhg0+rDlx2cDxqeY17PEDCF1rRW9viDGKpJW8q4Pv9v/xl7VtA/olOigsdJFQtQFpm34oJnzbduugOOTYvIZVqTh9DdJWk4ZRB2A2cuNKcjvSIttxw415nrlYDUOSZl3XDQjI3Mmmd0XmxOBsng0Q1uXOemMTK6ICvBx5oNkvYBb/6WlWiKuA/Y3zdKor1slT5Uu0BOUAWOGLUiXsVuISxMrTIvbzd+MpS9m4kzm6F/X/xN8SXb01LVMDrgGj1sMWdVByMM6yyVCkrBhQAvHP4nwIB8cKYbosipNmrpiubmikqzt0xKi194MAOXwbZNECJcuzAP1+Niu9c0+GR5j0Qo43z+sWbbmhhKIR8NePIlpr+9guzJfCWzEMFtHQIHvdr43vB8Q+L7GsBZHg9zeQbTHdeLuZa2bu/nlwb0PH76y6oBUapyWO qKe0u606 VgeOAX1RJDJeA5rQ9O4Pq7mf+rkqGKDhpifPlRa5vw8CYEfFI0Qr19KzU2GCtIsDxrbLgXjqAHJcQSMwZDEKHtMKgbv4GVq/Hh0//jbc7kvaw1aG+Jd0amUXCDoLNr56x/s4YQCxAKjKNr4EedylEZ8o+rsBaBESLCLjqWOqA7e2+Z6V833cS+JE6R3AMUnm+gEvZ92xTu2Wg3oCG06gIITEy8TQUjMZsaP2SV4kQQxb/KwhOLzHGSxQLPFVroNtJjCzT7vRMVOzcm4T5/4evG6+9ab6vRJPK6eaAPhCkdb7zrWJ9Ud94h8w4bUdb4nww9EN75+4Alcnf9Aj+/UNJ5Vh6Zn0VwsA3GeerN7q5riGNAe2VLVeh4/9DVBlSGZ60S6ac1gHPbiv7flLn9SbCXBB4Zuiks8DKL4URcNtOUJZPo6dm58YDiEmlgWhKm6uwlBA5M3TO6gnr9MhsSNFj7ETMMQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the drm-msm_gem shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct msm_drm_private. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/gpu/drm/msm/msm_drv.c | 4 ++- drivers/gpu/drm/msm/msm_drv.h | 4 +-- drivers/gpu/drm/msm/msm_gem_shrinker.c | 34 ++++++++++++++++---------- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c index 4bd028fa7500..7f20249d6071 100644 --- a/drivers/gpu/drm/msm/msm_drv.c +++ b/drivers/gpu/drm/msm/msm_drv.c @@ -462,7 +462,9 @@ static int msm_drm_init(struct device *dev, const struct drm_driver *drv) if (ret) goto err_msm_uninit; - msm_gem_shrinker_init(ddev); + ret = msm_gem_shrinker_init(ddev); + if (ret) + goto err_msm_uninit; if (priv->kms_init) { ret = priv->kms_init(ddev); diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index 02fd6c7d0bb7..e2fc56f161b5 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h @@ -221,7 +221,7 @@ struct msm_drm_private { } vram; struct notifier_block vmap_notifier; - struct shrinker shrinker; + struct shrinker *shrinker; struct drm_atomic_state *pm_state; @@ -283,7 +283,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data, unsigned long msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan); #endif -void msm_gem_shrinker_init(struct drm_device *dev); +int msm_gem_shrinker_init(struct drm_device *dev); void msm_gem_shrinker_cleanup(struct drm_device *dev); struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object *obj); diff --git a/drivers/gpu/drm/msm/msm_gem_shrinker.c b/drivers/gpu/drm/msm/msm_gem_shrinker.c index f38296ad8743..20699993e4f8 100644 --- a/drivers/gpu/drm/msm/msm_gem_shrinker.c +++ b/drivers/gpu/drm/msm/msm_gem_shrinker.c @@ -34,8 +34,7 @@ static bool can_block(struct shrink_control *sc) static unsigned long msm_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) { - struct msm_drm_private *priv = - container_of(shrinker, struct msm_drm_private, shrinker); + struct msm_drm_private *priv = shrinker->private_data; unsigned count = priv->lru.dontneed.count; if (can_swap()) @@ -100,8 +99,7 @@ active_evict(struct drm_gem_object *obj) static unsigned long msm_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) { - struct msm_drm_private *priv = - container_of(shrinker, struct msm_drm_private, shrinker); + struct msm_drm_private *priv = shrinker->private_data; struct { struct drm_gem_lru *lru; bool (*shrink)(struct drm_gem_object *obj); @@ -148,10 +146,11 @@ msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan) struct shrink_control sc = { .nr_to_scan = nr_to_scan, }; - int ret; + unsigned long ret = SHRINK_STOP; fs_reclaim_acquire(GFP_KERNEL); - ret = msm_gem_shrinker_scan(&priv->shrinker, &sc); + if (priv->shrinker) + ret = msm_gem_shrinker_scan(priv->shrinker, &sc); fs_reclaim_release(GFP_KERNEL); return ret; @@ -210,16 +209,25 @@ msm_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr) * * This function registers and sets up the msm shrinker. */ -void msm_gem_shrinker_init(struct drm_device *dev) +int msm_gem_shrinker_init(struct drm_device *dev) { struct msm_drm_private *priv = dev->dev_private; - priv->shrinker.count_objects = msm_gem_shrinker_count; - priv->shrinker.scan_objects = msm_gem_shrinker_scan; - priv->shrinker.seeks = DEFAULT_SEEKS; - WARN_ON(register_shrinker(&priv->shrinker, "drm-msm_gem")); + + priv->shrinker = shrinker_alloc(0, "drm-msm_gem"); + if (!priv->shrinker) + return -ENOMEM; + + priv->shrinker->count_objects = msm_gem_shrinker_count; + priv->shrinker->scan_objects = msm_gem_shrinker_scan; + priv->shrinker->seeks = DEFAULT_SEEKS; + priv->shrinker->private_data = priv; + + shrinker_register(priv->shrinker); priv->vmap_notifier.notifier_call = msm_gem_shrinker_vmap; WARN_ON(register_vmap_purge_notifier(&priv->vmap_notifier)); + + return 0; } /** @@ -232,8 +240,8 @@ void msm_gem_shrinker_cleanup(struct drm_device *dev) { struct msm_drm_private *priv = dev->dev_private; - if (priv->shrinker.nr_deferred) { + if (priv->shrinker) { WARN_ON(unregister_vmap_purge_notifier(&priv->vmap_notifier)); - unregister_shrinker(&priv->shrinker); + shrinker_free(priv->shrinker); } } From patchwork Mon Aug 7 11:09: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: 13343502 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 A1991EB64DD for ; Mon, 7 Aug 2023 11:15:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3E2E18D0002; Mon, 7 Aug 2023 07:15:21 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3929D6B007D; Mon, 7 Aug 2023 07:15:21 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 25ADC8D0002; Mon, 7 Aug 2023 07:15:21 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 19CE06B007B for ; Mon, 7 Aug 2023 07:15:21 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id E079B1A07C1 for ; Mon, 7 Aug 2023 11:15:20 +0000 (UTC) X-FDA: 81097052400.03.6097DD8 Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) by imf06.hostedemail.com (Postfix) with ESMTP id 1297B180026 for ; Mon, 7 Aug 2023 11:15:18 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=i8fsgLYW; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf06.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.47 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406919; 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=vjqO/ZPr/Go39gpx6DVg0WzFepitwPif37hI1XuxbyE=; b=mszRd44tvDBUZHUNDvzKs7/BZCfq4w0eKTllMzGmU6vzM9ftADuHwysmCFnQ4C1WlLyXLN Dspy3ME3kZl5LqCD4KQltcWR8xzqiiH/1+LfxRj2c65wdSS43w4fUb1EKxdmxrqcCtteSK uySMHbrQ9CYIpYQxdPSArHS5GdNRorQ= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=i8fsgLYW; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf06.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.47 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406919; a=rsa-sha256; cv=none; b=Vs7Zxl39nxS0UNWriK8B7UlK40vzHov1JVfkH9tPOvuNr0VIkUXQoEpb96b5GhTHFNBW3w jfBj0iXYVRqYkFjEDRztwlpqKAag76X4wjkDWjsWohSmBxfDz8fOerHRDd4gp8Yhl0naci I55/z2jB+vVeDjK7fTmhepAYqR01AFk= Received: by mail-pj1-f47.google.com with SMTP id 98e67ed59e1d1-2690803a368so590802a91.1 for ; Mon, 07 Aug 2023 04:15:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406918; x=1692011718; 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=vjqO/ZPr/Go39gpx6DVg0WzFepitwPif37hI1XuxbyE=; b=i8fsgLYWfev5scmfQYKpSFDJ9pzF+PwGn1FsDwGvtD1uFjg7eJ0d7Lsv78NIi06CDx vr0tOnonxOw6QKks8GGMVje1yI76Id9YacgwWM/6zDy0zFFyPsap+I+zda83U2carxpx Z18IYbpo7Gm3FdJaGS0K3SM5Q8cb/i1IMPI0QPzFO825A0m0YY6BspmFZAUe5JxSz0YP bkwll+VM7Pw+rOWsuxKvkfM7f/Go/LNsWkdpeQ1rn3o0A1sl0I4JTJinRVhwLnue8wfE xB3XG0FiQERqOk0h4Z7caYUSG1dAOTxeZU3n+iczoygP+1WmuYIouocYZOnqbY8VXZy5 2Thg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406918; x=1692011718; 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=vjqO/ZPr/Go39gpx6DVg0WzFepitwPif37hI1XuxbyE=; b=RFv5teoaNvSWRDyEpcP6lUYg7R1t6Uq/S1KM0Ltt3gwfK/rCFfjBavvwMijGo3fFzc d6XJCtqXI6QP8TDu6H1w1RbAq9DpPH6Y0NW4pf/5xBQidfeton71WU25UA/SzScsgPl2 ojlJMlE5KHIeSCsDyZjE9siQa2zScFTpRCuPjRRnbfFI5LeKt4WVKtAMj4yYcol5DYWy okqr/AMELPBY+91rsocrGkrWqEwIj59i3vFIxNkA+7NuV0hiqtVY9hTZE3f68VNZyeUm +dpJt4aefyZCHyaydq+Ng2ffOzO0vqOog3pQ4FjPaEjSAvGiWlEJIhnWZ9/f7d38PaCl pOcQ== X-Gm-Message-State: ABy/qLZ6MjSoTIMDCYc9Mxfa/XJ1cf5z1EN8HJzXdviNg1wr5v+Zx/sH sVPHK5ysAEjV3ldf+0P+LR9/lA== X-Google-Smtp-Source: APBJJlGmDPkOqvUzYBlbH7T7lkG5BB9heuLk9VUuk/u1AhmT0DHlhAEqotepcvwe4m42tykQjmW6CA== X-Received: by 2002:a17:90a:4104:b0:25c:1ad3:a4a1 with SMTP id u4-20020a17090a410400b0025c1ad3a4a1mr24597319pjf.1.1691406917979; Mon, 07 Aug 2023 04:15:17 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.15.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:15:17 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v4 25/48] drm/panfrost: dynamically allocate the drm-panfrost shrinker Date: Mon, 7 Aug 2023 19:09:13 +0800 Message-Id: <20230807110936.21819-26-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 1297B180026 X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: fae8jgb48gpj5zjcc3p1ddtcgbf3s33n X-HE-Tag: 1691406918-726767 X-HE-Meta: U2FsdGVkX196+NHVlUIZTalGJ4uzIWzdmTwmOuo0+dwqVW5eQTiHnemsHKMaBPsjhm1jOgd88hCWn8c+M3xr9u6mBSYIm8i1Ok0dlMavV/X4ucLr8hcG1CE7cRmekp4wie3748rR5UIPbz/r5EXVewFWvkZnrA9E/7tMlNaaBhnbwtPza6PTOYq58kIIlzpCNh8KD9eYQ/UU9ZDFH4lK4I5BtZQhyTfayGRVaHJN6geER48AKyb90DJOZCdXDCBMrg6JniUFw4/Gh7/hjO25PSxL3INIzs/1YqpSyBcGLcp9uKO1FRjoz3VpcOVmN9XmU2tzUZ07Kb7xUX2kwg360OumFSlnRRkwPw0KV3DB7idXcFJLSNzEpE964rC0NDtTHP7TvYSYuI6bvyKQEUCvd+8wK8v8HDMmq1rPQPNNIlmkGCDuNPjbCGfgIlmgXEwBjRWD6Gw5k2JEFALmNN0+cd+AaYLs3OWS7pQTIZ23MRuI2DNxymwaNwUa5vQOAlBH/h2+fmnjaCox/laKHdVc5/oeClvv1GYPLky+J+cHNxBgW6npkPg/bOQIpDE5lhwO44U3Bht63mXqQJ7hwDKqaW8Nj3sCfldKwQaDoIEF8fEv0piEjX6JDApX0PKjlFabzmswvuYzyd2Q3oacKKGMRZ6gspsKdw77/s69/sCP/aIqowf6wmsixBLjuahJnmHKRvqxecQ+HuxItl2HFAEJkTEMPOzRnrxnDQFYubKmAhBGDu22FGDi/7g3zcOqD/uA6Dl2gw+LB4jH9VnDq9DTi2v0TuuIoSV2Z3GOmv7gPeH2LtT16AsL6L8mYqNoSCEKn40ZlNh+a2JlX8fJ/SzVpC7Mv30mCYjRWZ6w47mOh6GDpqfSQ2k2TyrFzewlUDRdubfY9YjElGLDDXYEzP3+w1Zw2UJbLpAlrz4Ym2bk+yFohyVfXl0LIbFPfQJa6HpR8PbMrE0/BGaJKHAEZ3v rhf4dTqI meOthMFEeNCaY135Y+McSkrVxvR+BAhznDVq2QFOZoyqooOGP+79122v0AtveUoZ8bOqDmJ5Ulzrz9oUuvTFopJdZbf0uLIjJKQsWu6+i/16RZjZPPCcAkpWl6OH9ttZRvILJKJfi9zRE5aAF4OxuLkF79FUR+J3PI1n/aeENDFLG15S7s22dKcBjVnLbFAWcxifaEagqfAjLXvdX3wj465ttwkKp1mRD2N37se+Ok4bUqL7aMA2j3ttAGvCXJw10cEUMEDww8oFr0eyy6eHYgGys3aagg4HW0r3dsdYTMCqtK/myhew5TzV+0xlIjW6SXtca0G9HfBjaniyqRv10icTLON+Bj4nZOgg6dp+W81rQTnVFG4SKI+1ZxP/dIDnHwFJhjvJgFFj5oBXKiREiaIP2cmaZ2hn+qZPqD/WmsdGA5YxG0wZbfGvaBLGpyxUFcVoLUFTC0CEInaxYyrMsY+wSJoHszNnCwW00 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the drm-panfrost shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct panfrost_device. Signed-off-by: Qi Zheng Reviewed-by: Steven Price --- drivers/gpu/drm/panfrost/panfrost_device.h | 2 +- drivers/gpu/drm/panfrost/panfrost_drv.c | 6 +++- drivers/gpu/drm/panfrost/panfrost_gem.h | 2 +- .../gpu/drm/panfrost/panfrost_gem_shrinker.c | 30 +++++++++++-------- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/panfrost/panfrost_device.h index b0126b9fbadc..e667e5689353 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.h +++ b/drivers/gpu/drm/panfrost/panfrost_device.h @@ -118,7 +118,7 @@ struct panfrost_device { struct mutex shrinker_lock; struct list_head shrinker_list; - struct shrinker shrinker; + struct shrinker *shrinker; struct panfrost_devfreq pfdevfreq; }; diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c index a2ab99698ca8..e1d0e3a23757 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -601,10 +601,14 @@ static int panfrost_probe(struct platform_device *pdev) if (err < 0) goto err_out1; - panfrost_gem_shrinker_init(ddev); + err = panfrost_gem_shrinker_init(ddev); + if (err) + goto err_out2; return 0; +err_out2: + drm_dev_unregister(ddev); err_out1: pm_runtime_disable(pfdev->dev); panfrost_device_fini(pfdev); diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panfrost/panfrost_gem.h index ad2877eeeccd..863d2ec8d4f0 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.h +++ b/drivers/gpu/drm/panfrost/panfrost_gem.h @@ -81,7 +81,7 @@ panfrost_gem_mapping_get(struct panfrost_gem_object *bo, void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping); void panfrost_gem_teardown_mappings_locked(struct panfrost_gem_object *bo); -void panfrost_gem_shrinker_init(struct drm_device *dev); +int panfrost_gem_shrinker_init(struct drm_device *dev); void panfrost_gem_shrinker_cleanup(struct drm_device *dev); #endif /* __PANFROST_GEM_H__ */ diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c index 6a71a2555f85..3dfe2b7ccdd9 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c @@ -18,8 +18,7 @@ static unsigned long panfrost_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) { - struct panfrost_device *pfdev = - container_of(shrinker, struct panfrost_device, shrinker); + struct panfrost_device *pfdev = shrinker->private_data; struct drm_gem_shmem_object *shmem; unsigned long count = 0; @@ -65,8 +64,7 @@ static bool panfrost_gem_purge(struct drm_gem_object *obj) static unsigned long panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) { - struct panfrost_device *pfdev = - container_of(shrinker, struct panfrost_device, shrinker); + struct panfrost_device *pfdev = shrinker->private_data; struct drm_gem_shmem_object *shmem, *tmp; unsigned long freed = 0; @@ -97,13 +95,22 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) * * This function registers and sets up the panfrost shrinker. */ -void panfrost_gem_shrinker_init(struct drm_device *dev) +int panfrost_gem_shrinker_init(struct drm_device *dev) { struct panfrost_device *pfdev = dev->dev_private; - pfdev->shrinker.count_objects = panfrost_gem_shrinker_count; - pfdev->shrinker.scan_objects = panfrost_gem_shrinker_scan; - pfdev->shrinker.seeks = DEFAULT_SEEKS; - WARN_ON(register_shrinker(&pfdev->shrinker, "drm-panfrost")); + + pfdev->shrinker = shrinker_alloc(0, "drm-panfrost"); + if (!pfdev->shrinker) + return -ENOMEM; + + pfdev->shrinker->count_objects = panfrost_gem_shrinker_count; + pfdev->shrinker->scan_objects = panfrost_gem_shrinker_scan; + pfdev->shrinker->seeks = DEFAULT_SEEKS; + pfdev->shrinker->private_data = pfdev; + + shrinker_register(pfdev->shrinker); + + return 0; } /** @@ -116,7 +123,6 @@ void panfrost_gem_shrinker_cleanup(struct drm_device *dev) { struct panfrost_device *pfdev = dev->dev_private; - if (pfdev->shrinker.nr_deferred) { - unregister_shrinker(&pfdev->shrinker); - } + if (pfdev->shrinker) + shrinker_free(pfdev->shrinker); } From patchwork Mon Aug 7 11:09: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: 13343503 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 26135EB64DD for ; Mon, 7 Aug 2023 11:15:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B83526B0074; Mon, 7 Aug 2023 07:15:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B34176B0078; Mon, 7 Aug 2023 07:15:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9FBD48D0003; Mon, 7 Aug 2023 07:15:33 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 92B506B0074 for ; Mon, 7 Aug 2023 07:15:33 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 5A075C06F7 for ; Mon, 7 Aug 2023 11:15:33 +0000 (UTC) X-FDA: 81097052946.25.6D61798 Received: from mail-io1-f50.google.com (mail-io1-f50.google.com [209.85.166.50]) by imf28.hostedemail.com (Postfix) with ESMTP id 8BDB3C0014 for ; Mon, 7 Aug 2023 11:15:31 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=RhTNRytl; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf28.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.166.50 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406931; 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=8Rfav5Nxe+GtybemfHCRLQWJ1Wm1Jr8phC3oTaQ6f/s=; b=eVdww3RBb8lP8EAwJ9wb/7/8HFXG+jC5Rs5+T+sbV3aJnATvQaEhLPTJgfBj3O2gT7irmx 1hnMGaxgRvZ6n3M3fgGB7S8P7N6LGcKEpiVQ3bS8eIKHRMNPwkC5K64gt14AiqxbVa7Tq5 myLuKhWrjiULymDGzPcOFGstu2kTF5M= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=RhTNRytl; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf28.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.166.50 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406931; a=rsa-sha256; cv=none; b=YOwOHp3yK/Hi+KXkHbPml3IvwQ21a/yVRbOaHyAkMIXyEAnoxTBzVtcJfL2d+3YtMAcJck JA9fxZ0Q2r23VEP6FhmAYwTAxjxnXl+0Lw+i/GUb7UMBRr1TOJ76nXkPwPFcOiL5kK2V6h GhTKIks9RYF17vpjkH6yQEIYLYTRuRw= Received: by mail-io1-f50.google.com with SMTP id ca18e2360f4ac-77dcff76e35so48629539f.1 for ; Mon, 07 Aug 2023 04:15:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406930; x=1692011730; 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=8Rfav5Nxe+GtybemfHCRLQWJ1Wm1Jr8phC3oTaQ6f/s=; b=RhTNRytlTa20t4Y4eQDAbFdSU2B3iJZ1UGQvbDrNgMxM2lZyl06oD16eY7UnwOu7/z lhfBO1aEb+iaxXm7zjPBY7hPV/HGsazWxYGeChIQ5BZqNHrYc42N83Qpez7ydwipu9EJ dl8ebrZJyA2dXTCWIRLJ5KrUEadehbntFp8yZr0t1mcATZxSPZjFq4Ii0bOe708GiDDw sbmlI1kieYrCzo2Qbsl1zLM+PYAlt09SHmpbPtNn98Tc607U0WsJTYx77KWhrtfG5gTM J9JKFlnKyLN5gCahSDRWLwC9lXHkDS1fNn6g8aIOpZaiEnR0eJG9fj8gxoamq0eWdy8p EjpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406930; x=1692011730; 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=8Rfav5Nxe+GtybemfHCRLQWJ1Wm1Jr8phC3oTaQ6f/s=; b=YayYF/u5BZBUx4Dh6i0i4xU2EHBFYg50RvgSordvFE9YO2k+19qcy5g7tKlH3Wh+GJ vwmVZIh69tA6xms6pOvreSwPk3Y1yzDDrNdgrqGJjHSGygM4JIj3bfJxXcCHP6X/HGfi p9K8X4HFEIN0ZoYHvPpEF2TADg6mNaimBwsUMCcj3WBCMO8aaazLfNkfhW9tgzAH7JhM sVqReYdbeRp7hPInk+H5aZgJ8+8YlDUj9KpXQYC7HcLwKGuWeLpiVBxE+NRHUq50dRSh 3H26OPRjtfkizlbuHvzIPGGyuamei3iE2GeKBefC35OAW17j9jwnWqfrG0CC0Eq0fw9q rf8w== X-Gm-Message-State: AOJu0YwK4dR3De2oQLBdzPpiq8mq/EsBgIxeSd7mrqohuElKXvWOdMyy C8b5AsEPN5GrBP+g+g6GyEVm1w== X-Google-Smtp-Source: AGHT+IFWvaKty2qg3Zp4xukmaRzjC+XhBT002dXZP422OqSqCh0qrR2HTT2eLu1rJ18Y9R5+7t84vA== X-Received: by 2002:a92:6408:0:b0:349:5c87:e712 with SMTP id y8-20020a926408000000b003495c87e712mr5356429ilb.1.1691406930655; Mon, 07 Aug 2023 04:15:30 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.15.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:15:30 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 26/48] dm: dynamically allocate the dm-bufio shrinker Date: Mon, 7 Aug 2023 19:09:14 +0800 Message-Id: <20230807110936.21819-27-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 8BDB3C0014 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: y4fto5q8zebq5k6yaqhn49obypuoqim7 X-HE-Tag: 1691406931-396842 X-HE-Meta: U2FsdGVkX1+wBTUi89g7gzgz8NX3ziV+OR8/edJCZNlyB6Zxr+acmTO1+CIaJ5RzVrct2ZWl4aOufUplEBPaH08+tz4GWKRe2Hpkuc1nqvr1f2FFfm5U8v/bs6Z9P1gkAGvtHqvdHvNuWSYSxtemhNAxFXocCM/VuyUepRCNdy1DDecTqon1wT/Jlnsd3+YBcOhO3skBF9xIZd1oSjKbbc6qmlto6Zy3JL4hec72+AuznyoQ8sz/gEO+5L8KYWXvaIlhZ1jsfnSqAyfjywh6MuGc0LmTbKn3dQ2FTX1w+UMSRQoPNk4Rct+mrZkM+cpbR66ZwqUc0BaxpFyN8oGlndP+pzoMOvr6YMDcmf+ioF4KJpjbzbqJLo3Qw69IpK+9GaBwk920w8peHD9clHmMVLl/lEjepjmUDNGaB2a9luxFahfrk+X5mkoraD+t6+KnMkutaxRzfHMHwZ5qisC9I0hRmcHVBxpQPvfZWL0JjmV3umawwt9OXOYSpkDsqsyEYmwo4JnrLyDaPSGxLo4JJlvFgWi4Nct/MMyqf7zApQjDrLzeTETnk2Rw5gGOQ82NzPNxrhawQBPYovECO28bq2str899Fv1xLshU4cAdWFmcsozRSEB7gOo503jcyHGqXtUgst1vZgu74vBTom6LfAW2Ge1pSYxT8g1IRoSYGeHVQxH+UI8Am4BOsxNBVeZ60oXgO3Por2/JSakRYMnrj8rvkgQMnPNW3JbFh875jtW6ueFhONqqsqIG/u+6fKGEs9jtGq8HIj9zeKXUckAE3b+UGnMj3FetcTDKxm9gftoJ+O592IFl3cRj5QvJMZazCNtvwOV3ykXo1AdC4ywpevQiphUJU+cXTyomv+WoRdKPDnnW/Th/wlaDWp5NfLVHiOKcvbNmMgICcQKmCvqB4+4aJEiKl0DJVDM714zMqCocNyItIcM2FCZFqV9muqE30rRLHy89zSBSyEDVrHJ cFmwadaJ 0IsDmsHWiRXRLVYmD5jicf3TKlJQFu8vkmWbbZuJbMWLmaEsq708EwvD9i/t5rXkfcNnhs5aOFh8ONEEQ34YohmuRpoVXqk0fbLLHV9BWaO4t0309eMBeIpEq8bZ/A1k/jrQh1KVmi8QZOT8cfoL5TqM4YpcbvMu9q/EnEZ6fh4qgIfBKFum4AliGaRtAY4k1/mnE20ng2/UJ5l1zJWHgeBgmfvJsJQzReW1zltBoWothZPCfU4dwyo2sEUgkekd0sfjob1SI11jxfbqgfn2cDXnczVtKg26MGDkvJzDsVc4DrUB0n5N/ycH5/BvGRh7EOk5+psNgJ47Cl+j0EL337hxaIBrnhqMCZB4ckTYyGqE45rBofTnvtHJTY+msqE6nSmdDxivvIeYEgL7MUQEPwu9M2fyL4XOFWhrJ X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the dm-bufio shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct dm_bufio_client. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/md/dm-bufio.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c index bc309e41d074..62eb27639c9b 100644 --- a/drivers/md/dm-bufio.c +++ b/drivers/md/dm-bufio.c @@ -963,7 +963,7 @@ struct dm_bufio_client { sector_t start; - struct shrinker shrinker; + struct shrinker *shrinker; struct work_struct shrink_work; atomic_long_t need_shrink; @@ -2368,7 +2368,7 @@ static unsigned long dm_bufio_shrink_scan(struct shrinker *shrink, struct shrink { struct dm_bufio_client *c; - c = container_of(shrink, struct dm_bufio_client, shrinker); + c = shrink->private_data; atomic_long_add(sc->nr_to_scan, &c->need_shrink); queue_work(dm_bufio_wq, &c->shrink_work); @@ -2377,7 +2377,7 @@ static unsigned long dm_bufio_shrink_scan(struct shrinker *shrink, struct shrink static unsigned long dm_bufio_shrink_count(struct shrinker *shrink, struct shrink_control *sc) { - struct dm_bufio_client *c = container_of(shrink, struct dm_bufio_client, shrinker); + struct dm_bufio_client *c = shrink->private_data; unsigned long count = cache_total(&c->cache); unsigned long retain_target = get_retain_buffers(c); unsigned long queued_for_cleanup = atomic_long_read(&c->need_shrink); @@ -2490,14 +2490,20 @@ struct dm_bufio_client *dm_bufio_client_create(struct block_device *bdev, unsign INIT_WORK(&c->shrink_work, shrink_work); atomic_long_set(&c->need_shrink, 0); - c->shrinker.count_objects = dm_bufio_shrink_count; - c->shrinker.scan_objects = dm_bufio_shrink_scan; - c->shrinker.seeks = 1; - c->shrinker.batch = 0; - r = register_shrinker(&c->shrinker, "dm-bufio:(%u:%u)", - MAJOR(bdev->bd_dev), MINOR(bdev->bd_dev)); - if (r) + c->shrinker = shrinker_alloc(0, "dm-bufio:(%u:%u)", + MAJOR(bdev->bd_dev), MINOR(bdev->bd_dev)); + if (!c->shrinker) { + r = -ENOMEM; goto bad; + } + + c->shrinker->count_objects = dm_bufio_shrink_count; + c->shrinker->scan_objects = dm_bufio_shrink_scan; + c->shrinker->seeks = 1; + c->shrinker->batch = 0; + c->shrinker->private_data = c; + + shrinker_register(c->shrinker); mutex_lock(&dm_bufio_clients_lock); dm_bufio_client_count++; @@ -2537,7 +2543,7 @@ void dm_bufio_client_destroy(struct dm_bufio_client *c) drop_buffers(c); - unregister_shrinker(&c->shrinker); + shrinker_free(c->shrinker); flush_work(&c->shrink_work); mutex_lock(&dm_bufio_clients_lock); From patchwork Mon Aug 7 11:09: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: 13343504 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 3AE3BC04FE2 for ; Mon, 7 Aug 2023 11:15:47 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CBC0A6B0078; Mon, 7 Aug 2023 07:15:46 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C6C406B007B; Mon, 7 Aug 2023 07:15:46 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B357A8D0003; Mon, 7 Aug 2023 07:15:46 -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 A3F956B0078 for ; Mon, 7 Aug 2023 07:15:46 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 774F1B2054 for ; Mon, 7 Aug 2023 11:15:46 +0000 (UTC) X-FDA: 81097053492.12.F9AAC6B Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) by imf12.hostedemail.com (Postfix) with ESMTP id 8430540022 for ; Mon, 7 Aug 2023 11:15:44 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=BoRgxmNU; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf12.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.41 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406944; 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=qDCHIUUJzhdUAQEb2C7RW/Dwv8wB1L4nNlzD+13VK1U=; b=f9VTo8zlFG7VafYwfV2CTSRIUMiPeAu9IUPkyMzMkiejDcTK3vvscmxt4PKJueWj94tn5u NfGzw7EAVbzWScpGmwrkx0xReP9oXLv0GBW5r3YBf9y5D/ZdG8ADFxWoIHFp4NGR2T9e2e 8+AAyXz5ThS3dN2mh4TwE/YyMOKZVGU= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=BoRgxmNU; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf12.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.41 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406944; a=rsa-sha256; cv=none; b=AAfI31M5/XCniirgIPsu4Z/7xCLIJK9YF7ydqic/WHB8p45h/jzs8RoMruCO5ZV8+PL3mP og8xNgqOiy42/qAlkWyd+fb1bL/9YD461jpFXBnWO9OWCMW5RD//BGbBxbduws7nL+/G8D OfX3Lmb+INLBq8cO+T4+Gl/OmmSG09M= Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-268663fb09cso631559a91.0 for ; Mon, 07 Aug 2023 04:15:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406943; x=1692011743; 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=qDCHIUUJzhdUAQEb2C7RW/Dwv8wB1L4nNlzD+13VK1U=; b=BoRgxmNUDtxzbmTK8+NbyH+07KYCd+Dr+oKPPa6V2FtEa17D0GvDQxjGlpnMkhmfxh v95DV47NbKABEXmmquIWadBnc0OBxkEOLW5WkwOTzTf/BxgV/A3wBC3uAtz5110v+hzE Ab8A6lWD76Mq+5DiKmh8yjejLb6xJUC09A5jGZ8oJIUHv3JYqq06sjhL7prumjkiRo3O qB570Dus+/9+aUH0B/0q8kHN6EW2eaOwjl0xOlzT2kA7NW6hf0e/OVGGbp1TjXoLyoWq aNUKJyMjC1sbPHUX4hmJJ6cJvGihC8n4kqK2Irls4fBt7l8WiF7MHJ0n9oTLuTvoH1vN CZ3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406943; x=1692011743; 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=qDCHIUUJzhdUAQEb2C7RW/Dwv8wB1L4nNlzD+13VK1U=; b=GVua8gCPD67SSq+fE3UrQxeUm58uS1NoZ+yopY5j1Capduy/ZThAv4vHeiq/sEAFkd DNf7w3qC0f1RCjoM05QQQ36wbIbsPc+jC1dhJM08DACnAMQmBSOOGMKJz4B7ngy7GQuQ AtyCx5RWtXiAuIZSqLTVmW/Zlu3WxeLf5niLo+AvWioUjbDjduGArj3mdNgsgFSJsflI 51jWLxwdY4C8MQWqiSbXPGMnV2P9REWp3JgXPzSTEfm+5LCMoWH0U6AcQLWEHZg8G3cs IotLpNhO7FNkdmRw/G15SFYlkYfJpTs/dKMjdsJL6XzDE1rbYaixJfgKl6NsM9Lrt9gS 4BLA== X-Gm-Message-State: ABy/qLYrRtsKzV9WorZRsQegdTQE3pz9zyWmrm4AKcFsKt7KEbbZWVeD 4Lv1K+Lx6OrmcdKvZdTK1A+Tnw== X-Google-Smtp-Source: APBJJlEUCHWWWNXSTNLHQrmZRIrp+biqETFoyppqOsbwjUrAqcyZvOjgkWFuVkSEp/5UbdP5i9KhZA== X-Received: by 2002:a17:90a:6c97:b0:263:730b:f568 with SMTP id y23-20020a17090a6c9700b00263730bf568mr23067993pjj.3.1691406943426; Mon, 07 Aug 2023 04:15:43 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.15.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:15:43 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 27/48] dm zoned: dynamically allocate the dm-zoned-meta shrinker Date: Mon, 7 Aug 2023 19:09:15 +0800 Message-Id: <20230807110936.21819-28-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: edt7jpamdsutg11irjafge9pxoeprjfx X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 8430540022 X-HE-Tag: 1691406944-13202 X-HE-Meta: U2FsdGVkX1/nETUwoOjGp/8X+XkKqFGl1fxLzjsV0sI6NXRjTV7fN3BTujD42gWceI6+i6ii/ED0xbfCb5I1OAPSHnsQFfoWRZN6H74XSyvyVBciwIkIXZ7zxu+xujeQKQCABA42I150LG3zsOn9Fb7Ot/P9ucWpK+/3Z/VLGxkbzJmdWXSnh4PCy7f2afDDYHewkDKU9M7gGvr0TT9qHKckGTnlgbX4+e3YUSl+x3ZtkMdjVhekQ7Ge2TQCWoKo0kd75bgWlo9UjSOXLGzuoUfyxccNIPk8lXRuNCZlfE3fqfnZzC3SSTFbefIRJyvjy5bnaKDiJa9kAq1Q07Wk7lsWQqeyuvYRy1Qdpk/jtE+1Dcz/OtNvoQz6DETrUSSMdOqpLrOat85cgZkkMiNionBVMpmyR2Lhts1V+Zo3/83daU0exXTP8teCKFcn0MSgI2ZhbP0Al4LYxwjonMe+VyBuir2krAu6dgZfZRH6xLX2RJkX+E9P2n+GJODdNgrfO2qKJB8gaRbSudhnzUadB6X3gag6B4Gd2neQBZgxFS+1w1+LWPIPiNyuB3mkzU4PO72bzxt7uJ7kdlRMaHWm3nbzz8o18Z7Cohnzt/UB3dNa9utQJEgPIyICpaBJf+AjFiiUPXEvJg/iLQUHSgfpZC4CNqFDIJb4oofVHwrGVtsaUbl2pIe2YYVnNQh4EgfXABBpUIH+z+5YoBuI5c3V1Vkip+jO3uvsNJcl5Ubvf4ytSemWcPSPPT2kIELQuVVrpsnCEQLoKPGMV2v5gYIvpWHrihGEqDW/qxiR5wRMqV8Mniul+b2R4Op0FhI7GmgxxgPnDtaeD/4Wp3mxRnYsxmaegHdJ0gwJL1Dcv4c8MBjJRyf0Bowi6T4wMmc4jwaEqcJl/NwFnHvcVRLRm9iYXx6ZKcKMs+Rwf0BhH7Y+iS4J1FdChnL5f0Qeba9SA1KIKHa+DuLiXq0n7zkVjKx A14q67iz eYuyflcMuo/QsoS9eAY7xOfGU+Yfx8+Um9aXU/vHvZu3ns4t2hCGZvIoiuCp7pehF2E3l2vwHKnxo0yNUA2CkRQEWP0eRVQ/hyAZGw+6tDHF21KJ/9qojVSy3wKdIp0H/jZITuYs+2bbUy00xFoLhakbSyA88QnOKMYp0XIlJjh+s8AkQQUu0Lx1cyOkn3JqZcJrLZhf4IIfPI3r2CFknfzbKYGD1Qt3v8PgHH8dj34y52FwfZn2jOjOvmgXEtYzPOmwIgKMk8S3DIh7ft1HBVqVC/wsJV19+WMzvgW8Ie+QyJ11r1iooMhudrEQYnNOzN1eFDNRikRBnelKWDIAovtcbII+LbXpUB18+jiDL2KSPDig3SYFnSVeRRptXZ4rrM9EO0Y5yI0PbQP9UVTCLDJjLbRwkhx+ztcRq X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the dm-zoned-meta shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct dmz_metadata. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/md/dm-zoned-metadata.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c index 9d3cca8e3dc9..bbb0e69a7908 100644 --- a/drivers/md/dm-zoned-metadata.c +++ b/drivers/md/dm-zoned-metadata.c @@ -187,7 +187,7 @@ struct dmz_metadata { struct rb_root mblk_rbtree; struct list_head mblk_lru_list; struct list_head mblk_dirty_list; - struct shrinker mblk_shrinker; + struct shrinker *mblk_shrinker; /* Zone allocation management */ struct mutex map_lock; @@ -615,7 +615,7 @@ static unsigned long dmz_shrink_mblock_cache(struct dmz_metadata *zmd, static unsigned long dmz_mblock_shrinker_count(struct shrinker *shrink, struct shrink_control *sc) { - struct dmz_metadata *zmd = container_of(shrink, struct dmz_metadata, mblk_shrinker); + struct dmz_metadata *zmd = shrink->private_data; return atomic_read(&zmd->nr_mblks); } @@ -626,7 +626,7 @@ static unsigned long dmz_mblock_shrinker_count(struct shrinker *shrink, static unsigned long dmz_mblock_shrinker_scan(struct shrinker *shrink, struct shrink_control *sc) { - struct dmz_metadata *zmd = container_of(shrink, struct dmz_metadata, mblk_shrinker); + struct dmz_metadata *zmd = shrink->private_data; unsigned long count; spin_lock(&zmd->mblk_lock); @@ -2936,19 +2936,24 @@ int dmz_ctr_metadata(struct dmz_dev *dev, int num_dev, */ zmd->min_nr_mblks = 2 + zmd->nr_map_blocks + zmd->zone_nr_bitmap_blocks * 16; zmd->max_nr_mblks = zmd->min_nr_mblks + 512; - zmd->mblk_shrinker.count_objects = dmz_mblock_shrinker_count; - zmd->mblk_shrinker.scan_objects = dmz_mblock_shrinker_scan; - zmd->mblk_shrinker.seeks = DEFAULT_SEEKS; /* Metadata cache shrinker */ - ret = register_shrinker(&zmd->mblk_shrinker, "dm-zoned-meta:(%u:%u)", - MAJOR(dev->bdev->bd_dev), - MINOR(dev->bdev->bd_dev)); - if (ret) { - dmz_zmd_err(zmd, "Register metadata cache shrinker failed"); + zmd->mblk_shrinker = shrinker_alloc(0, "dm-zoned-meta:(%u:%u)", + MAJOR(dev->bdev->bd_dev), + MINOR(dev->bdev->bd_dev)); + if (!zmd->mblk_shrinker) { + ret = -ENOMEM; + dmz_zmd_err(zmd, "Allocate metadata cache shrinker failed"); goto err; } + zmd->mblk_shrinker->count_objects = dmz_mblock_shrinker_count; + zmd->mblk_shrinker->scan_objects = dmz_mblock_shrinker_scan; + zmd->mblk_shrinker->seeks = DEFAULT_SEEKS; + zmd->mblk_shrinker->private_data = zmd; + + shrinker_register(zmd->mblk_shrinker); + dmz_zmd_info(zmd, "DM-Zoned metadata version %d", zmd->sb_version); for (i = 0; i < zmd->nr_devs; i++) dmz_print_dev(zmd, i); @@ -2995,7 +3000,7 @@ int dmz_ctr_metadata(struct dmz_dev *dev, int num_dev, */ void dmz_dtr_metadata(struct dmz_metadata *zmd) { - unregister_shrinker(&zmd->mblk_shrinker); + shrinker_free(zmd->mblk_shrinker); dmz_cleanup_metadata(zmd); kfree(zmd); } From patchwork Mon Aug 7 11:09: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: 13343505 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 43026C001DB for ; Mon, 7 Aug 2023 11:16:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D598D6B0078; Mon, 7 Aug 2023 07:15:59 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CE1BA6B007D; Mon, 7 Aug 2023 07:15:59 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BD0EF8D0002; Mon, 7 Aug 2023 07:15:59 -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 ADA626B007B for ; Mon, 7 Aug 2023 07:15:59 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 82D6E40978 for ; Mon, 7 Aug 2023 11:15:59 +0000 (UTC) X-FDA: 81097054038.19.B9FEF4F Received: from mail-pg1-f180.google.com (mail-pg1-f180.google.com [209.85.215.180]) by imf21.hostedemail.com (Postfix) with ESMTP id A224C1C0015 for ; Mon, 7 Aug 2023 11:15:57 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=AcIjUBUr; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf21.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.180 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406957; 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=x1yZWn5jqhhXD5GlPCwn7Rqy/lqVgw4fKiPcfLbuAyw=; b=f2HRdIbXL+Nsvx2/d8ht0hjx52XE09QD5zNfVKTjYU2dSZMyZ8mssXmDv7BfJFisSZbC79 nvFqM2vbGIg4CZr6dUrXhzSIfO54nAffPHf1ew1qonrtqtawhwuW1oJdutRFFSg5dhOHou n88zKuv29h0rBI5JBpSpuKvUUg4Kb2g= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=AcIjUBUr; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf21.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.180 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406957; a=rsa-sha256; cv=none; b=s1TX0oiVeWLw51MSjKPpm3Dd8oQLV70jHnvPvvaI4z2oJ7PuwXrzO7lmi/klGRTwAld0Pq Vd8UssAwyRSHTRR3u3Zpm6+n5wFVer6StTyLYNeXCUBp1tztQVKgMJwl+2u3IIit/Q3Rk1 0pLFJlIzeNhCI32W2DfXyVBVxuoCNJc= Received: by mail-pg1-f180.google.com with SMTP id 41be03b00d2f7-55b5a37acb6so362438a12.0 for ; Mon, 07 Aug 2023 04:15:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406956; x=1692011756; 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=x1yZWn5jqhhXD5GlPCwn7Rqy/lqVgw4fKiPcfLbuAyw=; b=AcIjUBUrPWg0UzvX5wfFusVN+dKafMdFSH2GRzDH1OvYCulGxI33IbPnGkf00jzcfm 4A2gtuaaMbbtp6GdbHcVvPsXNRG1dmOn4MOltHcp0lO1ZvH61PsHri+EHSBurlaP3++Q 4Ay4mp+CERsWHNo0m/mtiLtHugH42cl3pUwAYaJdXbMqhQOvO09TYlTgMkhLAJn4/X6x i3g9KcsL+Xka9qDqamdAs09xw8L3SMlDoJ+EPUs9bBOqEWf8CI1XS8GEbt6nh07SwXhK J3x/B99DfdJVBmu0rw2+YUXatA5oQZwE4RwMladVYflBE1HvjLGyTI12ejp5Woqr/FOF LWLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406956; x=1692011756; 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=x1yZWn5jqhhXD5GlPCwn7Rqy/lqVgw4fKiPcfLbuAyw=; b=jFc8AggmXdHb7bmACuuCdEgq0eWKR0e6sXGvRrXpMgIR5YoiBzrSmefZvZnLFCHal0 6CCuoeg8bcaDj6bHLg90Eg5Lmu4ewaLy1iTcScE3iLRykd+IJzAqFIf4e8i/cex+yf/K aydu7R2CJW8uBeOwyZG4XhM/xrS9GbMtu1/iffSzD3uy6kQ8ij1ef+Tj6bryf4YDF0GC RLh94SsuBlqDUPAqZL8k0dZhatj296TGw3fKZ/SU2w08BRc+/HHAt/XsAU0Sb+jBFvXT qEW23Ru0fKjMKUsez1zJE8HMKnx0Eev4wweu9YGc9RXQChAe44Jghvi+0dg+JbJbEIx+ YBSw== X-Gm-Message-State: AOJu0YxTIEIIhP/IH35SCICN5gdmHuqL3mN3SLMkCybcilYLcI8mXatT 7BJWYyATgIw11A7w/ihcFZbpmw== X-Google-Smtp-Source: AGHT+IFmiFe8iRG7X1ND7nrFgfyiRFI3F00Omyk3P1Mi12alvC2oRACqfoDpuN1VIlTmyfJiX72rxw== X-Received: by 2002:a17:90a:2909:b0:269:5bf7:d79c with SMTP id g9-20020a17090a290900b002695bf7d79cmr2218056pjd.1.1691406956537; Mon, 07 Aug 2023 04:15:56 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.15.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:15:55 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 28/48] md/raid5: dynamically allocate the md-raid5 shrinker Date: Mon, 7 Aug 2023 19:09:16 +0800 Message-Id: <20230807110936.21819-29-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: A224C1C0015 X-Stat-Signature: 58jby1k1cdah9t4n1ziqezgqqdhmd3uf X-Rspam-User: X-HE-Tag: 1691406957-719151 X-HE-Meta: U2FsdGVkX19bZfu1NtEgc4j2doSb3r3DSGMMM95m4He8McSqXhqZ/SqzKrb+CbQGjc5B7UFbS0SMOFCXgydXfNCkuxI9wd2laT7pM9LvLm9VRd2vwzAd9XRdMlSkFByTDogoZ9EbtxdF1tbReiQxf5uZHkS9NHYklvHT7q28nITh3H6rzPOv36lDaD91kyByfMGzBaG6oXgFvfBfZ0WUOq0EenRFChg4NlUF24iP3JsMGRHPYY+ET90fiov7RUU/3ugAWgzlyxgDJ5RrcepTrZWILtlsu15Jt/3J7hwujZ0PNI5736G9IQKbvcA7ZyvwEXETaPr4xhZrqVm+jLUcKptv5UTIctD4J9lYumnpL0VrWcOOj4Z1VTary2G71wRNskZ6epuvimh6g9F49YiAfHxGJRDmd8GoS8PVtofLrQbGOIIQ6fVlmXKhV/1wOEdZ2fLxSxEMgFSC/eUvXkbjmaJ2rL0Ag9xPlQGrVexRHwnMAKyu4F84xsDASSi7hTK/VgMDYJtj+5gYFtANr1LJSd0pxDjP7Z7Ty4JeEen9PQy6kIPeOwQIC/p+sH1d7vontfeI2r74C04ZQWbX8Iav8DcS8w7hJPRLJdCwXggZHO9wgnRsm088CbYsWoO7xDqM/vNyWHiS5bP6kpj1LYh0ndyRE2E1CYzAXfHz56lPq6BgkcxBHslYCGx3J2xLwfLhH/60BCsi8ueLpHgMja5nBI9LH5c9n/4c5/yhd7r36miXK7lbrJro1n9ofxDoy2fddL9YQf+439VMsqhWDqzUYKYXN+5cUgH/7gfzSvELOYPD4jEZD024zyv/oSFvJb/gYgzYeNTeNSPRp95RsSoFNHcC7XXg/KGAValPyxWfXKKZXxJQ8t/IPu0KtDMjBs5fMHplY9JKsnhf90H/zE/3x+SMZZqGAfPoXPb6YOzLpxudvszBSua2yfOy7SEtZsM650ATTHBeGJcqwP7dyMJ dJEAKttA Q75/q8bX2VoJ4IHh2oRpyecukWpzJVVWGNbOhPMqosbMTCE1i/48hA8Zx77wWlKHH5wQefcJbdEFk/JBoZyZiz09JNOWnhgfVmlxG60tfep8qZCHs/WPQ77ZY+kuTkKAOkdO4MbX2wPeTXNZd+iQPZpSKl4+mVg+rz9LjoOJmP1qgffK/4axFGgi0xD2TTweCyjGmMfdRTW/+qfj3/IVHefygikRsdttA1rf7SXPl2Et58YL5hZFcfR2o9EF+1jH2MeCCxyICHpUavSRPBAuBy7lxkFsRvedoYKjws/n75dfNlfW1AKMUbo2tIVcOhzznVkvRmCP2fFpyBh+sxox+Xm/oMvsP65XxE6oBYloenW9m+r3JyrMn2jQD6GwI9IjGW1MOExqwUaQ1V33UDo2BIYshRAz86Nge5RDQ X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the md-raid5 shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct r5conf. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/md/raid5.c | 26 +++++++++++++++----------- drivers/md/raid5.h | 2 +- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 32a87193bad7..e284c2f7dbe4 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -7401,7 +7401,7 @@ static void free_conf(struct r5conf *conf) log_exit(conf); - unregister_shrinker(&conf->shrinker); + shrinker_free(conf->shrinker); free_thread_groups(conf); shrink_stripes(conf); raid5_free_percpu(conf); @@ -7449,7 +7449,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)) { @@ -7470,7 +7470,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 */ @@ -7705,18 +7705,22 @@ static struct r5conf *setup_conf(struct mddev *mddev) * it reduces the queue depth and so can hurt throughput. * So set it rather large, scaled by number of devices. */ - conf->shrinker.seeks = DEFAULT_SEEKS * conf->raid_disks * 4; - conf->shrinker.scan_objects = raid5_cache_scan; - conf->shrinker.count_objects = raid5_cache_count; - conf->shrinker.batch = 128; - conf->shrinker.flags = 0; - ret = register_shrinker(&conf->shrinker, "md-raid5:%s", mdname(mddev)); - if (ret) { - pr_warn("md/raid:%s: couldn't register shrinker.\n", + conf->shrinker = shrinker_alloc(0, "md-raid5:%s", mdname(mddev)); + if (!conf->shrinker) { + ret = -ENOMEM; + pr_warn("md/raid:%s: couldn't allocate shrinker.\n", mdname(mddev)); goto abort; } + conf->shrinker->seeks = DEFAULT_SEEKS * conf->raid_disks * 4; + conf->shrinker->scan_objects = raid5_cache_scan; + conf->shrinker->count_objects = raid5_cache_count; + conf->shrinker->batch = 128; + conf->shrinker->private_data = conf; + + shrinker_register(conf->shrinker); + sprintf(pers_name, "raid%d", mddev->new_level); rcu_assign_pointer(conf->thread, md_register_thread(raid5d, mddev, pers_name)); diff --git a/drivers/md/raid5.h b/drivers/md/raid5.h index 97a795979a35..22bea20eccbd 100644 --- a/drivers/md/raid5.h +++ b/drivers/md/raid5.h @@ -670,7 +670,7 @@ struct r5conf { wait_queue_head_t wait_for_stripe; wait_queue_head_t wait_for_overlap; unsigned long cache_state; - struct shrinker shrinker; + struct shrinker *shrinker; int pool_size; /* number of disks in stripeheads in pool */ spinlock_t device_lock; struct disk_info *disks; From patchwork Mon Aug 7 11:09: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: 13343506 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 DE581C001DB for ; Mon, 7 Aug 2023 11:16:12 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8285D6B0074; Mon, 7 Aug 2023 07:16:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7D95C6B007B; Mon, 7 Aug 2023 07:16:12 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6C7488D0002; Mon, 7 Aug 2023 07:16:12 -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 5D2B66B0074 for ; Mon, 7 Aug 2023 07:16:12 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 213BF120860 for ; Mon, 7 Aug 2023 11:16:12 +0000 (UTC) X-FDA: 81097054584.09.E796832 Received: from mail-pj1-f43.google.com (mail-pj1-f43.google.com [209.85.216.43]) by imf08.hostedemail.com (Postfix) with ESMTP id 3560F160020 for ; Mon, 7 Aug 2023 11:16:09 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=PhZgEytb; spf=pass (imf08.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.43 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406970; a=rsa-sha256; cv=none; b=4nbu+bZSB3pnksQGXpzogM/QHC87bMWJd7QvGe95t1l8DFYoAi8FW4sxJRVJO538zCr0wo sT15M61ixctYk3TeO8P4rGGFX7qtv8aHPCru1LNj3dDlU17Fg/zLi2ZW63nEP1+mbDCb55 Oc9rLUej7jRw+D0+yFJ+S0PlNEQX99U= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=PhZgEytb; spf=pass (imf08.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.43 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=1691406970; 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=v2xQZfHf5bNVsT7uWSGQWuu07PHxrGT3T56hFvtqSrg=; b=3+YSEhE+47auTH1nLvZ/jaCBeIkg7yNRe4wTIq3NOMUyn63I9By293OLTGdipIAoShhfZv SoeDEnkWheEdbZfocR+TlhtLW7av81+SLAlPCgISTI8dJhpIV+q49TiBsteBX/V162OLT/ c9+YmHUe81jQM7kpjz9vcetNGCmER40= Received: by mail-pj1-f43.google.com with SMTP id 98e67ed59e1d1-26890669c8eso932190a91.1 for ; Mon, 07 Aug 2023 04:16:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406969; x=1692011769; 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=v2xQZfHf5bNVsT7uWSGQWuu07PHxrGT3T56hFvtqSrg=; b=PhZgEytbdr8CvNBxueya8LJEBJpXwGWT4buounuwMzZgdINLVWVhWlDlK5qgc2p2kt RnCQbjUwWxqdm7J4M7EGc1Ch17V+zcgd4r1Zi/3vO2292nZ9ssUadxFIe0dzINz36EEw HVRix2YnCwrYzOYArOpD9yWwDi1L0lwbZbmCgyeiLVpEO0l9z3l7+yQI3NnEvQZkBYSV kAWt+c/pFJSgV6aTUUqi7ips5HoQ3TEpyq/Sxi9XAc6jQa+5WRv9fo1CMPIL4wKkfI5R cCEylx4Q4qJCTb4YKG/AnxQtLRIB707mPePFz8XepMv7bUxA9w4l0/+xaTDhOuBgbM/U hPfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406969; x=1692011769; 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=v2xQZfHf5bNVsT7uWSGQWuu07PHxrGT3T56hFvtqSrg=; b=UosSG/SxgxatULN4X/cltzGbY0zvOmTc5DALKXW5JKqbilF+0f2XNU/+5nutBrpg4f i7wwFvHLRjn6obPP/HRhfHurjw3R1DGqORoFvxPZ+kTmmOQbSjuMBmBpS9XeIADgBoE0 jD605GRjxFEmjVaOjAs4x1HmJUk889qAR3PELU1uspxmEXqhduuwauEPD0224+iwVMwL j/sFQEEXMjDKnzvOnH6jJOsosShwsKK3XDixVpl9Ea8Jp2qxebitLjpYpCDjkPMEY80B JqozhP5WsS4ds33fPf6fJxm1EeApcGUjGLvY2XwDUsmKTK3qMJewkAn9vyVBydvRCf/y kCLA== X-Gm-Message-State: AOJu0YzACONFC1op/mAv0MIpf4ym4+UdHaypPefgXzGXSqqwmUenEedk 6XGgk/MQbObpazzZG4YqOkqw3g== X-Google-Smtp-Source: AGHT+IFlvQWL2g4YOY+ZhMNeAWWdQSS9yshpdy35E0gAyloBC4LB48Br4CdI402F04hX0eeuRkMt6Q== X-Received: by 2002:a17:90a:c8d:b0:268:196f:9656 with SMTP id v13-20020a17090a0c8d00b00268196f9656mr12999255pja.1.1691406969055; Mon, 07 Aug 2023 04:16:09 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.15.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:16:08 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v4 29/48] bcache: dynamically allocate the md-bcache shrinker Date: Mon, 7 Aug 2023 19:09:17 +0800 Message-Id: <20230807110936.21819-30-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 3560F160020 X-Stat-Signature: gnbz3ra5ymserwaucx51u39ga3iicu7a X-Rspam-User: X-HE-Tag: 1691406969-560406 X-HE-Meta: U2FsdGVkX1+TOfzAN6jGl6n3q2kx5AX3U1KgDiAEUNOO9pjSFmTjPTyTbtT1Mx7fY3t8X3BpQUsH/FzyRJgnDjrXabiqbBXtSSrCTq3hXF9fhFgXJlYadh016PRdf6o3dyyzAkSsYgH259zAcGjnzNihb+r+l43jiNfIEee+7BFoax+VvDRn3C7/7ohbS4ORlPjnTLK96R84/i7sX8YqBlh8PyLM66tIj4N0V+SaSIySndp/+UkzT/sa7vwqeT8+T2wzjOXzjcqPlFSl2HC1F8lzRkntT9tXQO+aBDScqAXNQwUjJ0UX6ql+Ck996DWS3jfGy8o0MDaMWa0ITxc647N+U4AHyzu+ZLgP+C3fRc0pyqMQOzOOA2uA66y/5HeEcoAU2NQXpHTheLXn/s6hg0sGcwDGkvJPS3cPWTSiq4IvT21cvA6jW2IJl9zhhYfFJ+mxo7tDzYCNhojenjSVjOkalRk7t8X09D9PT6uwAzMXNHO6M8X1PEw6zVYpAf/YXnXZqUUHO5ggA01b1gdwQLFht+/xP++0PVEWqambFBbEF7PGHSwh4OxHRVHFoYjekpFdjov/9N81Xw/oMJAtbqEpM6Qn2x+9ClTotrJrli+1C7vaWSG24IxI3krCwB/L/N35eRSvKlN/kJpp8VQlFAn218FiQI/V+L/bbxV36nCpD90/oOmDav3rTZSt9/UH2lPqCNrV/Jj1R7t2YiGPtPRpGih1MHz5RX+96sM4xXL/F1IXXg+SClSs35swDIvlfJ1Z+PBrx6nytxtR7LFcEM4WeSsBpJ2eTZFI4c3qNiP+/NifjYXZmJ7DXKmzDIx7gciCuA63jmv+rYATOdXfBG6BLXePTIRPqgtY4tWagvLr5erOCOTygetYkrd89bBy4RVXytIGwqoH2PKjGSwd8VgQsDIsB8IIjWga6rO1MKqK1zR9sfJz+57n7W7Sw4CuUm83mhxd1yL4ZS+KLdL wK9lwuh1 QEYBx5rjT4MPglZH2+8YKG3GAeilhWWbxifp9cBtfnSCxCZa3ytNVBWY4vBOuNWXMuJCThKSgWahoL2iY4lv5Bp96OH07ALYK7ezof0Ng99KO5E1PYEndWEBZjGv4H/RuFyonh276xGfiyIRCTXZj32BMgFPHDutLTA1sEq9lWOXGx77BTagF3brpPMk3HJ4tLyPrkzpjaDdwkpIGG+KtX3OHEZvARmpNEcw59cSm92ltDcxqMjbF6KNYLq/NJDIWrEpWU/fIdVNeUEJX7LpQnv5EN4yq2ZbTxffMiOKzvLmAazSO/EZofHCLxK0XUBHlKol1XDfy0H0czlX1dU3Do8LKDmNJe9WbtoHXp6U6HlOP5kzq1U6PM+obsIYO0QjB9EEf32ZyeMLUAAeYS2Ucj7yNQXpyF1UqFtOQ X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the md-bcache shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct cache_set. Signed-off-by: Qi Zheng --- drivers/md/bcache/bcache.h | 2 +- drivers/md/bcache/btree.c | 27 ++++++++++++++++----------- drivers/md/bcache/sysfs.c | 3 ++- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/drivers/md/bcache/bcache.h b/drivers/md/bcache/bcache.h index 5a79bb3c272f..c622bc50f81b 100644 --- a/drivers/md/bcache/bcache.h +++ b/drivers/md/bcache/bcache.h @@ -541,7 +541,7 @@ struct cache_set { struct bio_set bio_split; /* For the btree cache */ - struct shrinker shrink; + struct shrinker *shrink; /* For the btree cache and anything allocation related */ struct mutex bucket_lock; diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c index fd121a61f17c..ae5cbb55861f 100644 --- a/drivers/md/bcache/btree.c +++ b/drivers/md/bcache/btree.c @@ -667,7 +667,7 @@ static int mca_reap(struct btree *b, unsigned int min_order, bool flush) static unsigned long bch_mca_scan(struct shrinker *shrink, struct shrink_control *sc) { - struct cache_set *c = container_of(shrink, struct cache_set, shrink); + struct cache_set *c = shrink->private_data; struct btree *b, *t; unsigned long i, nr = sc->nr_to_scan; unsigned long freed = 0; @@ -734,7 +734,7 @@ static unsigned long bch_mca_scan(struct shrinker *shrink, static unsigned long bch_mca_count(struct shrinker *shrink, struct shrink_control *sc) { - struct cache_set *c = container_of(shrink, struct cache_set, shrink); + struct cache_set *c = shrink->private_data; if (c->shrinker_disabled) return 0; @@ -752,8 +752,8 @@ void bch_btree_cache_free(struct cache_set *c) closure_init_stack(&cl); - if (c->shrink.list.next) - unregister_shrinker(&c->shrink); + if (c->shrink) + shrinker_free(c->shrink); mutex_lock(&c->bucket_lock); @@ -828,14 +828,19 @@ int bch_btree_cache_alloc(struct cache_set *c) c->verify_data = NULL; #endif - c->shrink.count_objects = bch_mca_count; - c->shrink.scan_objects = bch_mca_scan; - c->shrink.seeks = 4; - c->shrink.batch = c->btree_pages * 2; + c->shrink = shrinker_alloc(0, "md-bcache:%pU", c->set_uuid); + if (!c->shrink) { + pr_warn("bcache: %s: could not allocate shrinker\n", __func__); + return 0; + } + + c->shrink->count_objects = bch_mca_count; + c->shrink->scan_objects = bch_mca_scan; + c->shrink->seeks = 4; + c->shrink->batch = c->btree_pages * 2; + c->shrink->private_data = c; - if (register_shrinker(&c->shrink, "md-bcache:%pU", c->set_uuid)) - pr_warn("bcache: %s: could not register shrinker\n", - __func__); + shrinker_register(c->shrink); return 0; } diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c index 0e2c1880f60b..45d8af755de6 100644 --- a/drivers/md/bcache/sysfs.c +++ b/drivers/md/bcache/sysfs.c @@ -866,7 +866,8 @@ STORE(__bch_cache_set) sc.gfp_mask = GFP_KERNEL; sc.nr_to_scan = strtoul_or_return(buf); - c->shrink.scan_objects(&c->shrink, &sc); + if (c->shrink) + c->shrink->scan_objects(c->shrink, &sc); } sysfs_strtoul_clamp(congested_read_threshold_us, From patchwork Mon Aug 7 11:09:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343507 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 96488EB64DD for ; Mon, 7 Aug 2023 11:16:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 199506B0078; Mon, 7 Aug 2023 07:16:25 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 149B06B007B; Mon, 7 Aug 2023 07:16:25 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0116C8D0002; Mon, 7 Aug 2023 07:16:24 -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 E77026B0078 for ; Mon, 7 Aug 2023 07:16:24 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id B5D95120279 for ; Mon, 7 Aug 2023 11:16:24 +0000 (UTC) X-FDA: 81097055088.25.BC6415A Received: from mail-pj1-f44.google.com (mail-pj1-f44.google.com [209.85.216.44]) by imf07.hostedemail.com (Postfix) with ESMTP id DE64C40015 for ; Mon, 7 Aug 2023 11:16:22 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=FnWDWj5r; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf07.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.44 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691406982; 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=2n4eBW/y496rw0R30jGqgr9PaTd+TyGx4MFgxeJTY98=; b=5YJPq22COYJcQL6GI21iWCmJxgEsP8KTVVFj1NXEy5SD8T1mp9Z55RHapLzku+b8a6vG7D ROPNN4Wo/6T0AdJPj8pZeG5TSXMe7/VYR1bu7nmWzdzjB5F9VRxTJtlF+ZnYq8gsquLjrM EaAgySdXdcpzUK1V0SiVHiMOAAQm6qw= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=FnWDWj5r; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf07.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.44 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406982; a=rsa-sha256; cv=none; b=SyAiDmlu0HeF9nPbuBy8VLa0a76k0miOjIMuqIynSZcnGQDq1C/gX8Od7G6pFqGwocZTbg QAsFYZpFbR9sWMfCOkpFn/+O7Gb3dN3Mth3b2jaT/kGbvKybN76MkdmwC0nbtXUBCcCzCG lvPLjbGAEOW3O5VfXlw4MSkGq4+0NzY= Received: by mail-pj1-f44.google.com with SMTP id 98e67ed59e1d1-2680edb9767so930837a91.0 for ; Mon, 07 Aug 2023 04:16:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406982; x=1692011782; 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=2n4eBW/y496rw0R30jGqgr9PaTd+TyGx4MFgxeJTY98=; b=FnWDWj5rwzmfFGLsv5BbODxTKmQBAUJaoO/xwiU3xtz9tOZ2AwDnatjsq2ab3ilYeJ iWF7FCg8OfJEY1lx/DDczF41LpfDlE6nRRduQxYHOyP9X3uK7n/ZO9q7VAhZSG3xs95Q OqWz/XghzU3SfaeMxwONvmK/HIjBzGEUASf2JFKX93u1G15t5fAwcHUsocilVhQXHkyU J1tWV2QNpc4U36fDDO4ejlIhucfEnNm2u0Wt3z4T4cfN7wJRCQagqckfUu/vztdG0xlS Buj0JJnUwu7QR/DBMG2ve3ld5n35BuwOJKjICt4m1cvU7hXO7dkM+KrhCZs3CTAs8/64 gYbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406982; x=1692011782; 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=2n4eBW/y496rw0R30jGqgr9PaTd+TyGx4MFgxeJTY98=; b=QwyVIDgIAHIKke0neByWK80Kf002/WrdxTPiOVmZzcdCIpECYHqauvIk/+iBxlVkhB RXZ6x5ueiTCl8U8p9gRexnj95t9rrHbscyJA7V/D1uzDtvR1NO1g80skIgA86Qe31T96 4tvCKNI7uxdOabMkwtKeoXuO64Y7GqsuegR+ZLYPTujb6LjoiEvWY/7E5LguMu9ReGMU 4MDR/TZlrMLA8Jfnz3/j0SD/d4tZhHQrG0wPENtRT3KMFUyM8Ak/mYz/lKFcrdqLyX/O TtRf+2qQN3xE+7ltoX1Na8g8AJZNiDRllGucx0/LcrhHe3yeCJ+KBtspXQFL9REomv/E MDmw== X-Gm-Message-State: ABy/qLbe5KmOEH4X1Sewr8P97dokKXvTLtCjXVe2zh5ngpE57zhKRN6V 2WcoF68HzkGi6L74efwQgW1aGw== X-Google-Smtp-Source: APBJJlGfZoIKy5dlf67l9aDnuNmoWN294jSLFWBRn8Nrl68gwCTSSg7v4NaF4AAHW/6J0zEJitKJCg== X-Received: by 2002:a17:90a:1f83:b0:268:3dc6:f0c5 with SMTP id x3-20020a17090a1f8300b002683dc6f0c5mr25038018pja.0.1691406981820; Mon, 07 Aug 2023 04:16:21 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.16.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:16:21 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 30/48] vmw_balloon: dynamically allocate the vmw-balloon shrinker Date: Mon, 7 Aug 2023 19:09:18 +0800 Message-Id: <20230807110936.21819-31-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: DE64C40015 X-Stat-Signature: 6jzku1w8jws1qjoxwt3gnz5c1hb3nzgi X-Rspam-User: X-HE-Tag: 1691406982-129110 X-HE-Meta: U2FsdGVkX1+mE9hYB/EY9ndzDsUG+dUSsh9EiHEDOXlKuTTOQK/3O8oOQOcM+UFZ/K8AShK+ahJdrWo+Bx3V4rbf6Fp354BmIbfPvJ5tt0FSlGj4o00n5WZ6NIIA3HWfmYTz9Kh6wv3+NBxw7Zlf2mENGq/aT1yBwN/G5Cvmxm8iDDbszVVBvdXirK0DVu9nPnI3YzL8e7uFCDP7x2qN+XBUgRR3yw1zemJnL9rM1p6+ETOCLipBxuTKFkiJabLYmsS1PVmFrzNQEWQbs3mWUQPhsyweff22iNQWS5YDOqk4jdRkwbHXDRuR+zEcPN+Oshv7BXMokt/WOyEsyLzl4fRSylzd9GgB/pWDyX8V3vrCZy8ujvG/Fp4P11+9S8yoAP5fxbDTOOK9tQFX+FrQVl02cWknhXGq2NB1FaKwct7ZrMT/Z8zI2cjM3y0wITaAs0PjLlNPp1qMSgv4US8Pfcm4mXDEr6usfvfUeK6G2l2GT8LYZlOv+sJJ/YUe8wBu/gPjv8dklFWBNPdoosAGZc0ZE4NZ88rtwhwZcI0O+Y/RpOxRghsG/fZIdrm7ZqTagYo/+82OwknH4wzpqKKGVsM24csGvLNBxY5I7on9qAAKaDDRvQOPz0hVY3d5J7JBmptW27Ja07p/laHODmqAytIoQl6jQ0KvtbgB0izN82cy0k21DMP6x0PsYAzTmwU6u3t8YQoqlWU3yS4SJ2shjTgg642yWaXeg8+WyI470LdXs3jEAA2GWDPcjAw6w+GRh02Au/U5Y23A2ysbW4idbZfQt7Bq6mzjlDWzEDVRlEu5VxpEQVo8KM/eYwTP10Y8RP+84Z93DZrXhQQLiQz2Ncdn7AyOoIXNgAi+N2BOQ+5A4Tf6rGU4995M0okQpOk1oofEj5QoLnJhGXUIQxMXS1hlHX69gZ8UWu6UIPbiiCwPTc0SFtyRrL2CpY72MrQydIzboavyg26rgh9+InR 3jblo5FX L7UhGk8KZv3un+fKkdr6LmqPZg9zkhyUdp1KGlMlmyelW4FYKWn9E9ZOqLW5ww4ap5+56NS5OxS8x8W+ZXwk2dccdStZtsphFI1apQe3BCR/8qHIkwjNNvdemF9kWkpj/GcgQxNq9N0lEIcCaxKQesaKN8vlTEDOCvgCAl9RAuJOQvInnzUl516tjLySh31jiBIRcneb/KrgObWNECfB7QqaUipwhnt8YVKh9b0lgv90T/+kJUpGrG33spor+ccTzqwyAp3NiOT70Z+PmamTZZL3TgTt9F8cZoWeYuvob6bcoz8dw391O1IbpHW4sY5+l7GI9jToNELPNavY3csKqDF0BoT6MnzkVLvPe+4WOItegfiYYlgK8F4wALPdKsLEJSLlsk2qtGTlFOV517UubPvyWewvdgcnkXb5/f1aGFXHnD6nMenwun+GXR7tosgefF+VWr1FLcoQnJ4QdFFwuB7hcuQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the vmw-balloon shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct vmballoon. And we can simply exit vmballoon_init() when registering the shrinker fails. So the shrinker_registered indication is redundant, just remove it. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/misc/vmw_balloon.c | 38 ++++++++++++-------------------------- 1 file changed, 12 insertions(+), 26 deletions(-) diff --git a/drivers/misc/vmw_balloon.c b/drivers/misc/vmw_balloon.c index 9ce9b9e0e9b6..ac2cdb6cdf74 100644 --- a/drivers/misc/vmw_balloon.c +++ b/drivers/misc/vmw_balloon.c @@ -380,16 +380,7 @@ struct vmballoon { /** * @shrinker: shrinker interface that is used to avoid over-inflation. */ - struct shrinker shrinker; - - /** - * @shrinker_registered: whether the shrinker was registered. - * - * The shrinker interface does not handle gracefully the removal of - * shrinker that was not registered before. This indication allows to - * simplify the unregistration process. - */ - bool shrinker_registered; + struct shrinker *shrinker; }; static struct vmballoon balloon; @@ -1568,29 +1559,27 @@ static unsigned long vmballoon_shrinker_count(struct shrinker *shrinker, static void vmballoon_unregister_shrinker(struct vmballoon *b) { - if (b->shrinker_registered) - unregister_shrinker(&b->shrinker); - b->shrinker_registered = false; + shrinker_free(b->shrinker); } static int vmballoon_register_shrinker(struct vmballoon *b) { - int r; - /* Do nothing if the shrinker is not enabled */ if (!vmwballoon_shrinker_enable) return 0; - b->shrinker.scan_objects = vmballoon_shrinker_scan; - b->shrinker.count_objects = vmballoon_shrinker_count; - b->shrinker.seeks = DEFAULT_SEEKS; + b->shrinker = shrinker_alloc(0, "vmw-balloon"); + if (!b->shrinker) + return -ENOMEM; - r = register_shrinker(&b->shrinker, "vmw-balloon"); + b->shrinker->scan_objects = vmballoon_shrinker_scan; + b->shrinker->count_objects = vmballoon_shrinker_count; + b->shrinker->seeks = DEFAULT_SEEKS; + b->shrinker->private_data = b; - if (r == 0) - b->shrinker_registered = true; + shrinker_register(b->shrinker); - return r; + return 0; } /* @@ -1883,7 +1872,7 @@ static int __init vmballoon_init(void) error = vmballoon_register_shrinker(&balloon); if (error) - goto fail; + return error; /* * Initialization of compaction must be done after the call to @@ -1905,9 +1894,6 @@ static int __init vmballoon_init(void) vmballoon_debugfs_init(&balloon); return 0; -fail: - vmballoon_unregister_shrinker(&balloon); - return error; } /* From patchwork Mon Aug 7 11:09:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343508 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 6C176EB64DD for ; Mon, 7 Aug 2023 11:16:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0AF176B0074; Mon, 7 Aug 2023 07:16:38 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0603E6B007B; Mon, 7 Aug 2023 07:16:38 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E696E8D0002; Mon, 7 Aug 2023 07:16:37 -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 D7BD06B0074 for ; Mon, 7 Aug 2023 07:16:37 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id AF892160991 for ; Mon, 7 Aug 2023 11:16:37 +0000 (UTC) X-FDA: 81097055634.07.00A28CE Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) by imf14.hostedemail.com (Postfix) with ESMTP id D7254100019 for ; Mon, 7 Aug 2023 11:16:35 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=VutXoqIY; spf=pass (imf14.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.47 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=1691406995; 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=nhs5C6wYTK112tB0Y3rKeCsMBEmGx3fQoCnqZ3HCCLA=; b=h/5EyK2wumlfZYNAwZExirXLiPfOCLV2fDXwxD6jTd9jhXMbrFtBxl8nerH6gbjgJcPMuk ae8gtvhtgiIIURWXxTDBBDf38Cvk9m4fyUs1VndYT9KgvqCqIJue7C4a3KkMjk/5bKFDb2 Q6pX2+oVeOzKjLe8VkJVO+NeplzK/NQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691406995; a=rsa-sha256; cv=none; b=dILLLsGR79idN23ZcdjguYV2sLk0bQ4ad32e0DPScwXmCOLPtGUqKxFe/eZt1Wb7A7va+R f/yFlCqX5XBJa0Uhr9P9+oSZAP8yESa2mT2I5Ap2RiXGPzSjK2KYfxjPbY3lE2Jjo3LJcK pnGS9vZHLqu6gveJpxEilaTKn4vvyAs= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=VutXoqIY; spf=pass (imf14.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.47 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pj1-f47.google.com with SMTP id 98e67ed59e1d1-268f6ba57b5so625129a91.1 for ; Mon, 07 Aug 2023 04:16:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691406994; x=1692011794; 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=nhs5C6wYTK112tB0Y3rKeCsMBEmGx3fQoCnqZ3HCCLA=; b=VutXoqIYPXtXpdtpLBT8bT2urW1s48myud5I+McDwEBCa9rsQtPimBr+YUFUzsT97Y MjfZoj9VTU5fQdJYfMy4Yv9+fpoIS3NFbuatZ84CQCYl8H9eWSOHmEJiwCeaGu2opion jdT+b5LnvY412zroG7MGUq7fLqOt080kwGO2vU4AXzRlkef5xzEfjXjzk3KbTMiuBQm9 X5miROMvoH95e1ANj7PpglZT3M6nqFHwr/l7jXhn2TxbPNm1IYfgnlH3CAsHhpdGLp2V N9EQiXy6+755vxTQtpjB+rXzevwen4FSNuxTXEorqPqLUTQJulIk6PKsXEt+umpl0/zu QYGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691406994; x=1692011794; 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=nhs5C6wYTK112tB0Y3rKeCsMBEmGx3fQoCnqZ3HCCLA=; b=NLYpFBNoksFxuV9kPBh2AZud2W+HkHU2GBlHc8Nv8bg3hxihvCmFumBDy+XHOwEKiK CuGXgv3JsXs25V+REXGc7hL2LzQB7R4MhrmMo6V9oxkL9hu94iir+0PAbAHUX6WGGjKj DZZC6N1kvjK3LcHMrRPB0aiQxDWn9myrWjT/j3s6cgOuqQfY2WdsYost0IXm1TQh0Bxo 2rfg/rkf9ArfjG9XsyJU94ZklLbKWDb0BNCdNnbsFNXaTnpQ3V4VBuUnpe91bX2tV9da IhtH7sHI0B4MsYKwcG+VeSHyh3U5fGaKd9CCa5FwRbs3I1wF+vOQJo4WwW10cvXv2Yb7 qfKw== X-Gm-Message-State: AOJu0YzoCpnTuwZpmmJFO5jZ4M5qoQ5i4Qaap4wNq3lhGtXLIQdm1Czz 7NYlAQmwbEHRR8F62MtuQtsu0A== X-Google-Smtp-Source: AGHT+IF623rMYCfdnVm3rDQUM9QMv5wRA4teIiBc32f8XUPEVkH5VguN8eCSFu0xAaU5upe3gsVL9w== X-Received: by 2002:a17:90a:6701:b0:269:32c7:24dc with SMTP id n1-20020a17090a670100b0026932c724dcmr6035493pjj.0.1691406994765; Mon, 07 Aug 2023 04:16:34 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.16.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:16:34 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 31/48] virtio_balloon: dynamically allocate the virtio-balloon shrinker Date: Mon, 7 Aug 2023 19:09:19 +0800 Message-Id: <20230807110936.21819-32-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: D7254100019 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: 5trjgqd717noybhi19xjckjxuzfuotjf X-HE-Tag: 1691406995-642084 X-HE-Meta: U2FsdGVkX18xE/8XS3mN5PJxIYp4ouZ9MxS9UbC3FQiLIrERUUth8UjjIB+Dw+FAUP0mbQEBs6/IPgbZS2b28VnJZLo0kQp0wouq66cGjvTlDOZubGTy4MW5xtQGlqI72XTYPd+t0yedNHmHCq9PfQHTSm0c5eUL0Tzb1DLJKkilu3kiOzJ1ojf6M0erlTLouV9+PJmjArz5g1S+0hSu5stLRpwsgVt3t9GpIq9H/8EexUJV2y33b2X8r8xKh5YiqlbwUHRorZr0JJ7hNgrGU8PqbuK9iZ04FIDhobt8RTuhYYl4DCf9asM8Y0P1UgYu+SpTIl/ekRavhLJg00QBcx4ap+ePcTaIK+q9Me9U/ny3LC/uqbW2mtoBOvrVGSfxy2vMjF1ef+RbJgneoUzauRKbwUQcN/hLwilLwQ39a4kIBRdC2VSQmgWu0gwaf0gm1sarSRU1Ha8LpgJPuo9qtly+26u0hzLmGW3nr1Rbg2vC8jDiwgf48Nr6MoXuJ1OB+DSUoUrnGY4Ex1w1c1fJ832JUZLdWkykCxyjtqz+afVnTnGOagWQhbjnBlT7NlQJIAmWWtAJceU365En0fl3B2ermQ6lgj+pYXX/C1/wX+pD1Xvy31ZgvatRfQbQaYY4TIf9kPLimwhVV5/hTaAPJNzwBYYOzz3gYtwp5F4+6+CcU+zPpY+f2/h7PWe2hooPqIs9s9OWSm1zH1a0UVajOdNpkIcqqecEMWo67Vz+Fw+awF2u9mj9T3DQwsm/M8rdSCYHhXjpn2QF4DnC/5m1NAmQnS7hi7eTbRXvnUoEe/JTeD6NItPGBov6nKuZ2gYW5zL8EjBhAIHAgZg1lfNOxa/Hb+1bkNmramFyF54j/67mlXLtiEJFTlaw7EpdaHW5Zr7UjCvptrwvIU8wr8TgORvGpQ35QyNMYUkSd+cuLr0og0U2I8tNq0C6NkjWQ5e7hY/UpIlO7aaOCGGJQvm 8HkVE/p2 9CCWxeickw7DTBcJ/SuEYqhBhxVU6cIgzxcVAYmCG+wTPSa5gJkyfoyPrJVdIDxqbIhA/rOIwvxjAFL5djNBYnxi6dlbpqrj3ywjAadyXzxaLopDUn+PxSqTW1XVHhYAJ0nT+J02lwwhqDFvzwN8w98MsHIgfaKOKrrfcGVRoFfyarrPQW5IsKHEhN0CH0KUM6ZP5jRtpfyhne43+O7Pp2yw1j0AnrivKOjqOdr4to+oEIekywf6jky43itASRqAvrDrg3+wKk7/OHqsqIJ6jROTlSAX/nv0uJdRjfjCMKMh2hrfRGpp1h/kVOCHXOtrjle81RY7t7ACtrb6Xb2wYR6YXp8hZm0q9LGNTeLavY4d+azhpUxcwz6PQMYFYa2IEkQDOWN5GaIW4xKz6FGtYYCRgYKtoFJXlQgB5jspFgaHIgR73PlkG5br0qMULH94bJWLcl1qLssQkFQMy2wymeaLxzg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the virtio-balloon shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct virtio_balloon. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- drivers/virtio/virtio_balloon.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c index 5b15936a5214..82e6087073a9 100644 --- a/drivers/virtio/virtio_balloon.c +++ b/drivers/virtio/virtio_balloon.c @@ -111,7 +111,7 @@ struct virtio_balloon { struct virtio_balloon_stat stats[VIRTIO_BALLOON_S_NR]; /* Shrinker to return free pages - VIRTIO_BALLOON_F_FREE_PAGE_HINT */ - struct shrinker shrinker; + struct shrinker *shrinker; /* OOM notifier to deflate on OOM - VIRTIO_BALLOON_F_DEFLATE_ON_OOM */ struct notifier_block oom_nb; @@ -816,8 +816,7 @@ static unsigned long shrink_free_pages(struct virtio_balloon *vb, static unsigned long virtio_balloon_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) { - struct virtio_balloon *vb = container_of(shrinker, - struct virtio_balloon, shrinker); + struct virtio_balloon *vb = shrinker->private_data; return shrink_free_pages(vb, sc->nr_to_scan); } @@ -825,8 +824,7 @@ static unsigned long virtio_balloon_shrinker_scan(struct shrinker *shrinker, static unsigned long virtio_balloon_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) { - struct virtio_balloon *vb = container_of(shrinker, - struct virtio_balloon, shrinker); + struct virtio_balloon *vb = shrinker->private_data; return vb->num_free_page_blocks * VIRTIO_BALLOON_HINT_BLOCK_PAGES; } @@ -847,16 +845,23 @@ static int virtio_balloon_oom_notify(struct notifier_block *nb, static void virtio_balloon_unregister_shrinker(struct virtio_balloon *vb) { - unregister_shrinker(&vb->shrinker); + shrinker_free(vb->shrinker); } static int virtio_balloon_register_shrinker(struct virtio_balloon *vb) { - vb->shrinker.scan_objects = virtio_balloon_shrinker_scan; - vb->shrinker.count_objects = virtio_balloon_shrinker_count; - vb->shrinker.seeks = DEFAULT_SEEKS; + vb->shrinker = shrinker_alloc(0, "virtio-balloon"); + if (!vb->shrinker) + return -ENOMEM; - return register_shrinker(&vb->shrinker, "virtio-balloon"); + vb->shrinker->scan_objects = virtio_balloon_shrinker_scan; + vb->shrinker->count_objects = virtio_balloon_shrinker_count; + vb->shrinker->seeks = DEFAULT_SEEKS; + vb->shrinker->private_data = vb; + + shrinker_register(vb->shrinker); + + return 0; } static int virtballoon_probe(struct virtio_device *vdev) From patchwork Mon Aug 7 11:09:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343509 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 25564EB64DD for ; Mon, 7 Aug 2023 11:16:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B5E256B0078; Mon, 7 Aug 2023 07:16:50 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B0D976B007B; Mon, 7 Aug 2023 07:16:50 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9AE708D0002; Mon, 7 Aug 2023 07:16:50 -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 8E96D6B0078 for ; Mon, 7 Aug 2023 07:16:50 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 58A2D14068F for ; Mon, 7 Aug 2023 11:16:50 +0000 (UTC) X-FDA: 81097056180.06.AC8C1D5 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) by imf15.hostedemail.com (Postfix) with ESMTP id 66D84A0015 for ; Mon, 7 Aug 2023 11:16:48 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=ZpUxkeID; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf15.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.50 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691407008; 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=xVRvDV5EwClRaurogoo7jeCmWiPiam6NNimoVigpYsU=; b=3DdkfiWTgmKwMFiQAavRJRNZLs/kyw6fzkhlFavVes6sZbRmorfjxvoW7kHXBMtgoNsm1A IrE324Bu12EIIeZ/83NkBNNCnaZBxnDAGmDPyoWYX6/44m4NPVMsWTVaVBrKwKtaSW/YCO 56qdWbT7OzV3JqDuGtrf+RnqAxaZu84= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=ZpUxkeID; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf15.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.50 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691407008; a=rsa-sha256; cv=none; b=czQ6qTqDb+4EsJ71TKza659ILEHy48oQIaZ0r3pphVlEGedD4uk6DrgtdVHf97CDslFkzf /LXzWeVDzRGJg5KbXsVvi+CcRPrIW2zMFypg9+BvzBVzpsj2u3qUYjEwndJBX6m+hjHTDh rRGbgPvLjH10lCUfog2tueda9/thTM0= Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-265c94064b8so593092a91.0 for ; Mon, 07 Aug 2023 04:16:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691407007; x=1692011807; 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=xVRvDV5EwClRaurogoo7jeCmWiPiam6NNimoVigpYsU=; b=ZpUxkeIDSk5DebcqgtNkjC2VJVRAtk53SZcSRGK4pcR9GN/+oNusiQFLHhuL5+fDtw 7acmwH5I9QFGztB582Oi6rcT7wKm21cMdk1CbKhqvY9Cmn9xfrqO2dNVGGjerHD5cIRA JQtjfGPdI2ZqgIP1F2QTrXkDr1QXGVfPleR0HQt933rEeM4xbQBZZP8jkCpRscjQOmu/ 9ghKZGvMUY+k4JEeKO1r8tlLUiIWng6Gl6oS+MWXEsfNz6xEM3RIsZmLQbyECe49vE1Q 39HHbQOTTkWnAgiDXPq6I3IGqNg8FapL1nhN+TNChCmLrlL9RKqe8AW+z81Q9HVEEwQe Rdpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691407007; x=1692011807; 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=xVRvDV5EwClRaurogoo7jeCmWiPiam6NNimoVigpYsU=; b=FpQ+S72f3Z6GXEikcwJvZqdElO8+ZmuCAmPESAaMvf3+Zn9Get/EhRFX/sfsb2x38Q 9KLcgIESmSx5l+w74bqIfaRgWWiT3nNP7pOtRuTmqgYtzqNweUbFYKe2NBEC75d2+as0 GG+5slCdqfndtaZ7VGRL4NG0hs6OOD1ptPCQO0T7CHDlFp755EE6FTTN2gHYqlT346Eq A7qLCg5/Fk22DrvBHOD9oIkCZw8j8bdrQ8HvdxNbD2yPRHS+FBbFFKKDGaK03T+skNp0 kvtN7NGZi5eWxArDHQiXWoRXePJ2tz6yOmGpqFdYyDeKTcbFt/ts0xU9KgwOnU/tHyiA HFRg== X-Gm-Message-State: ABy/qLaSi5tJ+6wyHNbbfNxfs0p6J6kdglnEhbXDdi380mybRXpdN8s/ YD5Y2CWZacHl0J7w3Fdf8c+Qww== X-Google-Smtp-Source: APBJJlGBV531Fc0h3gGTcYh+GrDchiBvn4r3DyO1GlE79UVq2Tiyx2gaPN4S9h+mnuBR5bsUMtGvYQ== X-Received: by 2002:a17:90a:ac2:b0:268:f977:848c with SMTP id r2-20020a17090a0ac200b00268f977848cmr15219032pje.2.1691407007341; Mon, 07 Aug 2023 04:16:47 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.16.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:16:47 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 32/48] mbcache: dynamically allocate the mbcache shrinker Date: Mon, 7 Aug 2023 19:09:20 +0800 Message-Id: <20230807110936.21819-33-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: kuaasakpn4r1t9nmeaq6paxa38cdeffr X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 66D84A0015 X-HE-Tag: 1691407008-283378 X-HE-Meta: U2FsdGVkX1/fSpRqprt+AwvD249DgmL4+RsRDiYeWs6WoEwD0+cErpTIpQwmmI8Mqu68AnPFATuyQZEEAelwjvpvcc+UUrzi9UjP2gnAF/kELq9JYo2CvpeOLptdHzUJqWBnBWXHvcq5lbB9Dg6MC/XOagKTKqJi5SlNfR714SbmJ0CJypUPXObm2VI00JTEYYJufhR4d1cBFix0/7QySXzc+xub4mIFIQNaX4if08G7eQXi7qttGfzjDLWP0b1Qc8kaiP+UUOJwT5v6XPcCZnceCkTeu5a0CGB6EbYKeyONgREoIGJ1I++rqP3B8z33I2p/ohOB1Al/FoN+h1vY0786lyaQL4JJ2jvJC8O4izBLGWvqdg2aWTMtDuuiW1J8Ukp+GCtTycOBPjiCtLBkjfKRNC+CQCmS7XZ+GfzyjgPH5awrAco/keCVk1J/bNLnGXv3x5T6vvAi1Cz2nLlFVsZVgDpd9YfvXTi8bHsc/lY3tdD3EBkyI2PIK44PuamEdH6L0TlGo6Unrdvn7CMnxAwlbAHuIUig2e32SsCJ0QneTnJNQ2AYQpDddNCan8e4FwUuPmYHLnblYPOPM7QIAcQ3xEhQ+iRFuWn9G/GE7onu/p4AGite2nP2aXE8DXl5JN1Gknex4NGXJ5CtPUP/s9uW/6jyZv8KBplMLDEBPvhsnw3IadrCEn1P4uAyxkM5uqwTOpCbpCpkPtp+47gBS8252yHiETG1KD2TMQnqV8rMvTuTk/TP7iplbprwQ3N3g4Ds2iw0F65ccS46SuLsuCK63p1ECS4WHcNS8PAn+hagFarOwY/xM5L27gNvjk7jkQBQUR0QVUvgeFFk2VDEQ/DDh4UO8rjxnm9lgtpbqqDQ8e6PcAbqKNC8WxTDf7DEF9zf5IHJGp9GWs6Y/tYQT+p7VBEGpDkx7SC6py7CzZqaGR1z2qsP/I+EevalQO71o1JZoEo2q0cVVlHpruK cTJjF7kQ MVdqGSVmuCG8FKGuX6ePZdiPDejYWMwtA3bCdjaL1muU43weQ4PZgfh96m/b6OiPa22DjVHuCovFaOCKUKodSFWEHtlZYKfK8AtVpAWi0no6Vt+klAB0t1WLmSXy2WinwCDk6sNh7FjTgIA9nF2gSnDB8oOgnirvWfzk8UUbzcwFp5cYNUZzSIuatj3Sn0TztCoqCasUugE2x17IgQ3MRoI1CWEXT7NsUdO2d6oVu8CenTG5d/83bI9v5H8MQl4HPpw1sjgCnmRft56VWNQdgfugNTWrw8D4hNadi55U92lCi3NQ9sU1XgGQEbR9fgKW50bVhVhbqgc0AMu7JeY5Z5dx2ie8KtlfZVmFjdB+gSCuxMt/LGyyfMEVWDQp7UGftyRMyDGE5YY/94hF5E7w7h/ktcqp3qXTUi1JuQUm4RS10xfi1VaLOy1yT7e0fkYD3geGk X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the mbcache shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct mb_cache. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/mbcache.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/fs/mbcache.c b/fs/mbcache.c index 2a4b8b549e93..0d1e24e9a5e3 100644 --- a/fs/mbcache.c +++ b/fs/mbcache.c @@ -37,7 +37,7 @@ struct mb_cache { struct list_head c_list; /* Number of entries in cache */ unsigned long c_entry_count; - struct shrinker c_shrink; + struct shrinker *c_shrink; /* Work for shrinking when the cache has too many entries */ struct work_struct c_shrink_work; }; @@ -293,8 +293,7 @@ EXPORT_SYMBOL(mb_cache_entry_touch); static unsigned long mb_cache_count(struct shrinker *shrink, struct shrink_control *sc) { - struct mb_cache *cache = container_of(shrink, struct mb_cache, - c_shrink); + struct mb_cache *cache = shrink->private_data; return cache->c_entry_count; } @@ -333,8 +332,7 @@ static unsigned long mb_cache_shrink(struct mb_cache *cache, static unsigned long mb_cache_scan(struct shrinker *shrink, struct shrink_control *sc) { - struct mb_cache *cache = container_of(shrink, struct mb_cache, - c_shrink); + struct mb_cache *cache = shrink->private_data; return mb_cache_shrink(cache, sc->nr_to_scan); } @@ -377,15 +375,20 @@ struct mb_cache *mb_cache_create(int bucket_bits) for (i = 0; i < bucket_count; i++) INIT_HLIST_BL_HEAD(&cache->c_hash[i]); - cache->c_shrink.count_objects = mb_cache_count; - cache->c_shrink.scan_objects = mb_cache_scan; - cache->c_shrink.seeks = DEFAULT_SEEKS; - if (register_shrinker(&cache->c_shrink, "mbcache-shrinker")) { + cache->c_shrink = shrinker_alloc(0, "mbcache-shrinker"); + if (!cache->c_shrink) { kfree(cache->c_hash); kfree(cache); goto err_out; } + cache->c_shrink->count_objects = mb_cache_count; + cache->c_shrink->scan_objects = mb_cache_scan; + cache->c_shrink->seeks = DEFAULT_SEEKS; + cache->c_shrink->private_data = cache; + + shrinker_register(cache->c_shrink); + INIT_WORK(&cache->c_shrink_work, mb_cache_shrink_worker); return cache; @@ -406,7 +409,7 @@ void mb_cache_destroy(struct mb_cache *cache) { struct mb_cache_entry *entry, *next; - unregister_shrinker(&cache->c_shrink); + shrinker_free(cache->c_shrink); /* * We don't bother with any locking. Cache must not be used at this From patchwork Mon Aug 7 11:09:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343510 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 166F7C04E69 for ; Mon, 7 Aug 2023 11:17:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8ED116B0074; Mon, 7 Aug 2023 07:17:03 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 89CEB6B007B; Mon, 7 Aug 2023 07:17:03 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 764DD8D0002; Mon, 7 Aug 2023 07:17:03 -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 69B7D6B0074 for ; Mon, 7 Aug 2023 07:17:03 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id F115B40995 for ; Mon, 7 Aug 2023 11:17:02 +0000 (UTC) X-FDA: 81097056684.03.0779248 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) by imf21.hostedemail.com (Postfix) with ESMTP id 19DCD1C000D for ; Mon, 7 Aug 2023 11:17:00 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=l3d3GmRd; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf21.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.48 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691407021; a=rsa-sha256; cv=none; b=8mOTqESGwny3Mb3BYYkV4FC8FvOH0kPIZoE45+nGDRYxwbYy05xPNeCFDNUo/UtPe+6aRq r0lhsrPkRhvMbNxQnXQImZKDT731iYiClrUSl1er9H+8kfc5/hIfh9DmkLe7ip+vPJw0Rg UUUAFDfprrGVczat35OlTYSzOhROl+g= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=l3d3GmRd; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf21.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.48 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691407021; 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=EIUP2Z+Njo4a1BEj4icZmHsMWaHOvZz2gypuwwXx0Do=; b=uD12/A8Yjzyf/Yas7KtWyhiY5bUO/p6X6qPtK2wLOz8bgaZ1jIvb11KFTDCRDsolOvhHaz VvcONLJTpmZ4tSxrw+WQbRyzVCckkQXxnrIM7qsRVptswwHZ5sdQF5SstrqJfE+NmZ8pnR CD+FVyKZPhzfsNZTP47lPgPnCERZgFE= Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-268f6ba57b5so625237a91.1 for ; Mon, 07 Aug 2023 04:17:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691407020; x=1692011820; 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=EIUP2Z+Njo4a1BEj4icZmHsMWaHOvZz2gypuwwXx0Do=; b=l3d3GmRdHVbykswjvj36xLNJU/HkRN0qQPtaCG+8C7U8JyCsrS7Omd1smNfjTVHq8n mmfknLuVWKPue6MQRQdYpG2Cap7GHxCVjCjmXm7SqhyxnTlXTIqiD6Dq4SurElV0d5A7 yjtafWW6aQouIDt5nRUMTSVpj6O1jVRczCF6pjoLUl7iIEpS61wXJNKr8xLD++xEk/hK PFaJuConQXPH9DxAW8LM6Qo0CoTe6tjYe9zN1tPP9wJtycShcCxIvBgENM+8mu3gxPqB pNPWVQXnsLY4dcbOjU72J1n4zmuXrZ5CIb4eDvQ0qGFRUeSI2BGNFxZSx5CdqcSToBir CZSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691407020; x=1692011820; 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=EIUP2Z+Njo4a1BEj4icZmHsMWaHOvZz2gypuwwXx0Do=; b=kNRESQHuSY3Ilkn2L71io5wbruYJ0KIc8Sx1UaksJHLkroPbGmlMypTvaxbwdR+QD6 53+5l1KB7te54PfTnpSTeqfCm9jx0LfiFW+ZuYxRRzMsKM21IvFT3rbqidReXa+s0i7X tToExAAMZUT/Zou9WCzsXPe+rOAHi9b1kezJLb+KSA4HXZWvSi67NRBxAIcIttM4roIw U9s0C2j22NNZLQUAzwS92iNBj3f1fpo4sUWYDnCjOZA46L0NSnPPHG3lmtsPPkRG9Dwv yiKjpK9t/9bJ7Nm6ynKkGJb63vzO6Vz4lXeIWz3G6sBRMZ3TK8E6Wsy90rAPBjX//Mgg I6Ew== X-Gm-Message-State: AOJu0YzYXccAXX+gC5lGr9wCG6MYonPF+zWRDBy2UEsjX1R3iDvmKqcc c8ek7yxSEA6fWE1AFJsf2okYuA== X-Google-Smtp-Source: AGHT+IGL/1gBIk2C+QwkMNr6hEGRZG4q+xpVeUoXNA4D2kibZqrKnrVjY0bqX283iYX9eWQrJAN/xA== X-Received: by 2002:a17:90a:6701:b0:269:32c7:24dc with SMTP id n1-20020a17090a670100b0026932c724dcmr6036278pjj.0.1691407020016; Mon, 07 Aug 2023 04:17:00 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.16.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:16:59 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 33/48] ext4: dynamically allocate the ext4-es shrinker Date: Mon, 7 Aug 2023 19:09:21 +0800 Message-Id: <20230807110936.21819-34-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 19DCD1C000D X-Stat-Signature: sof4risjeggasduzjwj843qxtnbouzmx X-HE-Tag: 1691407020-209576 X-HE-Meta: U2FsdGVkX18hYut+WHmZYrx3kBCQPzm9C4C3O4N02LTNxdHTRbnF7eo8G04ujk2BhXt5k1bsW4b8+5Xi2t3RkKc9kIuX3738MR+/DAq8ROTKr6IAvUPTEh87tn6m05L1t+5WJ34foVo495se6TZ+4+2h71i5pggVSjNQt+hFn88JhcPArR4lGvbML09Mm4SWJXEjm3nFP0rZlYBQUAImGGxE9l1uo+ogw38ddJJq/nNdx8R54dkLvRb00m3C5GNdTpTmIjGaHjvgsT+dunQELB+Qok59qpqjxqEJb9u6cY2tr3LbzI7zDWgrC8bEgb2EP0e4Azc8jFSfzzntSPtfQjjJDDSLsHvvf+UH4fDUvHFblvV7ErBYF/UYpWKt1zG8sGvr1EutzbS97783Nf2MgosZFyUpIkQjm3nayZYScERrr65Uw40aeSP7SQ6EEz7vAmKQfst588vOuM4ksFXE7zYZl9vAEcKZqhdmo6uESvcMNA9UFv69raTSH8O3b1MeR91we5mv+s8tPTIkAoB/TW8QO8W9lLBQi8ZIIgoGrzvOiL0SdzRVpwQ2K2p/7gNJ2SWRfH8aL5gr++lky4tJ6wib4S40cVvH7575T53oFvY0PDvK/Lk9XLrS8uzqjLvR7tSaQeWRIrVq+THAEX2NGdfxHWaVdANe2shgZFKbY7zd3nC+3MHSvDWZvS4UPceMHhW2u7c4ja3AUeqM1Q5TjNKKrJ3Liv0SzZxh3/udoSukCkxNog7x1xW4W1XzcCsK01zMq9z4QbfvkyEH3tipHeoFhBqxg1UN2nkbdbBSdamlEr0r5MhZ3jy+rz+PHrj6hrs1yrZ1SHgIO1VywIWpi20FWLrNfQbIKpHGyqDBx0uXEyzv4UQNP7gWsPSeADhWvj8cZuC+mvTW5qEWzEXBqfkT0AvhQWJlWMlbnfxi/XmfkyHVKozv2xpYdFa9vbehKQyI2W37WLHkQF9TESD WfVIeAtt t/KlFqrhzEojpuPli17Wo8G4zQpH37Vwx8wmshum3XSCBHfpkRBVg1/BqCPHESeawWMsz5tAExgQ3rv6aDDXjYldbpWqX64/fomGa2LvuY8+LcK3TP/8RrRg1GKvEV/fbM3E9hVUBChX0Dsu06Z4Id/8F88KU2PnvpRe2YNHvA+WIi2zavCPKinU0WGmwJJZ1YtoiYakSNP2PkSkwWzMW82yBZloxv9x8drEADCxWMJV4a43hnSYrmf6vdhZPKid9sQIXoNOyuJ2nqGSuGzhU7MrTC458m4o1kFCgVSw93tqtb3BRZmthrZ/D7qQ/SbVI23OG1APs7gh18ZMSoEU6h85NIH+ogCzwEd9A+1lxwIO5I1KNi1jQAuE3DTirv5g1dBUMjCdPQWaWOCEE1JCYo+BrXq/wxsiJnYvr X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the ext4-es shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct ext4_sb_info. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/ext4/ext4.h | 2 +- fs/ext4/extents_status.c | 24 ++++++++++++++---------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 481491e892df..48baf03eb1a6 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -1657,7 +1657,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..0532a81a7669 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,13 +1689,18 @@ int ext4_es_register_shrinker(struct ext4_sb_info *sbi) if (err) goto err3; - sbi->s_es_shrinker.scan_objects = ext4_es_scan; - sbi->s_es_shrinker.count_objects = ext4_es_count; - sbi->s_es_shrinker.seeks = DEFAULT_SEEKS; - err = register_shrinker(&sbi->s_es_shrinker, "ext4-es:%s", - sbi->s_sb->s_id); - if (err) + sbi->s_es_shrinker = shrinker_alloc(0, "ext4-es:%s", sbi->s_sb->s_id); + if (!sbi->s_es_shrinker) { + err = -ENOMEM; goto err4; + } + + sbi->s_es_shrinker->scan_objects = ext4_es_scan; + sbi->s_es_shrinker->count_objects = ext4_es_count; + sbi->s_es_shrinker->seeks = DEFAULT_SEEKS; + sbi->s_es_shrinker->private_data = sbi; + + shrinker_register(sbi->s_es_shrinker); return 0; err4: @@ -1716,7 +1720,7 @@ void ext4_es_unregister_shrinker(struct ext4_sb_info *sbi) percpu_counter_destroy(&sbi->s_es_stats.es_stats_cache_misses); percpu_counter_destroy(&sbi->s_es_stats.es_stats_all_cnt); percpu_counter_destroy(&sbi->s_es_stats.es_stats_shk_cnt); - unregister_shrinker(&sbi->s_es_shrinker); + shrinker_free(sbi->s_es_shrinker); } /* From patchwork Mon Aug 7 11:09:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343511 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 94853EB64DD for ; Mon, 7 Aug 2023 11:17:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 321F96B0074; Mon, 7 Aug 2023 07:17:16 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2F7F56B007B; Mon, 7 Aug 2023 07:17:16 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1E6C18D0002; Mon, 7 Aug 2023 07:17:16 -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 0EDFB6B0074 for ; Mon, 7 Aug 2023 07:17:16 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id D962A140486 for ; Mon, 7 Aug 2023 11:17:15 +0000 (UTC) X-FDA: 81097057230.12.E349466 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) by imf23.hostedemail.com (Postfix) with ESMTP id 0E006140005 for ; Mon, 7 Aug 2023 11:17:13 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=IF5FMf6v; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf23.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.50 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691407034; a=rsa-sha256; cv=none; b=WGjr73Ut6Yf+8CiUDR0XNutYKKYg5iAvkN+8Ma8HxwgMSFWhQlP6E+oDvV/QecgWBkZwZE cIDxGK5OJTOuHu34V3ISNCOSTIe0XMcbH6tgCHfF2SuLaveOQgEvyi8E9ISTNa7gwM/cJy jqe8AUN9riCd5s4lhayuZP17pmssNiA= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=IF5FMf6v; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf23.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.50 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691407034; 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=48waxWZGd1WUnLYaDrTSxvJywKXLcopaiUkWgt7j5Rg=; b=vM2Z4rwYWwGig33w19yUIR3sI7fNIjF7YDpm1CkLsXYdaCKpSU22XJr8w8ain8nYHrmlIT Zw3M+zgMI2u+V08K3avWK8r2sL6rvMhJgV8k85kPeghxPZNw6mCN8Yy0eqo7rAxq3SzCF8 qirko70DO480XGSdWu3yS6lohJpkSU0= Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-2690803a368so591204a91.1 for ; Mon, 07 Aug 2023 04:17:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691407033; x=1692011833; 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=48waxWZGd1WUnLYaDrTSxvJywKXLcopaiUkWgt7j5Rg=; b=IF5FMf6vfUKWXKquwpCQEDXlMw21VPTq0vQh30bzDQAe43NcnPpm7+3Lc8a3CIJRpA 3D5+DTGp/GVVz7K0qnRkJHp3ElWCuX/V5mJLE2CMMPVLrH696jMkWhUZV5knoMheDkE7 LNxcBFVMjsAliYNw3/qsjltVAMCexO3SFZuMneEunxblALcqU49wFlwUCGkH4chcrTm+ Mu+nFly5hda7TWhSn6s/LaVQ5cZernQQxFJBPj8H2QEyQDfBEaIAKgcH8kpChkzLsY8n h49b3nM+GUF7t0uuu7NHoFu5rdBXy5wqqQ2n0YE+hiJT0Y6kOYKfZmJPFvsrDsGv9xrG NHZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691407033; x=1692011833; 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=48waxWZGd1WUnLYaDrTSxvJywKXLcopaiUkWgt7j5Rg=; b=T2Qrj/qqgm3KYRjZD6gBBoKv5SYkWBcxKgHdLlbGWZqlm89RUS2SDSnJdhn/WyUZHB Dh5yhlY15KrHzqwdpINJ5h54lCwy5MbDeEXfKX7dJHX+13/HWBi4InbKquLl9qdP/n4P Sl87pack6jFUGilHh7swqbsmmHk9fuN0pMdPzLSm7UNod3wx1fsjz0Cy/9niRRByV2Bz hRymullbFsOnBR0Lfo3TlnPGxoQIxFNbwWnRM2GsKxZFYf4gl0+96RzFo1KmffIibhiu dabWvRGkvGkW9Rc/GXiCF6ldto54ZAcLdErmZiT0AVgGzrnGIdnutDbP0zQZPhT3DIgm WQFg== X-Gm-Message-State: ABy/qLYQ9DKnevaaLviM21Bx0Ou7tRsqRIpL0+CZGHM2chR950Kfu3FT oU5YWbiQULLc9pDRSN+s2n/F+w== X-Google-Smtp-Source: APBJJlHbn14CvO5TR8loNSEkHloCg3xrbjPIwtza5v7TtzUnsc09AI3fvHMVCyYd3DTpdbD1pcNBzw== X-Received: by 2002:a17:90a:4104:b0:25c:1ad3:a4a1 with SMTP id u4-20020a17090a410400b0025c1ad3a4a1mr24600948pjf.1.1691407032801; Mon, 07 Aug 2023 04:17:12 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.17.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:17:12 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 34/48] jbd2,ext4: dynamically allocate the jbd2-journal shrinker Date: Mon, 7 Aug 2023 19:09:22 +0800 Message-Id: <20230807110936.21819-35-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 0E006140005 X-Stat-Signature: th631eueco9hn7msmn9qge3gfys71335 X-HE-Tag: 1691407033-771350 X-HE-Meta: U2FsdGVkX1+3byK8tHC5FZXvDoAikkt4MnCr+CUJizKNSahb+6j44Lo+wghUT6H6CSpiL1xc4xVKLI8i0IkswB3FDhSCyYlh/cSwabZw4faNQSLcXoa2o4JSPX+FtvoAeurfkB1kzr2yTXE9epd2NRdqz0D0k0hCq1eHXYG9xFptS4q6KRGq2yURG+fgP22h34hBvtjdvJ1ahPF2km2gnb+uj3avUNpDZYZ40EZAWRNpqBnecWvm2GqR2YnfV8EIYRBFfk7Gd3XUF6boYfM5CaHmLWwmSi17kHlIj2magNrxckmLq5NYrwK4iF/3RU2kvihFRV+OvyLHrAKEEE65ALKHekIo+gRymJnXKhMroBTuoWUgF11iaVINTLWIjlZKjakCRdCMZvUr7LGBgiqRccVbTw8Pawv+9FitZQ6NrMVxCFMvxyotRTi7VMgbiI3704iRVuIv4y0vkzcvuGuETCZz3Miel4WY273N3Js5fwLGsHWcegwc4hkMd7Usbl64KCdAFSPM1A3ammV9YX9TI6wSYyLndHIzXRJpUFDRsqe4AkMCavAs5pkyqnTw25A1kb6vwtKdV6CeOKG4GVgZFFJ64Xz2cRJZdVe5rL2baU/1MUveqa5sYYZ5r1PM61La9HQwBo0qpqYp1QPPVhYcNB7vub11+LEvNOGqoux9n/9HbkQQF+M7tCPxdMYTDgdpFNVRm6O3B0Pr2JRVtqzJZZK5UZVAvw9D7gzxw4Vl3s7n7eYKCjLiPWMNmrAb+A8f6U6qPGEp9xG1EWIraKFl2QYVous9Ef5rCVh7l+He6PyvHmnZmofq1lQFFgrVl9fOMsex4IeYCNY35DHoDcoW4fQexPiOWKDkmUC1AOJUy2ysg0W2ZBP+X9rCWoMWjgVGobXzM2s6hlXF/ewHTjLPqHAPAOynlrFtgzoIil97x8qw/xgpBZe53gTtl0E6Hodmo0HZpPQlRvxKRG7NEht 626pb1rC jrMedwU+9sD2zAUiFCKwXrQDzhcZ9c15v95yq/cyrwukQ6J7VA/qa2+fWlumzqFQJEh0obdRRqrCnbxOElkNE3Pn+BvRCogYRWIGqLMTenCnCxAMbRFdTzQz0OEOLlbSLdAHSJry8ydjDtDkmcduQvDTUed+CqO24rx+crex9q5qW5Rr20jGAbklc24R1AkM9VZGGn8q2Y51aUI9liauW97b+C4pE+ZYF5BTHzmJ79GD7SVCzJU4bApP9t/BsL16DU9nXYYG7mMR2cy2y8INydaDY46KbELu9k6OFnIxUWmyKs52JeQLPUCQxGbxG1TFCsQS5rnz6BUX3WCW+uzXuV0kFLOPULkvlQwS/fI4ZbW3vjtXtIzLrJDoWW/jfWv848kLVLh65SHyfabR2pFNLey1bgsjd8VLxkAkx X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the jbd2-journal shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct journal_s. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/jbd2/journal.c | 27 +++++++++++++++++---------- include/linux/jbd2.h | 2 +- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c index 1b5a45ab62b0..4c421da03fee 100644 --- a/fs/jbd2/journal.c +++ b/fs/jbd2/journal.c @@ -1298,7 +1298,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; @@ -1324,7 +1324,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); @@ -1412,19 +1412,26 @@ static journal_t *journal_init_common(struct block_device *bdev, journal->j_superblock = (journal_superblock_t *)bh->b_data; journal->j_shrink_transaction = NULL; - journal->j_shrinker.scan_objects = jbd2_journal_shrink_scan; - journal->j_shrinker.count_objects = jbd2_journal_shrink_count; - journal->j_shrinker.seeks = DEFAULT_SEEKS; - journal->j_shrinker.batch = journal->j_max_transaction_buffers; if (percpu_counter_init(&journal->j_checkpoint_jh_count, 0, GFP_KERNEL)) goto err_cleanup; - if (register_shrinker(&journal->j_shrinker, "jbd2-journal:(%u:%u)", - MAJOR(bdev->bd_dev), MINOR(bdev->bd_dev))) { + journal->j_shrinker = shrinker_alloc(0, "jbd2-journal:(%u:%u)", + MAJOR(bdev->bd_dev), + MINOR(bdev->bd_dev)); + if (!journal->j_shrinker) { percpu_counter_destroy(&journal->j_checkpoint_jh_count); goto err_cleanup; } + + journal->j_shrinker->scan_objects = jbd2_journal_shrink_scan; + journal->j_shrinker->count_objects = jbd2_journal_shrink_count; + journal->j_shrinker->seeks = DEFAULT_SEEKS; + journal->j_shrinker->batch = journal->j_max_transaction_buffers; + journal->j_shrinker->private_data = journal; + + shrinker_register(journal->j_shrinker); + return journal; err_cleanup: @@ -2187,9 +2194,9 @@ int jbd2_journal_destroy(journal_t *journal) brelse(journal->j_sb_buffer); } - if (journal->j_shrinker.flags & SHRINKER_REGISTERED) { + if (journal->j_shrinker) { percpu_counter_destroy(&journal->j_checkpoint_jh_count); - unregister_shrinker(&journal->j_shrinker); + shrinker_free(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: From patchwork Mon Aug 7 11:09:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343512 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 12D83C001DF for ; Mon, 7 Aug 2023 11:17:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AC3FB6B007D; Mon, 7 Aug 2023 07:17:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A72E88D0003; Mon, 7 Aug 2023 07:17:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 912888D0002; Mon, 7 Aug 2023 07:17:29 -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 7B0896B007D for ; Mon, 7 Aug 2023 07:17:29 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id E858CA0A30 for ; Mon, 7 Aug 2023 11:17:28 +0000 (UTC) X-FDA: 81097057776.08.C9E29E0 Received: from mail-pg1-f171.google.com (mail-pg1-f171.google.com [209.85.215.171]) by imf19.hostedemail.com (Postfix) with ESMTP id 203FF1A000D for ; Mon, 7 Aug 2023 11:17:26 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=SddB5W7T; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf19.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.171 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691407047; 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=v5vYJ8kE3O6JXdLxdEEyUgUMjz4KJqSKKSB151wqkNo=; b=UxVJonGA2pXPiJxiyYCdEeodMe4PHCyJXb0KK7y+WYtIKF0CmgZ1ZD3l+0awEH4L/ShjEO Ltbcc1j+72XNnlHrAknQjYJbs+gVPEOCgNYfk4NAznsv1XRlHR6reaB8KwvrWJzM2IgqBe fZU/UDCoQAHqUKS5K5FysARbGI2YG90= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=SddB5W7T; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf19.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.171 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691407047; a=rsa-sha256; cv=none; b=phiOBcEC8pkCWR7c8Nba9nbhQySyCE1qllMOpEgswNQbSeKB05oJn8Z6NAoQiEMfkDnrt7 KnVtA5mxDed2Imm7Vy2Ug6ge83kJrYYAOf3kUhcPT3oe2WK9RZT8vXcnVD7+fyQkshdBpY 42p/XdJqyXcsFXBrGwOJPDxwrHneaGc= Received: by mail-pg1-f171.google.com with SMTP id 41be03b00d2f7-51f64817809so360825a12.1 for ; Mon, 07 Aug 2023 04:17:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691407046; x=1692011846; 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=v5vYJ8kE3O6JXdLxdEEyUgUMjz4KJqSKKSB151wqkNo=; b=SddB5W7TBGS4uOBB54oAwQadrL7fhf6DQuFGu8VJel4YD8JvtkF5mhOckA/6vdi9nq hlVTmdr/Kx1D4xlpvO2OSKYXB5RvVMiR6sESxeeh8/ktD09qDCXXwpDE4WqRU8hY11FY G6KR4LUZZolsNcExYWQgBloqrZSLljdTAa93b1m2N036gRwi9BwogxNRXUsItZlswdeV RttwDZcFyg1S8l+4ePFxtqYFv2AYsGXbvb/zq8emVyERgALeuEVi3b9ZjwWVeQ9iauxk xcZs9+wDP4Bgr5Tw0/5OxVGHY2k5SYNUfTOTk9l9GbDIx4PuLA8GEzMw0rmzVwGr35V7 B6uQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691407046; x=1692011846; 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=v5vYJ8kE3O6JXdLxdEEyUgUMjz4KJqSKKSB151wqkNo=; b=h9+LE4QLubYFE/t+QSvl2vOF7MdJRck3Nlj+c9/8frBP3m7+BAMPi9iwMwzWRhADKS D2QX9q//o/kiyAJTVZQW/MPGxgkG96FF2GCuh5CFtJwVcfoGbYaCFYMlWlZewP1DJyQA sISpKr1Xqp7c/v8aPyw1Ir5fvJyeEb7ex3ZOxVQ/57CeE5IOz9ShjVG2FWJ0YuoIsvoW cXJMVdghfU2LP+gJoXJiuuLJE0oCvDhrf6BXXJwNrBNMEp//DOGvjqfYqlbuJC87nx1Y EJRYGyfNsyhIhyYjAkpD06UjYf5yK68AFL0bXI0+pVvNnvoqJaP3/8fzc9YEBbx+dtIp PE/Q== X-Gm-Message-State: ABy/qLblqOrkevFY0JtCBLPbiK9OMB63KRFKiCd6qI3YWuwW9VIQDwE0 2wmg6rgzuUnvps0mHDngZdDrSg== X-Google-Smtp-Source: APBJJlFyAF6s6JefOZNl/scuUGwKU5q0BmH7yK6Qf+JZ3E1mrAS2lh5NuGQm2RRGuEVfms4+14afyQ== X-Received: by 2002:a17:90a:3f08:b0:268:1e3b:14c9 with SMTP id l8-20020a17090a3f0800b002681e3b14c9mr23486908pjc.2.1691407045970; Mon, 07 Aug 2023 04:17:25 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.17.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:17:25 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Chuck Lever , Jeff Layton Subject: [PATCH v4 35/48] nfsd: dynamically allocate the nfsd-client shrinker Date: Mon, 7 Aug 2023 19:09:23 +0800 Message-Id: <20230807110936.21819-36-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 203FF1A000D X-Stat-Signature: 8bdrbbn3kemgms4y44qemzubx6wxf8xc X-HE-Tag: 1691407046-154815 X-HE-Meta: U2FsdGVkX189gr6SxH0iH/CTXEQcBI6tmh8r3rmN7NVBBQZ65Q67j9NGxGavQ39Qea6PqwVGjtNek9bGSHi8lmZrTTMKbSk1ZdZEdLpOQW8csyclIZXGJ70reB/JrzuYT2wJeL2n0g3Pp5oB22IM4xysOEZFYByTP2YcQbbOAhGq2blcN5PNAKQw3QTM46PV4laELs3a2Vvb8oWkkP0kHmWoxjqpIFyvzlXt4VjGfF5Y+6KiJc2RNkZyoJTSOwkek+L+E1f8hKgFASCbqa+i0vaIe/U5wbI5iZ9qZ81Pz3zOUNvD+9bkp8K4pXr1bhqhwz1cSrBEZHS/hkTVxeAK8f3gpeUEVCfrMYzNLsnR75lg6XGHHsQ1qQVfoHZ0Bcl7NADC5ukoqW14HmSqGit6Rwv/m9WvhNu8cyI97kebQKCZoLOcM4OFQnQly4H8fEGKshcaw0zOkomVkqR6Q0nZdbtpLFAvXy5D21WLy8WaZ+0DhChsEXhH9J/4lWvyapsFM9X8WAVqIoNGnYW7lk+XBWJuEWb5Fpy8y9y8uKcXvgbSyS20DNlm3cZiXRJxONx7PTgQpFXQ0FpQNVuvfbAswNynl+LY6BzGVTvSokENFikdYWAg+WoZGyEAOgubzq8+eqJsV463n+lVF6qBbGiUvQdCJ6l1iZEMYrPgoe8pmq5dfnkLWQUA1MsSavwQQKSZdvNpsc/e1nvZN/iYTHHE8Z9cCmErRaoFb1nWF0KZ4/QJp+y/OnGJeycUCPqbZpMWf1akAcHLIbXScEwQCEnLWsvTTi+8pHnbKHiwRpC4rQRB3JTSlwL3rz+kR1EzDKXRPc3ouI0D6eOzggmtfjdb6Da/1HHHTFbGm1r1uFF8xQU5HDRYVLWrmNzfGWdAFMeY0jopVIaOgp7ZxqkFOv4QUIxsIP9kAQB3YL0dJmCE9kcEuUR3Uu4Kd6AIqitUHbaDOX8vzQ5YtkiBfHFNct0 6Z/uL1rU MgAQey0tQnHgSLy18t1Nc2bQFQ7ZtqHPcaQhGk2VqeqVaYFOjm7FkS0SfAURBwyQIp3zSQSpg3knlXMdZrVVcXKsdUiohEfGM7x+pOf4ePcR/mVHBDymfxryNo0wvACpqa9hEfvdm2QT/r5s0yTlzXygsM+sVb0IYPZSK+reYRO2uDr3IhKpoxCtdCEtZeYiX7Q/af9AWNBPXhLwNbNAzQr44jMUnhPg7Z1HA0OIc34gGII5IPsbUkrZLCGps8Nq+aNGEfNKMYRTyE463Y6DzV8VTYOMXTS4pog4P0ZKXV3PD2jAtTHXqlankWQKXd+HFytB5gTm4jc6xLg3Om13BGmQZevyvutXZeWXxEQ8X0mbuiAw/arFIIm6AvpT5rQiJOPIAFJfxIFn7bjn/DhfPvcEURF/qoNigSqN1U23ZwbcqelC1OZfOsH7GBiIPcvKq3DfeH7GbR+da9BYI7onNEUylloMfR573CCQQxmDw9WkyFbCIFiNJ4Wp6ZA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the nfsd-client shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct nfsd_net. Signed-off-by: Qi Zheng Acked-by: Chuck Lever Acked-by: Jeff Layton --- fs/nfsd/netns.h | 2 +- fs/nfsd/nfs4state.c | 20 ++++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/fs/nfsd/netns.h b/fs/nfsd/netns.h index ec49b200b797..f669444d5336 100644 --- a/fs/nfsd/netns.h +++ b/fs/nfsd/netns.h @@ -195,7 +195,7 @@ struct nfsd_net { int nfs4_max_clients; atomic_t nfsd_courtesy_clients; - struct shrinker nfsd_client_shrinker; + struct shrinker *nfsd_client_shrinker; struct work_struct nfsd_shrinker_work; }; diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 8534693eb6a4..9e401db8a6d2 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -4400,8 +4400,7 @@ static unsigned long nfsd4_state_shrinker_count(struct shrinker *shrink, struct shrink_control *sc) { int count; - struct nfsd_net *nn = container_of(shrink, - struct nfsd_net, nfsd_client_shrinker); + struct nfsd_net *nn = shrink->private_data; count = atomic_read(&nn->nfsd_courtesy_clients); if (!count) @@ -8149,12 +8148,17 @@ static int nfs4_state_create_net(struct net *net) INIT_WORK(&nn->nfsd_shrinker_work, nfsd4_state_shrinker_worker); get_net(net); - nn->nfsd_client_shrinker.scan_objects = nfsd4_state_shrinker_scan; - nn->nfsd_client_shrinker.count_objects = nfsd4_state_shrinker_count; - nn->nfsd_client_shrinker.seeks = DEFAULT_SEEKS; - - if (register_shrinker(&nn->nfsd_client_shrinker, "nfsd-client")) + nn->nfsd_client_shrinker = shrinker_alloc(0, "nfsd-client"); + if (!nn->nfsd_client_shrinker) goto err_shrinker; + + nn->nfsd_client_shrinker->scan_objects = nfsd4_state_shrinker_scan; + nn->nfsd_client_shrinker->count_objects = nfsd4_state_shrinker_count; + nn->nfsd_client_shrinker->seeks = DEFAULT_SEEKS; + nn->nfsd_client_shrinker->private_data = nn; + + shrinker_register(nn->nfsd_client_shrinker); + return 0; err_shrinker: @@ -8252,7 +8256,7 @@ nfs4_state_shutdown_net(struct net *net) struct list_head *pos, *next, reaplist; struct nfsd_net *nn = net_generic(net, nfsd_net_id); - unregister_shrinker(&nn->nfsd_client_shrinker); + shrinker_free(nn->nfsd_client_shrinker); cancel_work(&nn->nfsd_shrinker_work); cancel_delayed_work_sync(&nn->laundromat_work); locks_end_grace(&nn->nfsd4_manager); From patchwork Mon Aug 7 11:09:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343689 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 5BBCCC04FE1 for ; Mon, 7 Aug 2023 11:17:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EBA826B007E; Mon, 7 Aug 2023 07:17:41 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E428C8D0003; Mon, 7 Aug 2023 07:17:41 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CBD518D0002; Mon, 7 Aug 2023 07:17:41 -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 B5E086B007E for ; Mon, 7 Aug 2023 07:17:41 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 854961A0820 for ; Mon, 7 Aug 2023 11:17:41 +0000 (UTC) X-FDA: 81097058322.08.F011413 Received: from mail-io1-f47.google.com (mail-io1-f47.google.com [209.85.166.47]) by imf14.hostedemail.com (Postfix) with ESMTP id AE5E8100011 for ; Mon, 7 Aug 2023 11:17:39 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=ip0wYuQW; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf14.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.166.47 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691407059; a=rsa-sha256; cv=none; b=S75iK88Vsz+ztZzE3/mf0ow4frGAOPxe9DZl2FzEaDIvYSysHFfjzJFahds8WJK7zWW908 cdPphdfFBjXUoEq3Zrmz2Dj/Zzp1BW7Q+v9FwrJ1nDYTMzTvY6F2HrqYYePXTfi8BKZAGb nXmUEXAuUWpqvA7Kz/TF8wYj8Rlyyn0= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=ip0wYuQW; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf14.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.166.47 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691407059; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=f+7Rjo519K3FhaZ9jqPWNUITMom2L2BqSXFVMuCYJXE=; b=7fRlZzvX3sfl1mEw15PE0pSkq3SbSsj052FjG03sGXRsoqWoxtddHru+uhrrbfO/Wy77DZ til/0IuIYmfOTFXENGPoBHNhO/BSKHwh/FcNzJ7aHgTAHF12StJookxOdKliZTBA/cmIwx V+zRM7cCj9MR/C8do0/pxaJQFp4QkA0= Received: by mail-io1-f47.google.com with SMTP id ca18e2360f4ac-790b6761117so45137739f.0 for ; Mon, 07 Aug 2023 04:17:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691407059; x=1692011859; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=f+7Rjo519K3FhaZ9jqPWNUITMom2L2BqSXFVMuCYJXE=; b=ip0wYuQW2+/exFbWgV8xiqSMo5oTQ+OAdV6N1Ar0LEuRT0eIq620KDbMvERQspVuIX AL+wevZXKdon9YRPQjclhoX9H3SrxByFFe9jR5690ffz3lESe4Q0ZFhT9ousgzw0xt/w 5RRxxYEFUQ/KP/U5y/hPXXWHBw2c8mi1xHmKIZ7mZeQKJVTuYBj/qteoNFG9SyZ1tjUE RbAUg65PVJJ+WhDtWwqZYb434jDUE36PynN0DkYIbM09s/1BNwwPxkk2HM9wFLeNzyaL lqpAqgXw+Mhtz5SgHNy0c1hVzxk4Y6rOc9m8zwrbUN+lDejRoW7+lKGMq2jSF6Ub2+cH D5RA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691407059; x=1692011859; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=f+7Rjo519K3FhaZ9jqPWNUITMom2L2BqSXFVMuCYJXE=; b=U+hAwfsWY8Sf10oq/bE54YgYjEL91+/XWXFR1P57lm4h/ZjTjAf1tWZ4LbrKoo+7Ht 4zkIx2BwMNAqKuch5urEqpv3cqr460d42Oe9Y2LjXHzdRPYxr75IZ0JAF17cf0IotrM9 q4YheJj7QC6TBkRCxMD8PoD7wRy8+4Eusg2Z9w9h65fPcc5q3gMQ0U0/i/8j8Pjx3IVW lM6CS3ZQjGzPUSlEK5gDYFqUNjL/Codjm57M05APg56xRb1xE3YXlQUclgizs/LVz9wb vMLpoyspQsJlgjTDgR1ZMIvbkpIvbKjjCaNjo5egFBIT9HCaMuOXBwLqeNcZmuSNE8mP S+KQ== X-Gm-Message-State: ABy/qLayUDRrVkC9XofrOpqQIh05JW95v/3tdgDhMmNP8ldSCTqIIOG7 VVD/DZCh9ycCwyLxZoVE4F7h/A== X-Google-Smtp-Source: APBJJlEqWtJMEzUOeETqs91YS6OhZnccr6gvE839NK54utINPmY3rqSAbE5saT2wFNMSrRFNpkUXNA== X-Received: by 2002:a05:6e02:8ef:b0:349:1d60:7250 with SMTP id n15-20020a056e0208ef00b003491d607250mr23020165ilt.0.1691407058833; Mon, 07 Aug 2023 04:17:38 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.17.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:17:38 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Chuck Lever , Jeff Layton Subject: [PATCH v4 36/48] nfsd: dynamically allocate the nfsd-reply shrinker Date: Mon, 7 Aug 2023 19:09:24 +0800 Message-Id: <20230807110936.21819-37-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: AE5E8100011 X-Stat-Signature: ixgea8arbmb4dup4w6kdiwthyqy7dtus X-HE-Tag: 1691407059-308498 X-HE-Meta: U2FsdGVkX1/y21BKer0X8Vs5RpIVqWzITVG5+Ib5vuGrp/drOvIx0u/Fdi07Y9qKkuNCxTwXFpWrGN5s08YwlnB/di/oYif/KPuqwfFvaklJ1j1WQIPNhxBrWYxT14La2wcxUzt3AkJ8FeULOIvU3SFBmoBOFZOZR+wjZGP7rz5gqY73mpJjrYvXoXC72G9Xr2E09joIwhlgPeYdcTfIwv4jt731kkyP7LDfnV2EUVFqQMvNxSf8a85u2MqGWuztXNCT3nLrs7IsFWmvGIHzeSnFGRJoLtt99bgqOTDNQJMxe6KkaYrita2eqatFRemICUknjpJiq3guV1q0PSJZgw17STgHXKA1kurfN9Is7FX2YRGut/cp27mk8vKUAtXN3bY+gK7meKqD4XV1rNBKp48ET+UeuOm8OJnAm/rusjQ1huHz2vSxzmsFyf+S2VMCMidJSEJGLrNbSZTZdulT1y9ZhzcZCrKORhLqG2KVzhxZ5NMEk5OIEgCwI59bgWPc5KcTw07XOp5G5n1qZXXrrWPBBBG7rHXp4Ynu7Vt1+MktNMlZmgjc1wwsYyWRPKSWwBP4LYSarX2n0WxRkhnQTyExqGd8MRetkY1UqRWdG62moQky57x5poObmOluePeyTPHxt+DRKXwQB6A3lZCGgYPqotF7zXhlx3sI8XhqpBdbSjEERgvCk4Mh1RclRN049g9wYGDoIY5yppPnz1vbBkuAPeYMPCgg0RApwZRYF+j1POvSlOolrFRXrPKOOn+FROyxnaYrkOZWUFYPVF2zVghVz+qt3h+Z2cDdUCFD1/wm8TBekOrqMJDkDPvMb5BRdFN2EEiGJ0n+zFDYCYBF9stIELXG5Y10F8rnURQZh3Sfn0TF9TtSExbdiXw3DONpPPGr2GD829pv2bf3jNwiTKBVXlFOzaFgS2iC+habgnvM4olMPy2/CQ+LYwKEOdf5uO0wTygfrWg/qJXzt+P 5+bMoNyQ LXom7lCKAR9/FyAiJBGu0iQ/gFOafCVucINmhcHwF/zQup66WohyzAuIzbq8hsoGxzuKdqLyc2zrHM95xLxZit2KPzoOOvbMSBnsu/J6d8VqPRD2M6eP6J9yoehQ9noKZ/7/kewzLc13hkyltJT/bRzW34/Md4KTglwVCoutLgQ7kZYM4F0MW79ZVDTRyefJH7saDPMytexoMFScUFkldB1qPoaxSEXMdT8Bt+n9CDUz68zLyLZgqe0K8isCLv4F0SpxOG4/saI8AhrEoFebMO1rXjewaYiC4FF2oOhhLTKQEuh9JRuqdRd1NdngoU0sr7woduzKOEbtVvN8NHrv8Cl49akP62OOWa21Ie0bI4APmqEL4pMrWwRcWAeOZVjuenkKivVdewYe1yXOlaW3VuhUQYupykKDvhXoO5k0qN7qrX8zyszE/13/RH8Lls4GPDIVU6qO6hfxOdl1/lneUrKKOJ2dM8KPseTP8IfsLAY4xpXpjHISbD1ItJw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the nfsd-reply shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct nfsd_net. Signed-off-by: Qi Zheng Acked-by: Chuck Lever Acked-by: Jeff Layton --- fs/nfsd/netns.h | 2 +- fs/nfsd/nfscache.c | 31 ++++++++++++++++--------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/fs/nfsd/netns.h b/fs/nfsd/netns.h index f669444d5336..ab303a8b77d5 100644 --- a/fs/nfsd/netns.h +++ b/fs/nfsd/netns.h @@ -177,7 +177,7 @@ struct nfsd_net { /* size of cache when we saw the longest hash chain */ unsigned int longest_chain_cachesize; - struct shrinker nfsd_reply_cache_shrinker; + struct shrinker *nfsd_reply_cache_shrinker; /* tracking server-to-server copy mounts */ spinlock_t nfsd_ssc_lock; diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c index 80621a709510..fd56a52aa5fb 100644 --- a/fs/nfsd/nfscache.c +++ b/fs/nfsd/nfscache.c @@ -201,26 +201,29 @@ int nfsd_reply_cache_init(struct nfsd_net *nn) { unsigned int hashsize; unsigned int i; - int status = 0; nn->max_drc_entries = nfsd_cache_size_limit(); atomic_set(&nn->num_drc_entries, 0); hashsize = nfsd_hashsize(nn->max_drc_entries); nn->maskbits = ilog2(hashsize); - nn->nfsd_reply_cache_shrinker.scan_objects = nfsd_reply_cache_scan; - nn->nfsd_reply_cache_shrinker.count_objects = nfsd_reply_cache_count; - nn->nfsd_reply_cache_shrinker.seeks = 1; - status = register_shrinker(&nn->nfsd_reply_cache_shrinker, - "nfsd-reply:%s", nn->nfsd_name); - if (status) - return status; - nn->drc_hashtbl = kvzalloc(array_size(hashsize, sizeof(*nn->drc_hashtbl)), GFP_KERNEL); if (!nn->drc_hashtbl) + return -ENOMEM; + + nn->nfsd_reply_cache_shrinker = shrinker_alloc(0, "nfsd-reply:%s", + nn->nfsd_name); + if (!nn->nfsd_reply_cache_shrinker) goto out_shrinker; + nn->nfsd_reply_cache_shrinker->scan_objects = nfsd_reply_cache_scan; + nn->nfsd_reply_cache_shrinker->count_objects = nfsd_reply_cache_count; + nn->nfsd_reply_cache_shrinker->seeks = 1; + nn->nfsd_reply_cache_shrinker->private_data = nn; + + shrinker_register(nn->nfsd_reply_cache_shrinker); + for (i = 0; i < hashsize; i++) { INIT_LIST_HEAD(&nn->drc_hashtbl[i].lru_head); spin_lock_init(&nn->drc_hashtbl[i].cache_lock); @@ -229,7 +232,7 @@ int nfsd_reply_cache_init(struct nfsd_net *nn) return 0; out_shrinker: - unregister_shrinker(&nn->nfsd_reply_cache_shrinker); + kvfree(nn->drc_hashtbl); printk(KERN_ERR "nfsd: failed to allocate reply cache\n"); return -ENOMEM; } @@ -239,7 +242,7 @@ void nfsd_reply_cache_shutdown(struct nfsd_net *nn) struct nfsd_cacherep *rp; unsigned int i; - unregister_shrinker(&nn->nfsd_reply_cache_shrinker); + shrinker_free(nn->nfsd_reply_cache_shrinker); for (i = 0; i < nn->drc_hashsize; i++) { struct list_head *head = &nn->drc_hashtbl[i].lru_head; @@ -323,8 +326,7 @@ nfsd_prune_bucket_locked(struct nfsd_net *nn, struct nfsd_drc_bucket *b, static unsigned long nfsd_reply_cache_count(struct shrinker *shrink, struct shrink_control *sc) { - struct nfsd_net *nn = container_of(shrink, - struct nfsd_net, nfsd_reply_cache_shrinker); + struct nfsd_net *nn = shrink->private_data; return atomic_read(&nn->num_drc_entries); } @@ -343,8 +345,7 @@ nfsd_reply_cache_count(struct shrinker *shrink, struct shrink_control *sc) static unsigned long nfsd_reply_cache_scan(struct shrinker *shrink, struct shrink_control *sc) { - struct nfsd_net *nn = container_of(shrink, - struct nfsd_net, nfsd_reply_cache_shrinker); + struct nfsd_net *nn = shrink->private_data; unsigned long freed = 0; LIST_HEAD(dispose); unsigned int i; From patchwork Mon Aug 7 11:09:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343690 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 71062EB64DD for ; Mon, 7 Aug 2023 11:17:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F2F776B0074; Mon, 7 Aug 2023 07:17:54 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EB8118D0003; Mon, 7 Aug 2023 07:17:54 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D31B08D0002; Mon, 7 Aug 2023 07:17:54 -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 C37FA6B0074 for ; Mon, 7 Aug 2023 07:17:54 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 9DE08160166 for ; Mon, 7 Aug 2023 11:17:54 +0000 (UTC) X-FDA: 81097058868.26.3F7612F Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) by imf18.hostedemail.com (Postfix) with ESMTP id C60031C0012 for ; Mon, 7 Aug 2023 11:17:52 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=STte4jf7; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf18.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.170 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691407072; 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=jaqVlo27zysQOw4inLaa7RWYi61naAqQm5GJ5upJpN4=; b=uafTptOx0sLISTsdjvJnYWpoL1oYpP/lu5q806bmaE6dPoNoVrOom2Kc1iD44aJlWN4Wnu +qxvAVlPtwZM0sWjqMJZTz/0A7KLnV+UVCPsBUn/Vztjp0q5/YHRLhnfNIqxSAdF6AMkxs irDdlEUoYPqzfKGrKTuW9tg+PE6SjSw= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=STte4jf7; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf18.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.170 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691407072; a=rsa-sha256; cv=none; b=8OUYuY193xERkvKSfOqQs3Y5yX6+Lyb5BHw85SCAb/BjQQ6OctjtixZIPMntAVyhTvB6hU Q/w7hxdAQOpz8Nnafi8I+6Ti+C3jSHui2Kjz/8r5DDhx23GEdM5PMKmCu8m2eeKVeytFGh rwgygilNU5oQaQ9p4cxWweFEtgi1N0c= Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-1bc76cdf0cbso602375ad.1 for ; Mon, 07 Aug 2023 04:17:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691407071; x=1692011871; 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=jaqVlo27zysQOw4inLaa7RWYi61naAqQm5GJ5upJpN4=; b=STte4jf7FhwqVhw4SDsuIf9ArKOz7aaezU9GQvpwx72Qohuw9VAsNSdsTliApCOiZv hZglRc835HN169D4rPdYFdfBD3Qzmlb6nb7pOyd5sRW5/Q53h6lgQrbmmsvusnFxieMS 3gEtEAPOYNwIuSKOCZt36UxF2L3eT/vOSqmUXX+knGy5r/m2K69NUUZ1EZhY9Qhw5qzB 8KZjkXC6v5RjXBHEQfQqjwk13t5nh8R+eLAxTypf0xdr6jeYUU8V2GMJD0vc04NJ7YiJ wDeEObjpas42qIWcxQ3ypCHSoS50Jk57/3cVZMKwNJGNUHm8wBkxvAyimm97ZuR/Kr/P R5sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691407071; x=1692011871; 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=jaqVlo27zysQOw4inLaa7RWYi61naAqQm5GJ5upJpN4=; b=A7CWHJB4/XuyoeaLdqk7bZ2B7vZivHcOMs7Q67bSJgAOqZXwzlvT8V9du6MvVA+Fb4 Hd6DCx6fEmPJSjjEGUt+0zF1SMx91/SuHrkaWUWRMc75ZYFtqgLjcxTeRGLhrwkp44py oyuLjSO5iWnfhKpSknVehRjcN0xrg7euO4brsI5uJYElCOItiPJ+JyyFbghcYNRiYiOq r4lD0/JyhX+HvvjU6jOxjk/7hPphhk6YdDwbEmJCzjxXGOnqt3GXouVZcCi9QUrUwrIJ gdya3bgWmYZk3bS5GlkVjqcoIVJiXgTfeO6L20qDIk4rZeC4wkwG3ZAk7iwCCa0n/JYv s0VQ== X-Gm-Message-State: AOJu0Yw4640yz388qQFb/fsQM0frbftj9Er61wb9+ecHMsX6A7iq4pnt rRIB00i0NNzdACCinCSGW+LdQA== X-Google-Smtp-Source: AGHT+IHBSjfm4qMxfKY1o30DsQrf62j+YLyyzQgOSjZX7MvZKQZkongUtrzUOFN5xrnWaoCKIehpOA== X-Received: by 2002:a17:90a:9c3:b0:269:41cf:7212 with SMTP id 61-20020a17090a09c300b0026941cf7212mr4969668pjo.4.1691407071669; Mon, 07 Aug 2023 04:17:51 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.17.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:17:51 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 37/48] xfs: dynamically allocate the xfs-buf shrinker Date: Mon, 7 Aug 2023 19:09:25 +0800 Message-Id: <20230807110936.21819-38-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: C60031C0012 X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: cwxzhxjsb6kpenxk8r4mre9qa9i9fush X-HE-Tag: 1691407072-287642 X-HE-Meta: U2FsdGVkX1+xTW1Nw6IGeIEfrn7NLtbgxsIxcAkTk3GlcoFiF9l9RRvhbRTsOZfcgIXWi+IX98o33NCvEDY6z1Kllxf49ugsw+k2yk4rxHWaxSZjcK8c7pQiaxcxzkr4drRaYZdlny7wJzg8LI3jFoK4GfZMli0ljcrL7ajNWcz5bEbRjDRL2pPL/ZqJOjuRCMyJ1OrOI4zmpN8i899mghvHaiUfCD48SUdfyRsKIrawZN8W+QFcC6TpcrdwlNtS9sLfEEp8ig9yk+sweUPJ6rf0GmVFMCSrFqC3FTB4yCRhtuk250Byu+aF5KpXEhhk22oOtrZg0wEqBN33Zc0j5hjTYTJMueNjEkQXsOGuvKuQcrRi4SioxzVTwpWPQ0O/HqGQpydSpZigFqHH4kSH5hHNn3sW4NmcC1MZ497uifYBVkPlxT/y8Csj7r1P8G9lVQ6jl1OmJRN9P+7kakLgpoAYdp7jf+RMQez20KQzl+Ky3894w+NzIH/3Nfg31QvqF6yHRYNrjBIMu27DFxlXe6dzxcNB7GSVskZGGWgVeAHbLTkbR/xEkBcy+xNolrCSs9NCX9P1fWcTTpcfVQj43IEEFFFoiLz6dhYeowQNAOMWElGWOw888YlWFAOzpZDu6ka7kH+ARgfld11apA5/CtOL39qnTOon+piwU9/uZlCbLDhT21904syj+qnbNeeMZrcf6E/V3Xguhxkepl+PoXta2Y/o5r7CLXXTppHYGYPluxVfRmQ+OKWRBnlXitwpSCCf6Tt9rVCMfQ5rHCat24Z/ty82GxSMWlNQwgDb4Hy0Fv0uN/6BrcEhpECnhyAhQdgYToIQxkdZc4m1gSbUzx/e0jxcIO+f/qHVV928sJ6JWlvsSKja7pLaxVOycksCkXeLusmqvMEc50SLpsHo3K8FdWf+ojdC90q2ze8//a0bEnvCNYJGJJaRQPrehn4Tre2XHB/4YTdiNx4vL/2 K9VWhtlD RVOCZ40qJlO6DZO4Dck68t3LIdnkNQwHjaivhhFBFavzdoHjsvMKExmzsBONHzOV2b9ysbgAsj1tEIDR127Y/SsfLjkzW96/lyavEN41Z3h2YgAIhEj6SyEC86+r5sq1Y3VQCIDDNkHYWePLzFPyM+xQ1KeN5qOhCOhs9d0UtyxxRmGY9Nk5+yfckJ8n/feFd3gQnkyEY2UUNuczZ2rzQskhP61qmSCUD99FJ+iCs1b06k3MWpWbZ5i1YJ84ZZExii+u1IgrzSGR5q9KlFCAa63sl231hqSeFd/TfZMEnQE/OISKR8S+yigl+1t713AOcF9OKc+rCb7fJBcT80K3SMg2Z+SJ49sNGXXRA+Es02KowUH1Psx3Kt2ATRxHlTOALkEMGNzovBqHYQLKUf3Op46c6DEl+bw+KDMqE X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the xfs-buf shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct xfs_buftarg. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/xfs/xfs_buf.c | 25 ++++++++++++++----------- fs/xfs/xfs_buf.h | 2 +- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c index 15d1e5a7c2d3..715730fc91cb 100644 --- a/fs/xfs/xfs_buf.c +++ b/fs/xfs/xfs_buf.c @@ -1906,8 +1906,7 @@ xfs_buftarg_shrink_scan( struct shrinker *shrink, struct shrink_control *sc) { - struct xfs_buftarg *btp = container_of(shrink, - struct xfs_buftarg, bt_shrinker); + struct xfs_buftarg *btp = shrink->private_data; LIST_HEAD(dispose); unsigned long freed; @@ -1929,8 +1928,7 @@ xfs_buftarg_shrink_count( struct shrinker *shrink, struct shrink_control *sc) { - struct xfs_buftarg *btp = container_of(shrink, - struct xfs_buftarg, bt_shrinker); + struct xfs_buftarg *btp = shrink->private_data; return list_lru_shrink_count(&btp->bt_lru, sc); } @@ -1938,7 +1936,7 @@ void xfs_free_buftarg( struct xfs_buftarg *btp) { - unregister_shrinker(&btp->bt_shrinker); + shrinker_free(btp->bt_shrinker); ASSERT(percpu_counter_sum(&btp->bt_io_count) == 0); percpu_counter_destroy(&btp->bt_io_count); list_lru_destroy(&btp->bt_lru); @@ -2021,13 +2019,18 @@ xfs_alloc_buftarg( if (percpu_counter_init(&btp->bt_io_count, 0, GFP_KERNEL)) goto error_lru; - btp->bt_shrinker.count_objects = xfs_buftarg_shrink_count; - btp->bt_shrinker.scan_objects = xfs_buftarg_shrink_scan; - btp->bt_shrinker.seeks = DEFAULT_SEEKS; - btp->bt_shrinker.flags = SHRINKER_NUMA_AWARE; - if (register_shrinker(&btp->bt_shrinker, "xfs-buf:%s", - mp->m_super->s_id)) + btp->bt_shrinker = shrinker_alloc(SHRINKER_NUMA_AWARE, "xfs-buf:%s", + mp->m_super->s_id); + if (!btp->bt_shrinker) goto error_pcpu; + + btp->bt_shrinker->count_objects = xfs_buftarg_shrink_count; + btp->bt_shrinker->scan_objects = xfs_buftarg_shrink_scan; + btp->bt_shrinker->seeks = DEFAULT_SEEKS; + btp->bt_shrinker->private_data = btp; + + shrinker_register(btp->bt_shrinker); + return btp; error_pcpu: diff --git a/fs/xfs/xfs_buf.h b/fs/xfs/xfs_buf.h index 549c60942208..4e6969a675f7 100644 --- a/fs/xfs/xfs_buf.h +++ b/fs/xfs/xfs_buf.h @@ -102,7 +102,7 @@ typedef struct xfs_buftarg { size_t bt_logical_sectormask; /* LRU control structures */ - struct shrinker bt_shrinker; + struct shrinker *bt_shrinker; struct list_lru bt_lru; struct percpu_counter bt_io_count; From patchwork Mon Aug 7 11:09:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343691 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 23933C001DB for ; Mon, 7 Aug 2023 11:18:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9B0B98D0002; Mon, 7 Aug 2023 07:18:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 93A256B007E; Mon, 7 Aug 2023 07:18:07 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7DBA28D0002; Mon, 7 Aug 2023 07:18:07 -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 6E2296B007D for ; Mon, 7 Aug 2023 07:18:07 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 3EAA8120A6E for ; Mon, 7 Aug 2023 11:18:07 +0000 (UTC) X-FDA: 81097059414.04.3CFC180 Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) by imf22.hostedemail.com (Postfix) with ESMTP id 57384C000D for ; Mon, 7 Aug 2023 11:18:05 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=J9sRUnLV; spf=pass (imf22.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.42 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=1691407085; 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=vAE6p5mA5n3yxm+4IPfXfMLc8MGv4J5wg3qHubren08=; b=eJNR7CTPlormNM5br69ijfd+Lha0dYDvzjn6lPmuUrUxwDk9xkn9rIc94lo5GmF/cbXbWz PIOsbsll/oMkz0iXBgeRaRw1XD0BHpgNb+Bx0twn0GTf28pOo2sMDVGELQxfxkWPV6zPdc VEZiFIAo6Xe5pq28CbFKG9ZRAH5fZYc= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691407085; a=rsa-sha256; cv=none; b=Zy5mtUKCw7ZQckx9GgFPXuLsybYG3pt/17ecjzc6589vIHm/qsIwFkFSiMkBzZeKTUCp8D xDIoCWrdkGh6sN9c/9Y5gVvrSG+7VS1VblyNKX2vSCzxF1S3d2h5WbbYLlhPbeKR7p/+zx 6I1Fz2WGhbJnymKZa5CecWZnLzvvbgQ= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=J9sRUnLV; spf=pass (imf22.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.42 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-265c94064b8so593254a91.0 for ; Mon, 07 Aug 2023 04:18:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691407084; x=1692011884; 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=vAE6p5mA5n3yxm+4IPfXfMLc8MGv4J5wg3qHubren08=; b=J9sRUnLVr/1gRDCZ8z/wUaEuDmB5tyJkvTgo3ljho94pxMvUbNxIs6BrAr5OvjDeBd NlwSsbr2CKM03GvossTeyaJQF+TsD29ATXSWWvjw7Kcrs+m5LHvK9yHheRdx6ItlS6Ki yb6ebrPqrWzCUCYAOoHHLe8DTcWnRGuK8IbRkKFIstk7vHG8sx3yXUkwwQ7Mu6THuK5U s7cxqSXTHpGPngOLWfQooqg5Gbhqn2y84s5NSz7JvKiqnrRjOpTq1zeDW5zGBhCfHp8b AvjxYc2lq/KA07E2LvbgtvS8QM8QXYSNfper7Sm+pyp3P6HdBQtVhRokTkSwmgm01BsE Ay4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691407084; x=1692011884; 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=vAE6p5mA5n3yxm+4IPfXfMLc8MGv4J5wg3qHubren08=; b=ku/qu6pV+yPITWKz8ExGTyal4IddL3NO6UtyCOZYxe6+gg/rpgRk6dhon29Hov4xiZ kV3Vde8eT98/B1eoNWry58ZleJdyOsxoesDbinU2ztO8uJK8m9R3deC5s00Qk+mMcAPO ihopiWkLTC0tJZBC5isPVuo7GHK7RpZmA8Gt/RaFh3bRjberXl29QguVAnrPQxry1w3+ HWT9Q2zMzlKhHyW3vNcreuY7cfpSb0bPXDrDqwjCNOlAtMJWmB5GmRkUKAbwXrlg2oOG L/tQjZprBKuRXBactCOkmVMgiUBnroNAoZ3S/0B0J6/1G9nPnqYZZXJ3Cix6A4EUbZiy YPBw== X-Gm-Message-State: AOJu0Ywtg8L2jMteILqbyRZHDX3VbKvzz0XDkA2J8i7mu+zjmLk4gv7V 7vm0RyPb9ngkD74Ow9GCCMpA6w== X-Google-Smtp-Source: AGHT+IEh5Yyc2UkocOBP861I39wck8cTfExcJN4mGltuRpL51+0K+Rth+2UxJEat5gVmOs+WZ1XBzA== X-Received: by 2002:a17:90a:648:b0:269:60ed:d493 with SMTP id q8-20020a17090a064800b0026960edd493mr1826843pje.4.1691407084214; Mon, 07 Aug 2023 04:18:04 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.17.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:18:03 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 38/48] xfs: dynamically allocate the xfs-inodegc shrinker Date: Mon, 7 Aug 2023 19:09:26 +0800 Message-Id: <20230807110936.21819-39-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 57384C000D X-Rspam-User: X-Stat-Signature: q51arfesk1at1j1hkm4ns1wwoojeqsyc X-Rspamd-Server: rspam03 X-HE-Tag: 1691407085-451316 X-HE-Meta: U2FsdGVkX1+jW+esi/yRaII94ck6safM75VSehpxpYG/O6EkoIa3M9fe2hLkNRqQkMSezLpoGBSmb2NMQRAZNqFliiQtZPHVy5C9TNba04vKtWqFBhY69T9vH0BB2+rpWW0+Bi93RUcJO6E1HL5t8D4JZf+xSpoTb1/VdfMInG2HdpNjbFjL9/8/Q0zrLYjG1jWTtUbn4PkAM/fQIf7rWMrtPKeMz5q0qxNbfVcCl6LLc9Nnqg2rfpL1D1zAuN0qjn38CMBRmpc83cThaGR/jEEE6kxAZw8+WtfIhS5LJRiGEdD5XMLR0ks3NX/OoJK8Dl85VTA4BkpawQnAPk2xuqZpTFX5fOphzDyn60s5qQt4US7Sx2DAVrwmvsBDmiaL7ULmolzLXVz11NSnC0nWIgXb1upRkPP8Auc6kobOBL4XiTpdR/TZOf7cS5PEn6AedzvaM7ABgmedVTvd9wNDbxBCeqIm/jocVKCSzEJafsfoxDQ0RO2xm1njJ5KJplKW+aNhl+Ip3iE7cOA7sXfz0mzd9VvWiCLwj5NFjt8AGhUY7OgxPJIwpoAkeNlVyCcaMCgbADsdq7G26KtcLueHluOVawd75E7ASq7nulF4+1QkUzFFlOa/xF74ZZlKWYQDhe+d9knL5XEG4lsrTjS+tkB+Qe0muqrVXj1O5udg93516ybGmv9lsSQnIzB+W4QSjO392JjAYXbnRWQtoXPMsO8/Z/19PSzmEk6+346yzYw0caIbG66CaPlxsrExzFd2sWkKeEwjEevKjgXgeJdVwlNwygWXlT9RFYuyG4blVNiJRQu8NlJnWymH1HiBX7MiUi2NilYrz6AuJ82vjmXX9+ByJ9Uy6CXoF/lh1yDgS/P0BK9q99OAEDYskKmLAU9HgMshKe4zKIFvZq8e9xJC5H9XxuJEP5pTG4q0sKruIE8hKvqDk8hWFLjslFnzevPuTCAeqxv63ko0P7nxX3e VVvCp3GU H1WIyi6nVrBAYor1B+0eMdwVTWKkeS5Y4rwLaX7e1TqYEBGYVN9/fcyD6cCRKltwAGv/HrpxuuZ/4QwwxHXKyHEIb7l5uLrD47gqa/MJQ9063eCGT0iL8pLTEF2tssyHaDtuhql9T8j1UjPdaJWep30gswm+U3KgFvl4ig3XCpKK1Tee6etTKOqk8+rDfuECYhQ6CheioL/Nho2tghE3ccdWYF3acjLpXntoBBhcSvVk8Cdh7hJ25AsOHRdKsFdskiB7mTyRJownsyp8LzxwH6sgq5AaYCJ6X6TnJHtp7QNI+/2I4XJYKJUCGqse9xWgpQmC0vKjrweIIuLx6oEX2YivFwx/h2rUZIA7oFUy3P5smJ9tZlFnuwEoEcc/oUy+LfyeGLoHb4RAJodQYEAsy4bO34+hMQqEAFVmL X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the xfs-inodegc shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct xfs_mount. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/xfs/xfs_icache.c | 26 +++++++++++++++----------- fs/xfs/xfs_mount.c | 4 ++-- fs/xfs/xfs_mount.h | 2 +- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c index 453890942d9f..751c380afd5a 100644 --- a/fs/xfs/xfs_icache.c +++ b/fs/xfs/xfs_icache.c @@ -2225,8 +2225,7 @@ xfs_inodegc_shrinker_count( struct shrinker *shrink, struct shrink_control *sc) { - struct xfs_mount *mp = container_of(shrink, struct xfs_mount, - m_inodegc_shrinker); + struct xfs_mount *mp = shrink->private_data; struct xfs_inodegc *gc; int cpu; @@ -2247,8 +2246,7 @@ xfs_inodegc_shrinker_scan( struct shrinker *shrink, struct shrink_control *sc) { - struct xfs_mount *mp = container_of(shrink, struct xfs_mount, - m_inodegc_shrinker); + struct xfs_mount *mp = shrink->private_data; struct xfs_inodegc *gc; int cpu; bool no_items = true; @@ -2284,13 +2282,19 @@ int xfs_inodegc_register_shrinker( struct xfs_mount *mp) { - struct shrinker *shrink = &mp->m_inodegc_shrinker; + mp->m_inodegc_shrinker = shrinker_alloc(SHRINKER_NONSLAB, + "xfs-inodegc:%s", + mp->m_super->s_id); + if (!mp->m_inodegc_shrinker) + return -ENOMEM; + + mp->m_inodegc_shrinker->count_objects = xfs_inodegc_shrinker_count; + mp->m_inodegc_shrinker->scan_objects = xfs_inodegc_shrinker_scan; + mp->m_inodegc_shrinker->seeks = 0; + mp->m_inodegc_shrinker->batch = XFS_INODEGC_SHRINKER_BATCH; + mp->m_inodegc_shrinker->private_data = mp; - shrink->count_objects = xfs_inodegc_shrinker_count; - shrink->scan_objects = xfs_inodegc_shrinker_scan; - shrink->seeks = 0; - shrink->flags = SHRINKER_NONSLAB; - shrink->batch = XFS_INODEGC_SHRINKER_BATCH; + shrinker_register(mp->m_inodegc_shrinker); - return register_shrinker(shrink, "xfs-inodegc:%s", mp->m_super->s_id); + return 0; } diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index fb87ffb48f7f..640d09891a4e 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -1018,7 +1018,7 @@ xfs_mountfs( out_log_dealloc: xfs_log_mount_cancel(mp); out_inodegc_shrinker: - unregister_shrinker(&mp->m_inodegc_shrinker); + shrinker_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); @@ -1100,7 +1100,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 e2866e7fa60c..562c294ca08e 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -217,7 +217,7 @@ typedef struct xfs_mount { atomic_t m_agirotor; /* last ag dir inode alloced */ /* Memory shrinker to throttle and reprioritize inodegc */ - struct shrinker m_inodegc_shrinker; + struct shrinker *m_inodegc_shrinker; /* * Workqueue item so that we can coalesce multiple inode flush attempts * into a single flush. From patchwork Mon Aug 7 11:09:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343692 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 76D26C001DF for ; Mon, 7 Aug 2023 11:18:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0D7BB6B007D; Mon, 7 Aug 2023 07:18:20 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 060478D0005; Mon, 7 Aug 2023 07:18:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E1E128D0003; Mon, 7 Aug 2023 07:18:19 -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 CDCEA6B007D for ; Mon, 7 Aug 2023 07:18:19 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id A4CA51404FF for ; Mon, 7 Aug 2023 11:18:19 +0000 (UTC) X-FDA: 81097059918.07.DA90D63 Received: from mail-pg1-f177.google.com (mail-pg1-f177.google.com [209.85.215.177]) by imf22.hostedemail.com (Postfix) with ESMTP id D4652C000B for ; Mon, 7 Aug 2023 11:18:17 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=I0fRADtM; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf22.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.177 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691407097; 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=NbTnBXz1rftevvtnrJnbyUTbBXZHNhmRyJT9VBuSKEk=; b=fF0t8MFnnQJQvUF4QSMm8XqAuEz1SbfEt5XKAYvHJ5g/JtCUmkbCLNG9zXRq2D33dVCwg0 unxzGiI6xqShQO/i9y7mbCykoYmu1RVhWNGp2aKeDalkNcmbTFufpI941N2GORuViUfd4t DpI4M7n2YY/0kwoXAn3uQ9sosmer5As= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=I0fRADtM; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf22.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.177 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691407097; a=rsa-sha256; cv=none; b=NF7d2l9imhp96QsNUvn3sZEoZHkAnXxw3mWIZ6bDB8jC4Le7etzM8ubiH91NEyYLJHdQav lmI/llApv//3MfbNMdlB6FJZFVoZGC0+EbKA6Ur6yJAK5cE5MQRbxjoNZoXhJgv/od0QY6 VQtab0JwYVMtm3sevWnkBIXfkqHIU08= Received: by mail-pg1-f177.google.com with SMTP id 41be03b00d2f7-55b78bf0423so392511a12.0 for ; Mon, 07 Aug 2023 04:18:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691407097; x=1692011897; 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=NbTnBXz1rftevvtnrJnbyUTbBXZHNhmRyJT9VBuSKEk=; b=I0fRADtMeQ7ZYN4lawqOYqpZyATzMma8+JI7v8Zk4meeIAhlCUAEE4oant9GMpCU9c e1/RDTnNhNkcs7YzYpKhdN1XDfh3C1CzV0J+KZ3/D4mlZFUuIdDCGJV9GUewRdITND6b 4GYUs3S5ZWDZ5Jh0dvaqr1VDHgapHBN1S1ychIZWiQ7oRwFoKrrtIpw0qxts3s8CAjGr ydAlHOG9qMq4ZFwUnfssYxxr3X8fPLTZ5CluqYa54YAa1ITLLjbOydQ2pku3tDphziTJ CgtcI6R1bGyzpwkNzZouq5zSQbcmQPiHyBeMkjagL4bEVNYZ8WMV4Nik0kWzaqHzYD2e Au8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691407097; x=1692011897; 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=NbTnBXz1rftevvtnrJnbyUTbBXZHNhmRyJT9VBuSKEk=; b=HGXgYWQDCN5hQzYSUperZU69QI3zVOCQNk/gktmwQQc5b1ywSCnKlt2e17PQsRzo6o s02wV29QZ0PflcYe38qozhcVB/QgRcKnTqn8rz6i6ryRk7v5Clkf6t6iL/388zy+cfyX uQYWLYfkKsQnjCB/Of1aG3+Kl2r0KOUJYfgt8NHc0W4fG/yCjUbwQhkTnwhLHgjtb1cK SqE5d6SQyp8JjuAHLsnKAiZJG+y9KTDAuIj3m7sJAQ7vI0I22WzFgDPrzigbZphXwaH2 IRT9gWZXdpXHc9+13Z9QPUU6WwUBNHA1ytb6svlhiPEOPVCFsv6gH7J+A9Kj5FTG1BS+ n2nQ== X-Gm-Message-State: ABy/qLZGmKJFPrvBT1RbHBbBa/LkGe1G3B6sKyysWOPTYO7XrdFdt6Hr OliMd+8o0VURDtZGjQxfVmTcLw== X-Google-Smtp-Source: APBJJlHEA3k+axkYWIvy1nHuTMRTEcDAAx3CbSXEmipYg83y/9axHDl54yrvmY4ExsXdwismqiSLfg== X-Received: by 2002:a17:90a:901:b0:268:3a31:3e4d with SMTP id n1-20020a17090a090100b002683a313e4dmr23078546pjn.2.1691407096844; Mon, 07 Aug 2023 04:18:16 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.18.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:18:16 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 39/48] xfs: dynamically allocate the xfs-qm shrinker Date: Mon, 7 Aug 2023 19:09:27 +0800 Message-Id: <20230807110936.21819-40-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: D4652C000B X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: wtq8kbjpdob4oer8a3mn56of3tbi76q6 X-HE-Tag: 1691407097-656220 X-HE-Meta: U2FsdGVkX19Jat1CT5qD0nuUP7M1VX41YwXjZwF9GgJUKxqySAjQpzD7njK9MQl/5Lhakeh73yPjCsQbsemK2flS4WCU4PmKehTxhPs2wuWNzKeUZLJlnIe/bkypOjEH6+cV5lGFmDfQKKHw0e0EIgTz7ED9AFxsj/lk5qSSOfH9ZamRItW3FmE1QEupz7G3PrdT/zfG6Ro9mKfqJ8Fgsna/0atuBZydxGjqKtxfPbdb+vXrUhd5M0egRrdQRIiej2Yg9oSUEHkb2saPn9qV6xP8XghOAgyxHqxrPRhL17mMVIPMRZ/h0j0+CLt15oND3qGE0M2p+OIZpAv4pMpUw9D39dD7XptvZtYynn1DJJ/0HqHhRG4NBhs+w/oYgQODE+sVLg4pPStytNeUXRkM7KkGINTlbitHdKBSKNCisQYbDoGXAybfoOr0jClUkaOckZXkUcG1KQ5m26qqyynhJq2gb9euysQXgatQD9MnqG99+pcI+mDRh/XjgJKkvrTQrfInoSCHhSTCew+inJcwHImO5ybOUjJu104AneIY2kky8R3e0PfOjLfZfnmtAQTX3fzYA9GdWAU6Ln4ZvCC5k34FJzl5hmjTywnjMZAvjZloLaFsT5bSL6lzoDc8Q0+GKLqYCZe1iP3DhzB7KHB1xrkyq412g8EYBhjhWbvQBQ62xHOhpCBuYwzEBW8onqmqjlYgvQEyRphgpSIldQOSaPv3tl2d0kasDuPx9/eqYl325KVknZ4Z32v0WfvHiFipcj4sS76hlDtb1et+mGFK/ImVFyTV63BrBsNJuWgWTmy1JUfHafOnctReO3uep1YzuNiTzHJ2g6nHjq7mLFAwaniMUz3Spv/BtQGBQSNa1hme3wLaP1q5+EvBoZtRvJ/5J5e35fW4NPNHfmTn4ncjfhYwMXxUTSYcrlVE+CIY0v/xd8Dj6a4ulYUi/ZNPKFnG+F7IfwA9DXWDCmgsb21 /pXut4L5 14pujnUqYrtW15mJuasqP+mv5dIH5FgxcPeBf2lyj/CQqfWbNaKZHgLHjzmU2QKRUutugvVbIxnMWrNWm6H1XlqpZN1NhK1qZenJ2af7BxiYaC8/mlPzntm0zpX5Wv+/1i5W1ha2Vn0y16ephs76e61c0rO2xvaLvEwLCoE4kKYsI0Jhz6RrUAe8GPvWApSq6GWZN0Fn8F0pB0jvzqH4tPlC9vzPvYw9bP/fi9r3yt2WTrvkvJwWItDf7PXvkmlwi+ivJjYk+PJVdpirehx1EPtXzZrK7yfWTbwGI6ELEARSKq2fUjJHV3GzuCgdHpFwZKrJ4HLZTZxPtPoTCpShBlmKC1UY889RH1DjSGov4AmaBFvqxBO5gWb1ySrF7JKeIMRpk1YBBwd0cYavEaH1nGY2sKcV36MY/GWAb X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the xfs-qm shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct xfs_quotainfo. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/xfs/xfs_qm.c | 28 +++++++++++++++------------- fs/xfs/xfs_qm.h | 2 +- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index 6abcc34fafd8..15ba23f11271 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c @@ -504,8 +504,7 @@ xfs_qm_shrink_scan( struct shrinker *shrink, struct shrink_control *sc) { - struct xfs_quotainfo *qi = container_of(shrink, - struct xfs_quotainfo, qi_shrinker); + struct xfs_quotainfo *qi = shrink->private_data; struct xfs_qm_isolate isol; unsigned long freed; int error; @@ -539,8 +538,7 @@ xfs_qm_shrink_count( struct shrinker *shrink, struct shrink_control *sc) { - struct xfs_quotainfo *qi = container_of(shrink, - struct xfs_quotainfo, qi_shrinker); + struct xfs_quotainfo *qi = shrink->private_data; return list_lru_shrink_count(&qi->qi_lru, sc); } @@ -680,15 +678,19 @@ xfs_qm_init_quotainfo( if (XFS_IS_PQUOTA_ON(mp)) xfs_qm_set_defquota(mp, XFS_DQTYPE_PROJ, qinf); - qinf->qi_shrinker.count_objects = xfs_qm_shrink_count; - qinf->qi_shrinker.scan_objects = xfs_qm_shrink_scan; - qinf->qi_shrinker.seeks = DEFAULT_SEEKS; - qinf->qi_shrinker.flags = SHRINKER_NUMA_AWARE; - - error = register_shrinker(&qinf->qi_shrinker, "xfs-qm:%s", - mp->m_super->s_id); - if (error) + qinf->qi_shrinker = shrinker_alloc(SHRINKER_NUMA_AWARE, "xfs-qm:%s", + mp->m_super->s_id); + if (!qinf->qi_shrinker) { + error = -ENOMEM; goto out_free_inos; + } + + qinf->qi_shrinker->count_objects = xfs_qm_shrink_count; + qinf->qi_shrinker->scan_objects = xfs_qm_shrink_scan; + qinf->qi_shrinker->seeks = DEFAULT_SEEKS; + qinf->qi_shrinker->private_data = qinf; + + shrinker_register(qinf->qi_shrinker); return 0; @@ -718,7 +720,7 @@ xfs_qm_destroy_quotainfo( qi = mp->m_quotainfo; ASSERT(qi != NULL); - unregister_shrinker(&qi->qi_shrinker); + shrinker_free(qi->qi_shrinker); list_lru_destroy(&qi->qi_lru); xfs_qm_destroy_quotainos(qi); mutex_destroy(&qi->qi_tree_lock); diff --git a/fs/xfs/xfs_qm.h b/fs/xfs/xfs_qm.h index 9683f0457d19..d5c9fc4ba591 100644 --- a/fs/xfs/xfs_qm.h +++ b/fs/xfs/xfs_qm.h @@ -63,7 +63,7 @@ struct xfs_quotainfo { struct xfs_def_quota qi_usr_default; struct xfs_def_quota qi_grp_default; struct xfs_def_quota qi_prj_default; - struct shrinker qi_shrinker; + struct shrinker *qi_shrinker; /* Minimum and maximum quota expiration timestamp values. */ time64_t qi_expiry_min; From patchwork Mon Aug 7 11:09:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343693 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 B7FFFC001DB for ; Mon, 7 Aug 2023 11:18:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5931D6B0074; Mon, 7 Aug 2023 07:18:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 542B18D0005; Mon, 7 Aug 2023 07:18:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3E36B8D0003; Mon, 7 Aug 2023 07:18:33 -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 2EC446B0074 for ; Mon, 7 Aug 2023 07:18:33 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 013BCB2123 for ; Mon, 7 Aug 2023 11:18:32 +0000 (UTC) X-FDA: 81097060506.25.96ABE96 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) by imf28.hostedemail.com (Postfix) with ESMTP id 0B97CC0025 for ; Mon, 7 Aug 2023 11:18:30 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Zyx6A0ES; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf28.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.46 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691407111; 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=WPvD0YF4yF0E/V3NMttF7YVdRMfLZcl9Qmy2whUD9jE=; b=fvch8iD3UoHqmKGZodOu01SJeYco9K8oRZt8drxfpLOgXeaW03oV1c5jJ90tdZhpWkhAn4 SSoZ+O92rBc9xbPOIfjmO+eO8MK0urPAV9j6dOCOX0QHJ2srCZK+YdURdjqnOAI01hvS0O UkRLfYQ7x/QPxok94lDLdZPPL9i+Rr8= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Zyx6A0ES; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf28.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.46 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691407111; a=rsa-sha256; cv=none; b=WfP6m7DpScSnu22dohq21jdDGnL9uACAk10Ta7N0A1Rxe7jb9IjVsDWCYeJLq4+tL4WLIv LBNnxW8LR4ubWDk0BXzTFVdDC80mPOh4GwwIhSb0KNwa/4l379HeiUyHImJ/pB/aqEscXn /0qFBs791eLkKLgwud8hAJK+j2KT3Dk= Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-268f6ba57b5so625451a91.1 for ; Mon, 07 Aug 2023 04:18:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691407110; x=1692011910; 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=WPvD0YF4yF0E/V3NMttF7YVdRMfLZcl9Qmy2whUD9jE=; b=Zyx6A0EStcsVwcUtmlmHBj8SZuYfnooxelT8QMOYXSAyp4FCbwtu0BbNt7l+P/wBJj 3uKMQnjNsG7kojYgy7WxPCZCDaFjHA3Lkyvej9QWnqL7VojGrNrN9hCPJG63fZ7FoTcQ O0E54wIoRR4I2PoVCGsys6mtB59u+SgFkM0Y7fE6r6JpnE869MmShYbt1p4JfBRV0wIx 7GkvLsY4v9shjjU3+1o+arkgzF82WBo8NnslYR1Cfid19C5zIsiC0KJHBzW/oF+sMC5M xApENfMLb6T9Hu0suHBowRs4nuIaRY0OBNI6a9JHKGzdE5XR+fVrCSwS1eOLCHlN+w0k LsQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691407110; x=1692011910; 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=WPvD0YF4yF0E/V3NMttF7YVdRMfLZcl9Qmy2whUD9jE=; b=SvqMVZ2JLT7UblSksD3s7qA6tY1P+PNvOEmVgilIBUV6pwxLMy30DsHpyodaFPrTKL AV1Jl2T6g73gfsnXYofs+KCK8gk0tKz1iUXoLeKNIjS2LaG00G7Vei/Q2dPDRxAdnHED b7m06Gzoflzm35z5TqycOQJq98BXaTC024GAx5tAwCU7aJtkF2ri6xfPXWrHbcmp919D ds/nXrPZxkJOyceEAwOErWBfOn6mla6uIvlZUz52FR1Nab9LbhbdtYYvcBzM9JY1JF5e pSPbcCIpcyDgNNQv5ouBn115/1ibeEK8/eKSlgcuZM6jp7CG5NRj8UpMK2iEv5Ajw9zI DWnw== X-Gm-Message-State: ABy/qLaOu2sAtwSRQMTyytvktQhSGEEMiHJcbT93XoY3MqKq9vLU/BL5 hFGGvA/5oRqDD0gOhr6tU0mHmQ== X-Google-Smtp-Source: APBJJlFnoOazdp9TvNa1Sdutczsv0h+KjLn+q+TQByEK163E+9f/k1cC7rmChP+7R75WsTDRsF4HxQ== X-Received: by 2002:a17:90a:901:b0:268:3a31:3e4d with SMTP id n1-20020a17090a090100b002683a313e4dmr23078917pjn.2.1691407109946; Mon, 07 Aug 2023 04:18:29 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.18.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:18: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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 40/48] zsmalloc: dynamically allocate the mm-zspool shrinker Date: Mon, 7 Aug 2023 19:09:28 +0800 Message-Id: <20230807110936.21819-41-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 0B97CC0025 X-Stat-Signature: mkiq8jdmgfc3szehf5n3gan1k9nez8xt X-HE-Tag: 1691407110-934988 X-HE-Meta: U2FsdGVkX19m0dPmb3j44FHn4T+UonFDri5Us8/QI8cPQ0sCzmvWOEqGdyl55naU8ppTaFbQoH1AVP5Zuj8tN68HZFxTwFnvvD61LbutF9V1v8xaLIXEPC8ZYayXptpKES+OWNag0lWKNu1eEi1i0RVP5Dfk/KCkxLGOyJyAF5w93BBU/Smf3Tt8LKDyQC72bzXicX0IJTTi0lQuGcoW4yBOPH2keAHEJOg82wGx5k3onL0Kizou0v0qTby+pW7OwdBhHp+WBGiR7QqipI0+a1NOsJpCefssJQsTNhewyVCCazAQFrPjoG+14Ze4yYQokM7BkjcpuqztRJRbKRu+BfilTa3E2pYp4TUUloMwIpvIbMFnzxJ4MvMxZvg7t+iCYmcPnkvzuB7FTt5XDP/WwwkCUg7AMNrs3aCL/jWvIVRz2jvjODKuYugrS9kyydr6T00OxfgBKYbbw6dz395iBwq47FQ0a/VzHswfsJhWZhsUJ3rfrsunzzPt+z9HdnVkwtXT47izzTOp+H8GA16E8CzTwNXnVbcNNYXAR3u23B9Arh8qZ8nwIbZSu/0Ylu/HXpHv72C0TtBoarvNG68pVLQGIsf5DIDpWuZ19JpanMwEVlR9hZsmkcBGOShiiEtLUkqbXamzA+o0iru5yWiFpNglUZBgNZl/tHFDWZbCzMl00nHFVI9XoXibSH1dyE4+xK5yYItM4vD8dUq5zHcNYDhj0BWv4OySg6/SSqirYmhJ/maQLiehTz8QA0NkZWemDiPQ7O8SOfNqsdY4nl/9leLfw2H4MZu9cQSryK+5RkBoLfnofk5Gt4oSDzHme3VlE7TlZ+TWvze47q1ShntKkkjsWqZeP4r8LPT+PwSkp6P4TGQHMoR+RtpKb7QY0/zrgH+bo4yVUAMmK5VK+ViWmKLA7FsPQtWgdcNCLywowLDFqxuCNIcNyTy6zM70+S15CNXuCq88D9mb5eCP7ux sK1qFEq5 9QkRV7NWxN8Lr8627fAJRdzQQBbiuZSMNR8HT9ZKRouKi8F5DK+DuLDpAPj70v9Y7diudpSiR20E+NGi8zEnk4QLl1kwwe8vHG1W8CEsp9Z0Z8H6oCSOMB6uu9S3Mo5oaRZ9eFXpgfAg3eqHWk7r6fSKYiNwebgkYs5HU+aorykpG5Dack1M24TO+iztzCjdfBFdWVNeb77fb6MeyVqof7etawcCIlNzK4rd4xkt2EUXYebLon49+DUK4SADTRqmLIFniwff2ozgNaxtnhyrub8YBichPwjLqz2CaM8u5ozmOJbaAd4DeAI2V13R4xcAPN4GsJvQahHDncOLihJoB+kNCGSyYq7/fFuN4TDKcEiVrEmyjwl0krCiHajODOWcb3kH6nDQ7aPlO7K40gdBwsTTXQkgfdkTFpOryUHP9+rhk1QA7qgvO6bGGWZNJ4RMMZJ3tJjOfOzjIqQA= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the mm-zspool shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct zs_pool. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- mm/zsmalloc.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index b58f957429f0..1909234bb345 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -229,7 +229,7 @@ struct zs_pool { struct zs_pool_stats stats; /* Compact classes */ - struct shrinker shrinker; + struct shrinker *shrinker; #ifdef CONFIG_ZSMALLOC_STAT struct dentry *stat_dentry; @@ -2086,8 +2086,7 @@ static unsigned long zs_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) { unsigned long pages_freed; - struct zs_pool *pool = container_of(shrinker, struct zs_pool, - shrinker); + struct zs_pool *pool = shrinker->private_data; /* * Compact classes and calculate compaction delta. @@ -2105,8 +2104,7 @@ static unsigned long zs_shrinker_count(struct shrinker *shrinker, int i; struct size_class *class; unsigned long pages_to_free = 0; - struct zs_pool *pool = container_of(shrinker, struct zs_pool, - shrinker); + struct zs_pool *pool = shrinker->private_data; for (i = ZS_SIZE_CLASSES - 1; i >= 0; i--) { class = pool->size_class[i]; @@ -2121,18 +2119,24 @@ static unsigned long zs_shrinker_count(struct shrinker *shrinker, static void zs_unregister_shrinker(struct zs_pool *pool) { - unregister_shrinker(&pool->shrinker); + shrinker_free(pool->shrinker); } static int zs_register_shrinker(struct zs_pool *pool) { - pool->shrinker.scan_objects = zs_shrinker_scan; - pool->shrinker.count_objects = zs_shrinker_count; - pool->shrinker.batch = 0; - pool->shrinker.seeks = DEFAULT_SEEKS; + pool->shrinker = shrinker_alloc(0, "mm-zspool:%s", pool->name); + if (!pool->shrinker) + return -ENOMEM; + + pool->shrinker->scan_objects = zs_shrinker_scan; + pool->shrinker->count_objects = zs_shrinker_count; + pool->shrinker->batch = 0; + pool->shrinker->seeks = DEFAULT_SEEKS; + pool->shrinker->private_data = pool; - return register_shrinker(&pool->shrinker, "mm-zspool:%s", - pool->name); + shrinker_register(pool->shrinker); + + return 0; } static int calculate_zspage_chain_size(int class_size) From patchwork Mon Aug 7 11:09:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343694 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 C360BC41513 for ; Mon, 7 Aug 2023 11:18:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 62EC46B007E; Mon, 7 Aug 2023 07:18:46 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5B9CC8D0005; Mon, 7 Aug 2023 07:18:46 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 40AE18D0003; Mon, 7 Aug 2023 07:18:46 -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 294BD6B007E for ; Mon, 7 Aug 2023 07:18:46 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id F263540978 for ; Mon, 7 Aug 2023 11:18:45 +0000 (UTC) X-FDA: 81097061010.10.AFE0E45 Received: from mail-pg1-f177.google.com (mail-pg1-f177.google.com [209.85.215.177]) by imf24.hostedemail.com (Postfix) with ESMTP id 0E6C5180019 for ; Mon, 7 Aug 2023 11:18:43 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=PfEVKvTz; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf24.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.177 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691407124; 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=AnO+VrCD4LojLy+8kmnCjGg0ZRt7Zy9NIxA02Cs4pZw=; b=3vh5cJyajCWcuKt1ajTjCu2/lvGaWF39qYCwvPrexZ4pQmGztmFBLLrFATMgcGyQcAu0H7 zzvK/NV5888FPp7JVZ1Rw/h5qGT9cc3/BDu54ms7jUduAFuWHcsHEr2fPJ2w7GhkXeRcYn OTjFmribHlaxtzCmp+pLvrrTjusuEBo= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=PfEVKvTz; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf24.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.177 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691407124; a=rsa-sha256; cv=none; b=hz/D4ygnWct0hSS+RtrlWTEKGrOH1i0QzI8QQPIgEYw1gFzMCYG+RZ/Enipe5NePZF2p0q iuX5+IqZEYL2RC8EQynRQ+eRNBrI856G/oz0v0n15V4Ez/cJFxUMIb5n0hKnpdHJP8uW0T kJsTvDkG2EqOW2WtJH9202PfPlUn/hw= Received: by mail-pg1-f177.google.com with SMTP id 41be03b00d2f7-55b5a37acb6so362922a12.0 for ; Mon, 07 Aug 2023 04:18:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691407123; x=1692011923; 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=AnO+VrCD4LojLy+8kmnCjGg0ZRt7Zy9NIxA02Cs4pZw=; b=PfEVKvTzBWRKzDZcOs/Fep65btb/5j6s3WDHceANi3UdyfyE1ZYJjj/ojCsgHi3Vd1 UnyiA9UJ+WO0skTyzkklbevZFVt0QM5P026zpV9irULg/dt9elBIaT9aO85mKj85kzSK 8BL7WAzqEgJCUSOrld3eSg+Xi6Bj/nVLlSU4qlnz3r3ovJoXr2T2o0DtWh8ePmCGKfhu 8HAbYH+dcq7rqiPTVsEp3knKk+0ZUdZ34RURzik4J4PgZDJhHLpdrzH5JSXxHECtRx3a erZSmwbY1m1zt8qE5RzbmfCM7KzyvNBKjG86UwibulZ8+wpz72tXfP+ENX4A3BoRP40M UhJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691407123; x=1692011923; 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=AnO+VrCD4LojLy+8kmnCjGg0ZRt7Zy9NIxA02Cs4pZw=; b=aOtn76NGPHEHS66B9a1f2YHjZCLiMdyCwBcDGf8XuNQl0PkXerKdQ+2jpzEjd6ImCL bEUHYdJgYczv/CT2ImlDK4KK9vsBUvh7x7lF2QDVP+16eNo9YGjg197wU0VIrpzYv5Nr pGQSDIeWJMRk0NqY/ge3UHMIeW1+tzGLPAd2UVjyyvWf5GSVnqOpDv1s1mtbjYdGN9Hy 4a/vHQTdnbGdhGlbHjjiKvdS3g6pm5eHd32pGcWbLBWo45tvK0J9dO6GtoZOJ5UsUmR5 VjyBfyH8i/OzxnvuT1dFMsFAkJEnnVhYqeZF8XnUcsaWKSNB4ZaoTgEz3ikFE/w6XxSg fg5w== X-Gm-Message-State: ABy/qLZ+MSTHWLbEnout4xbPamXokiTQOownk+xbTR///OU38QyIIq1U rVpbhm+EtWrBACHjmUzlTNSZ4w== X-Google-Smtp-Source: APBJJlGN7o+mPwW+D250kL/E75whSiIFGnI9vIACxkViJa+uI/EkAzzWgkZZOw/GfOlqJQ+tGCA4bg== X-Received: by 2002:a17:90a:3f08:b0:268:1e3b:14c9 with SMTP id l8-20020a17090a3f0800b002681e3b14c9mr23489214pjc.2.1691407122942; Mon, 07 Aug 2023 04:18:42 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.18.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:18:42 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 41/48] fs: super: dynamically allocate the s_shrink Date: Mon, 7 Aug 2023 19:09:29 +0800 Message-Id: <20230807110936.21819-42-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 0E6C5180019 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: afd3mqsnw7iq14dprn9z9okgcjiicg6j X-HE-Tag: 1691407123-457234 X-HE-Meta: U2FsdGVkX1/FrPDiQ3Qgik4FSnVSvdLax0ODiFlKBbuq42Lh20kN4MyvWIi1MfzrYzfTlCSySpfAQ+0gQ7GxAiGiFc1YU35bUsgDDd6MRcvaCpi0NU0zcVrnCFGZrRPBKrbo3CG4/2pzBXb/FSh3MeVNdWc8j6J5hxAs4b667jnmEPpsEYGXiJJIqJQ8dP7FdbLZXRix+0F4O0PiA/+TN5UawC0eIKmcZB0XYM+Tw1ziU+3h4GxRG67r+SHtzt/8yt+69lvc1WkLHblvzl6SSjjPPrAZRmbOLndT8t384qnilyU869lllqa5cTB8qtCZgsQaY6N4UH7c00aXu7zbQWTjO0D4K6BPotI/pOohTmDVe2nARXl0vZPQmiwWP7n3N5NVv17ZfoX11y5j4MBGVAlcqmzqP0cTJE1C2WzVSUuv6NL1frH6ujzJVekVXRwoP8wY57G3/Jl/pC5uKxXpU2v3O96V11sP8/+K1zyAMgUW+HaNNTMcsObwSoi2cZsl5AORBTguKFu4lsbNQMArQaZU2TVYPLC0DX7SFo7DoyTP//j9lSs9zG7IH3UGmcAyssD6RJZ05g0v+ELt3L4ecX9F500Rh9iKsXiGhiPjSl8jbjIYmy5eUEsD3dBb/L+T0OmO7m/kC1lbPcvrRvoWO1QwLcQCrCaSxWDfNhtOF05IchvRZMt14t4Br/cmf9WzpGNdC34ThzchSe3d8J+36PfrzxSWVPpmJeb6yMqSvTL5lnx0tshyLqwYlyHwORJhpInuIhzm4n9Lf6Cti+smMEN24C2DfvkfQqyneWpD439eJSFmhY58x279wFYGqo9qT3GW02Ng+sNIj+jnlUEN2CrgTeaJWtRd4JYc8mH0TBGgCE7cCrvaNyFKAG5LllMtmTpSWvaQtpL0RTP6Xq8sLtB8pNWcs5A1fD+t5cJsfawxB8tznLczpR7NerEDG9xIYDdyclDhQ8sQYspsQso Yr27c5zP g0x59SXzdY0YFyXRY3WkyvXdVxzt8wnGwkKolH8lWkcICu0w12lG64yhaOZrKW+vcZFSpJzXRMftSojQxGBwIFj6VtDYfRBob2exxpGkG3h0gbS4Ue7nf2lsRglsF77RnO1ZTYLD9iNv6GDQlfnPiDNCXldX7nlqoAV3IjPrFUBca2tDnX7vL3tacOo2Gou82g/G+eRnpbZyUM9Ic8h6IFkQe+L1uciP/qn0iQMkCydVkiWkj7Q0SxU385CDfNXl7CVOs19pD0ZrGHvGWpysWTpbCQ6t+iaf8FV8pbneK4BKzoAr+UZ7MoEybxUUh08hsm9nofsDmypWrFS6xsbqerLbx8IYI170ulpbHDUtHFYj1V0xM6rJTqfWj5DdWz81ukcW8cIU35JWDNby+0s6hAaH4EG7rh/8RzoZVebHhdnnl5Hpm/r2e3QoRYXDvzf6yfAk3h5HHe6Mg68VQBqGnY4IIpQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the s_shrink, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct super_block. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- fs/btrfs/super.c | 2 +- fs/kernfs/mount.c | 2 +- fs/proc/root.c | 2 +- fs/super.c | 34 +++++++++++++++++++--------------- include/linux/fs.h | 2 +- 5 files changed, 23 insertions(+), 19 deletions(-) diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index 5ca07b41b4cd..c6980fc6fe02 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -1514,7 +1514,7 @@ static struct dentry *btrfs_mount_root(struct file_system_type *fs_type, snprintf(s->s_id, sizeof(s->s_id), "%pg", fs_devices->latest_dev->bdev); - shrinker_debugfs_rename(&s->s_shrink, "sb-%s:%s", fs_type->name, + shrinker_debugfs_rename(s->s_shrink, "sb-%s:%s", fs_type->name, s->s_id); fs_info->bdev_holder = s; error = btrfs_fill_super(s, fs_devices, data); diff --git a/fs/kernfs/mount.c b/fs/kernfs/mount.c index c4bf26142eec..79b96e74a8a0 100644 --- a/fs/kernfs/mount.c +++ b/fs/kernfs/mount.c @@ -265,7 +265,7 @@ static int kernfs_fill_super(struct super_block *sb, struct kernfs_fs_context *k sb->s_time_gran = 1; /* sysfs dentries and inodes don't require IO to create */ - sb->s_shrink.seeks = 0; + sb->s_shrink->seeks = 0; /* get root inode, initialize and unlock it */ down_read(&kf_root->kernfs_rwsem); diff --git a/fs/proc/root.c b/fs/proc/root.c index 9191248f2dac..b55dbc70287b 100644 --- a/fs/proc/root.c +++ b/fs/proc/root.c @@ -188,7 +188,7 @@ static int proc_fill_super(struct super_block *s, struct fs_context *fc) s->s_stack_depth = FILESYSTEM_MAX_STACK_DEPTH; /* procfs dentries and inodes don't require IO to create */ - s->s_shrink.seeks = 0; + s->s_shrink->seeks = 0; pde_get(&proc_root); root_inode = proc_get_inode(s, &proc_root); diff --git a/fs/super.c b/fs/super.c index 2354bcab6fff..a28193045345 100644 --- a/fs/super.c +++ b/fs/super.c @@ -67,7 +67,7 @@ static unsigned long super_cache_scan(struct shrinker *shrink, long dentries; long inodes; - sb = container_of(shrink, struct super_block, s_shrink); + sb = shrink->private_data; /* * Deadlock avoidance. We may hold various FS locks, and we don't want @@ -120,7 +120,7 @@ static unsigned long super_cache_count(struct shrinker *shrink, struct super_block *sb; long total_objects = 0; - sb = container_of(shrink, struct super_block, s_shrink); + sb = shrink->private_data; /* * We don't call trylock_super() here as it is a scalability bottleneck, @@ -182,7 +182,7 @@ static void destroy_unused_super(struct super_block *s) security_sb_free(s); put_user_ns(s->s_user_ns); kfree(s->s_subtype); - free_prealloced_shrinker(&s->s_shrink); + shrinker_free(s->s_shrink); /* no delays needed */ destroy_super_work(&s->destroy_work); } @@ -259,16 +259,20 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags, s->s_time_min = TIME64_MIN; s->s_time_max = TIME64_MAX; - s->s_shrink.seeks = DEFAULT_SEEKS; - s->s_shrink.scan_objects = super_cache_scan; - s->s_shrink.count_objects = super_cache_count; - s->s_shrink.batch = 1024; - s->s_shrink.flags = SHRINKER_NUMA_AWARE | SHRINKER_MEMCG_AWARE; - if (prealloc_shrinker(&s->s_shrink, "sb-%s", type->name)) + s->s_shrink = shrinker_alloc(SHRINKER_NUMA_AWARE | SHRINKER_MEMCG_AWARE, + "sb-%s", type->name); + if (!s->s_shrink) goto fail; - if (list_lru_init_memcg(&s->s_dentry_lru, &s->s_shrink)) + + s->s_shrink->seeks = DEFAULT_SEEKS; + s->s_shrink->scan_objects = super_cache_scan; + s->s_shrink->count_objects = super_cache_count; + s->s_shrink->batch = 1024; + s->s_shrink->private_data = s; + + if (list_lru_init_memcg(&s->s_dentry_lru, s->s_shrink)) goto fail; - if (list_lru_init_memcg(&s->s_inode_lru, &s->s_shrink)) + if (list_lru_init_memcg(&s->s_inode_lru, s->s_shrink)) goto fail; return s; @@ -326,7 +330,7 @@ void deactivate_locked_super(struct super_block *s) { struct file_system_type *fs = s->s_type; if (atomic_dec_and_test(&s->s_active)) { - unregister_shrinker(&s->s_shrink); + shrinker_free(s->s_shrink); fs->kill_sb(s); /* @@ -610,7 +614,7 @@ struct super_block *sget_fc(struct fs_context *fc, hlist_add_head(&s->s_instances, &s->s_type->fs_supers); spin_unlock(&sb_lock); get_filesystem(s->s_type); - register_shrinker_prepared(&s->s_shrink); + shrinker_register(s->s_shrink); return s; share_extant_sb: @@ -693,7 +697,7 @@ struct super_block *sget(struct file_system_type *type, hlist_add_head(&s->s_instances, &type->fs_supers); spin_unlock(&sb_lock); get_filesystem(type); - register_shrinker_prepared(&s->s_shrink); + shrinker_register(s->s_shrink); return s; } EXPORT_SYMBOL(sget); @@ -1312,7 +1316,7 @@ int setup_bdev_super(struct super_block *sb, int sb_flags, mutex_unlock(&bdev->bd_fsfreeze_mutex); snprintf(sb->s_id, sizeof(sb->s_id), "%pg", bdev); - shrinker_debugfs_rename(&sb->s_shrink, "sb-%s:%s", sb->s_type->name, + shrinker_debugfs_rename(sb->s_shrink, "sb-%s:%s", sb->s_type->name, sb->s_id); sb_set_blocksize(sb, block_size(bdev)); return 0; diff --git a/include/linux/fs.h b/include/linux/fs.h index 9515d3688f71..1464afd41164 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -1263,7 +1263,7 @@ struct super_block { const struct dentry_operations *s_d_op; /* default d_op for dentries */ - struct shrinker s_shrink; /* per-sb shrinker handle */ + struct shrinker *s_shrink; /* per-sb shrinker handle */ /* Number of inodes with nlink == 0 but still referenced */ atomic_long_t s_remove_count; From patchwork Mon Aug 7 11:09:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343695 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 82090EB64DD for ; Mon, 7 Aug 2023 11:18:59 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1C2666B0075; Mon, 7 Aug 2023 07:18:59 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 124928D0005; Mon, 7 Aug 2023 07:18:59 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EE1578D0003; Mon, 7 Aug 2023 07:18:58 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id DD9AA6B0075 for ; Mon, 7 Aug 2023 07:18:58 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id A6B3D120A39 for ; Mon, 7 Aug 2023 11:18:58 +0000 (UTC) X-FDA: 81097061556.22.3DFA238 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) by imf23.hostedemail.com (Postfix) with ESMTP id B164714000C for ; Mon, 7 Aug 2023 11:18:56 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=F7XshDjI; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf23.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.52 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691407136; 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=G6s8y0Dka4KE4srOwy3I0FSAaIGrcYmvE6JrVZfCpDs=; b=C9igvMWqTaEpWVLwxlngn5fa+iH1z9jvBjIfS6eoPIsU9NZEbJUF9B0O1CQLhgP8wXdgeT gfxwAixfa1jmFLHkR1BhvqgfTtNLruIcenP2y/tXojg2WUjukx6T883hS3FUWrJk6tMMH3 l2JaCF2F+DVoizSadF8pK5GNehC5TAI= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=F7XshDjI; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf23.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.52 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691407136; a=rsa-sha256; cv=none; b=SeG/HdcfenLI1bjIy2EWvbNvS8VzjBtSiS9j9V84YZldmgAE5BngkoLEwr0SaPkw6Afshl maZHwQuP8XP0mrS2o9Y85oPzbs983POH9LbWXQsbtrxKXKBEEVoyp/tX9Ezy3MLX7B0Lx1 XKUg99zQvsoH4lVb5NzPKRENx9UNbAY= Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-2680edb9767so931395a91.0 for ; Mon, 07 Aug 2023 04:18:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691407135; x=1692011935; 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=G6s8y0Dka4KE4srOwy3I0FSAaIGrcYmvE6JrVZfCpDs=; b=F7XshDjIR6gshLCWKrdL8cyHybumA0/QTbPgZKuavvkyWifyhyd8BPMZmPX4yYKyuR FqCSmklkv54KgX1wnfbIyihDlZ+e496yGoiYQIhi+0ixsCUryfshptm9G6dp+SRnN5FZ 14VdUNX9Rmk7l5AkZvhyOA8ndezzsKV7UULQBi3lhNzHrS31pQni36O5M2aWjlsy7K8I o85BeLJKM7bNO8S7mlfBATfdEP7ozNpVuz6OBa+5fivR91DGlVYeJ7lIDECv66TYSV5p 4CyX1RUktrUPPn4ZHlIEu6EqOTTTT5xmI9T+Qsmwod8lVyyIBYN72T68dyXuYMVy1bdZ 5S4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691407135; x=1692011935; 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=G6s8y0Dka4KE4srOwy3I0FSAaIGrcYmvE6JrVZfCpDs=; b=V5d4+mnljXbqhXO/W5CT+3B5E6+5aOSDSv9xjVppTNqPOPv9pfyYlGXO+T22hMtW8t lCgR9pXEyHL7JkTTCQNga3bfq2hAw8FpVUNifQVXCpFSPIczEagNNr1SwNHsCNu6c9gm pL+nQAGrQ+YgadVcbVKlV1zzwUMzRC4QcDn3xpQlRfp+cavVvYUovalmubcon1p8f8U7 bbJtwuSJI7vy2M2BQ8MxmtOfZ9fC5Q54J8zN5fBwXtksAuhjJqVvmSLkxVSD9Y4hhF2b jkAH+TG8KsqQJ7M2V7ngcK5OaGinzydeNOBHDGvNmFtsY4YtHkaTR2AuTGBJ/1MUAeEb wv0w== X-Gm-Message-State: ABy/qLZkqyYCY93nmYPG/2Upm/h+A8yvlRIVaJJyKogFBNwObrbzbMZi Oo0R/7PjHfjSy1E5qUenLQSqGw== X-Google-Smtp-Source: APBJJlENzs/96m+S7UnwJhfsSEKfLFwoWHJhRek0zeax/GsXgLjOrIeuu6U5nntKJfSobDso4iAXPQ== X-Received: by 2002:a17:90a:1f83:b0:268:3dc6:f0c5 with SMTP id x3-20020a17090a1f8300b002683dc6f0c5mr25042984pja.0.1691407135598; Mon, 07 Aug 2023 04:18:55 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.18.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:18:55 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 42/48] mm: shrinker: remove old APIs Date: Mon, 7 Aug 2023 19:09:30 +0800 Message-Id: <20230807110936.21819-43-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: B164714000C X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: 7asr6adoj37b1km51eseonxxxa8z53yo X-HE-Tag: 1691407136-441754 X-HE-Meta: U2FsdGVkX1+pBv40ZhFclNJRWquHPkrw9NTSfRVNWKrEzO/oyZTjVRRtIsswOsqjXxghIizZUHCXYKp3ZBZ3lp600JG3xsMGRAzI9fGcUzEar8jhfFHHpwGU0uUjW69812wAfSUFYT2K5WoJKshbVFE66pzEsbjqAGwui0YZSuWhi2ruD9TjZcv4UiwMg3fEVvEGYMHtePNXQbhpOtvxhQUSSwhK4iRpFnLAli2YkI27zM9ZTA8sr7cpxb+Di9x7JTwMvzh7q2DB3OZqV2yNJajdkE6DWGWYcqrIx2dXfooAPNF96PXYAyyTkINIhJBLyyIMM9FcID8ZFPrzHsFsTFfx4GwCiMixtT26ZvoHaQ5vGzm6yPQcJLOUUmNuJrit2VIKh8/BP8pNpb07dfKVK43BIcAu6a4+NQo05RFQMsw9d52S2y/VZFLOrNKe3HIm7fCRC1lYX1O6Ht08wK6wNsDF1OwLJiSCdmgamStsmFKCVJ/EJWm6neT75HzhZUhUCaTGBXPbxZ41SvQMCN3LDe/GZhaTimvSIbbN1Hi+gb5kAkfWCW2XHAgnpyUMiZH1uP/Yb3UffVm5GTsK+Q3bqL5tY1H5YjcHt6p3zY2OXQRPN5QXap1FJGzPrepWlTaAnmHw42ofrgqCjO61hIGkkxo72nDbJVUWdGw5uSDQP8mqFDz1p5CjUHnt42nEJXtmCqpMVkO+OVq3ooN2Mq3bStqzI+3mn52U3gxi2y4le7ZuekybtY+nsn1TclcEGrYTzq0FUqlp8Fhie5im95uP9CMejwH+SEA4ou+ZsJFmONtOoB1quIXMAp6RXzT7+r9VrTygylteJVrCn9Nqj0+UUfZJLH+NgfNOq3d0XbCq9G9yi0xt/rhR0tmt7EwHghBfk8NFaPWFEYSMhoX3FasuM1OlHLSZ9yDTza2WtO6MkNZBSrUuocN645DC6dsOtdwFP7/gafrxsMVtSci7EJa TeIvvXoL 1BJZj8PAMX2GRpFuBWJ46m0f0+EdyawFKB4FACxnSzPwftPia8oWKZEqxBS+oBnZ28m5zJ+f62Bbx5Zh5RncF+cYtvb93lmGynkQdt4VLLWM787ZbbYw7ME3ROdQiHa5Aar35Ec9TrjRvZhl/TylY6g4x90jf1elCSVO4UNrZflsNoQNyWTCSKxAy81nwWw0vXqkTSsLMRMJQKyMnN+xm2szca2ifFbKsYUaeEYM9Eo3atuShEZIoheBxQIyWdLpToUUNjJiCKyvQbTsH0rETk1TfIL/zq48S7Ewij5LOqyrgYqCA7bciei4ouT+bwjLI6es6fUrek/QkoowrVDszMBOWf66QoT0FSKkO8CkxSsZtLjNLlJBZGkJszU85z9zDerG+NiZPuq/WtgGeN6Yzz+/+vWbBUaOFrwDU X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Now no users are using the old APIs, just remove them. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- include/linux/shrinker.h | 7 -- mm/shrinker.c | 143 --------------------------------------- 2 files changed, 150 deletions(-) diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index cc23ff0aee20..c55c07c3f0cb 100644 --- a/include/linux/shrinker.h +++ b/include/linux/shrinker.h @@ -103,13 +103,6 @@ struct shrinker *shrinker_alloc(unsigned int flags, const char *fmt, ...); void shrinker_register(struct shrinker *shrinker); void shrinker_free(struct shrinker *shrinker); -extern int __printf(2, 3) prealloc_shrinker(struct shrinker *shrinker, - const char *fmt, ...); -extern void register_shrinker_prepared(struct shrinker *shrinker); -extern int __printf(2, 3) register_shrinker(struct shrinker *shrinker, - const char *fmt, ...); -extern void unregister_shrinker(struct shrinker *shrinker); -extern void free_prealloced_shrinker(struct shrinker *shrinker); extern void synchronize_shrinkers(void); #ifdef CONFIG_SHRINKER_DEBUG diff --git a/mm/shrinker.c b/mm/shrinker.c index 43a375f954f3..3ab301ff122d 100644 --- a/mm/shrinker.c +++ b/mm/shrinker.c @@ -651,149 +651,6 @@ void shrinker_free(struct shrinker *shrinker) } EXPORT_SYMBOL_GPL(shrinker_free); -/* - * Add a shrinker callback to be called from the vm. - */ -static int __prealloc_shrinker(struct shrinker *shrinker) -{ - unsigned int size; - int err; - - if (shrinker->flags & SHRINKER_MEMCG_AWARE) { - err = prealloc_memcg_shrinker(shrinker); - if (err != -ENOSYS) - return err; - - shrinker->flags &= ~SHRINKER_MEMCG_AWARE; - } - - size = sizeof(*shrinker->nr_deferred); - if (shrinker->flags & SHRINKER_NUMA_AWARE) - size *= nr_node_ids; - - shrinker->nr_deferred = kzalloc(size, GFP_KERNEL); - if (!shrinker->nr_deferred) - return -ENOMEM; - - return 0; -} - -#ifdef CONFIG_SHRINKER_DEBUG -int prealloc_shrinker(struct shrinker *shrinker, const char *fmt, ...) -{ - va_list ap; - int err; - - va_start(ap, fmt); - shrinker->name = kvasprintf_const(GFP_KERNEL, fmt, ap); - va_end(ap); - if (!shrinker->name) - return -ENOMEM; - - err = __prealloc_shrinker(shrinker); - if (err) { - kfree_const(shrinker->name); - shrinker->name = NULL; - } - - return err; -} -#else -int prealloc_shrinker(struct shrinker *shrinker, const char *fmt, ...) -{ - return __prealloc_shrinker(shrinker); -} -#endif - -void free_prealloced_shrinker(struct shrinker *shrinker) -{ -#ifdef CONFIG_SHRINKER_DEBUG - kfree_const(shrinker->name); - shrinker->name = NULL; -#endif - if (shrinker->flags & SHRINKER_MEMCG_AWARE) { - down_write(&shrinker_rwsem); - unregister_memcg_shrinker(shrinker); - up_write(&shrinker_rwsem); - return; - } - - kfree(shrinker->nr_deferred); - shrinker->nr_deferred = NULL; -} - -void register_shrinker_prepared(struct shrinker *shrinker) -{ - down_write(&shrinker_rwsem); - list_add_tail(&shrinker->list, &shrinker_list); - shrinker->flags |= SHRINKER_REGISTERED; - shrinker_debugfs_add(shrinker); - up_write(&shrinker_rwsem); -} - -static int __register_shrinker(struct shrinker *shrinker) -{ - int err = __prealloc_shrinker(shrinker); - - if (err) - return err; - register_shrinker_prepared(shrinker); - return 0; -} - -#ifdef CONFIG_SHRINKER_DEBUG -int register_shrinker(struct shrinker *shrinker, const char *fmt, ...) -{ - va_list ap; - int err; - - va_start(ap, fmt); - shrinker->name = kvasprintf_const(GFP_KERNEL, fmt, ap); - va_end(ap); - if (!shrinker->name) - return -ENOMEM; - - err = __register_shrinker(shrinker); - if (err) { - kfree_const(shrinker->name); - shrinker->name = NULL; - } - return err; -} -#else -int register_shrinker(struct shrinker *shrinker, const char *fmt, ...) -{ - return __register_shrinker(shrinker); -} -#endif -EXPORT_SYMBOL(register_shrinker); - -/* - * Remove one - */ -void unregister_shrinker(struct shrinker *shrinker) -{ - struct dentry *debugfs_entry; - int debugfs_id; - - if (!(shrinker->flags & SHRINKER_REGISTERED)) - return; - - down_write(&shrinker_rwsem); - list_del(&shrinker->list); - shrinker->flags &= ~SHRINKER_REGISTERED; - if (shrinker->flags & SHRINKER_MEMCG_AWARE) - unregister_memcg_shrinker(shrinker); - debugfs_entry = shrinker_debugfs_detach(shrinker, &debugfs_id); - up_write(&shrinker_rwsem); - - shrinker_debugfs_remove(debugfs_entry, debugfs_id); - - kfree(shrinker->nr_deferred); - shrinker->nr_deferred = NULL; -} -EXPORT_SYMBOL(unregister_shrinker); - /** * synchronize_shrinkers - Wait for all running shrinkers to complete. * From patchwork Mon Aug 7 11:09:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343696 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 8DB63C001DB for ; Mon, 7 Aug 2023 11:19:12 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2D4CF6B0080; Mon, 7 Aug 2023 07:19:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 25CD78D0005; Mon, 7 Aug 2023 07:19:12 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0AF6B8D0003; Mon, 7 Aug 2023 07:19:12 -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 ED26E6B0080 for ; Mon, 7 Aug 2023 07:19:11 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id BBEA4809E0 for ; Mon, 7 Aug 2023 11:19:11 +0000 (UTC) X-FDA: 81097062102.30.C661820 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) by imf23.hostedemail.com (Postfix) with ESMTP id AF4AC140003 for ; Mon, 7 Aug 2023 11:19:09 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Te7kg9d2; spf=pass (imf23.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691407149; 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=dp1PQp+5gTkm4DG/kxrQVAZ0rB7KyI/rGW6TiEnUaUw=; b=R0dFq2gfyUckve4YvtO1U7y8HGodYHc2T9uj9fr/apLeAtbLLq84TW8l9WIm5H1lJHlRXi XaRL57ZrMf9Kvj3tmM4Pq97dteMm4Ofl1ZWtOI3cQ0fprU/kPumMGB2QJtPSw5mdA4bTVA Ai6YTuJrencL2Vx2lFVHPLn3ngvjQ70= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691407149; a=rsa-sha256; cv=none; b=qsVb9bU9pGEfrESA9IIwOvC407ERIaZdpKEc8H3wSxsslvXNFVfnNPQ+LrW6JzvVdwtuXh TRfeaZw3GMIHvcpIMBZ29oNchj7LOU0C2GTNDBsZiL+EyMJLcycpdNU5GdJo5CdEZ+jj2B LqT4hmikGvORD4K7/udcTFitngcvLyw= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Te7kg9d2; spf=pass (imf23.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-1bc4dc65aa7so5904255ad.0 for ; Mon, 07 Aug 2023 04:19:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691407148; x=1692011948; 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=dp1PQp+5gTkm4DG/kxrQVAZ0rB7KyI/rGW6TiEnUaUw=; b=Te7kg9d2kQW6gac9UP89KtIVcLTfWDu6srH7dtxrmXTL4ErpAX/pJkQtXd7hg2HtRV b8geFLLbM8+wRhZIYuLjJhyOfyGHnlddPjbSoTi8+7JUn0itl8DrGEf9FkegNhDgT4QU +aRhY4yC93Sy/uol3bSwIULh/giMXKgqvscX8PDfZ03M6CNIZOjJqm4ZovfIFxg7FXvq HemaZ47NKkfhG9oH07mD8LDQiWRUxbmI+sshlvUeh5qK7EeOWS/jAB9AyDVCuXh9Krsn cGXM1IoaSAiEJffIAN7TmuDV3qm2xRt9nfiAYhQ3/VTYWFSG3zxU2XV/jGXOIaUTjpLr zeJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691407148; x=1692011948; 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=dp1PQp+5gTkm4DG/kxrQVAZ0rB7KyI/rGW6TiEnUaUw=; b=RQmEehiFQ9KlhZsJg/qX5z+WCKpzQAmEEV3piJtYNvr8wUyB6DNsvZOZuigIWY7gKy NdiTw+BCEGhfAi19olY+xrKb4pSpVtILiIBZ2kUno408E64ZeLJPUKRORh6WwGJRnCKb t7l3AlUL5Xpb+HEo3cR7RzArjg27/jrWGzqj//39SeE1HeM7PVCexg5tbrJkLplV8NWo 3/eVepSN4K52nhaVmDMCRgQJ+FiJHfJajegHXgk7C+c4quQIByXDMMFGrkIWdAyCMTlj My/oY+gzWegJA3Zfv2j2EyS4ag6ZQjAHscnckX83fWprNxT7TjBb7/cYxtAUhBoQA4Qu worw== X-Gm-Message-State: ABy/qLamZHNa+ZOQZFxLjeeM1pSw/tTRtIDSlyDCffAvgkSOWB1YqrXZ uyw769CDT/M98NW8LG3LF/57wA== X-Google-Smtp-Source: APBJJlGWGDf3ZP6TvEF/B95Km+XRmBUarTmlKp42txasQQnYUyfeo2SyrhxLvRA3BfrSE4M4+QRzMg== X-Received: by 2002:a17:902:dace:b0:1b8:17e8:5472 with SMTP id q14-20020a170902dace00b001b817e85472mr32807567plx.1.1691407148534; Mon, 07 Aug 2023 04:19:08 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.18.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:19:07 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 43/48] drm/ttm: introduce pool_shrink_rwsem Date: Mon, 7 Aug 2023 19:09:31 +0800 Message-Id: <20230807110936.21819-44-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: AF4AC140003 X-Rspam-User: X-Stat-Signature: 3edfimqij61k58g7p97wt9df1ip8qnea X-Rspamd-Server: rspam03 X-HE-Tag: 1691407149-787047 X-HE-Meta: U2FsdGVkX1+Y8kSDJ14JIm0IDp5v67rYej+W/vGSwlIRD5kr232mtFpZQ+p4IHkGSuG6EIwo4oZt29Oi0urhDG+XcH/cut/UZFmmIlCFKEJ+MdoyfAl5+dxhVHfA3HtGgDA5oo/ZGmxHekdc67t37j20ua2Bg695lf99nsOqnKVsL7wtmcQ0ZADTzJnwkOu5+zht9agigTcFRjPe3A5rxhIftUpk/K6Vncswvyl3bE6vBwP17knCM5uEHbWbePRSlwbE6yNKmTDVV2i107LmttopV5vBJCNScUiAvYK7F4I01hVnUM2fZ9YXBGb7ClrPrjlD8QMK7GAkib+78d+uc6Z5KYY5ajx1E5sDta5Rhq+I/dRkxFlVTSSzywG5J/NE01d8xlL5PrvFsFb3yPpLT31Jy1R89RyfXcg074+nM50XQ1+ofDRCzDqAdvrSd9EVlHEYglNjadhAAZ10fBV/VeaFnw3coTh4Hdlnf17Jjvc09NAmOjgotAIDg5MsuVaEiworlDls42coyICRTwkglIH9S4JiK6j57MtUP8ZCFxX/WXTYjGtOEPyrAcW4iulkRPpG3v3jutlZYIKTUVKstvZXHtxu3MKIOsLtJF+gRvawFxmitN8Roq4mLnx+SCwsOe4RgNxZMPI9o315iQrg4pRiTz5ry/ixm9nXwWX9+EBpg3L+OTvZhD2U1dUl1CShh2mPMk99JO9VZaMnJWAXu++t+JPT+TuqSA/6S7+U/T+dyyDkSME17h4DIaGRmwEL685xCvywniKbWNszRqEcemvuz12Znlq2Zr3ZTSFfVz2a4FmCPf9Ue1+D8q5uJwY+h/n+LKrmm1slPLlfuXmPEq/xelPOv5Z12aih34+M/avd3eAqv2zgZ4MlOi6vasChtxTiNspdPml1VitUnvw+SjwGvzAzEhKjLP2a2BIy8jKCMN2BzWKRjHjfU3PIylWIdjntMYXgUKgcJJ77j5c 8gcbPdCj SGUPWDkFm4aJ7wgnV4BTNPy101qkrXSHnRYoBPj4lGu5yF4WpK5a+iWE7Zs/uTgGKiwYxXnjuXX5pUsVucdXah2lGNx2rFei3fK3sRQDsaVXpmpeXi/x+diZs1F4Hy26fOuxDbhgbZYIdO7mjOPJdRBo/WQdwmwxZ6EP2207Mn40YW29FL3hZrUt7FB1qUM6p4Sap6WEMCcnmxgQSXSLYHV1k4ihecvQcu4owtx9wDwWATKk5Z7v1RW6JQWdNwZre3o2/Rshy7Wxt0HYL1EgVfMVIlwoy31oXlujgh1NIQ5m5grdMXRFUBXHV8OIsSr6fGRtIZ6e9ZlOGBxz+du9naY3nAykHExuvUBWo+5NGdMTfe6ernM7UOZZ6rGS3oVF21bHRGc+y6BGgM7WSxkbCBdIaBXmXTpZ+OhN3LJOt3psgmsCvgQ8REtO4USIos2jOWscNmAlpCJyUxJUiMGQtkGzg3w== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Currently, the synchronize_shrinkers() is only used by TTM pool. It only requires that no shrinkers run in parallel. After we use RCU+refcount method to implement the lockless slab shrink, we can not use shrinker_rwsem or synchronize_rcu() to guarantee that all shrinker invocations have seen an update before freeing memory. So we introduce a new pool_shrink_rwsem to implement a private synchronize_shrinkers(), so as to achieve the same purpose. Signed-off-by: Qi Zheng Reviewed-by: Muchun Song Acked-by: Daniel Vetter --- drivers/gpu/drm/ttm/ttm_pool.c | 15 +++++++++++++++ include/linux/shrinker.h | 2 -- mm/shrinker.c | 15 --------------- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.c index c9c9618c0dce..38b4c280725c 100644 --- a/drivers/gpu/drm/ttm/ttm_pool.c +++ b/drivers/gpu/drm/ttm/ttm_pool.c @@ -74,6 +74,7 @@ static struct ttm_pool_type global_dma32_uncached[MAX_ORDER + 1]; static spinlock_t shrinker_lock; static struct list_head shrinker_list; static struct shrinker *mm_shrinker; +static DECLARE_RWSEM(pool_shrink_rwsem); /* Allocate pages of size 1 << order with the given gfp_flags */ static struct page *ttm_pool_alloc_page(struct ttm_pool *pool, gfp_t gfp_flags, @@ -317,6 +318,7 @@ static unsigned int ttm_pool_shrink(void) unsigned int num_pages; struct page *p; + down_read(&pool_shrink_rwsem); spin_lock(&shrinker_lock); pt = list_first_entry(&shrinker_list, typeof(*pt), shrinker_list); list_move_tail(&pt->shrinker_list, &shrinker_list); @@ -329,6 +331,7 @@ static unsigned int ttm_pool_shrink(void) } else { num_pages = 0; } + up_read(&pool_shrink_rwsem); return num_pages; } @@ -572,6 +575,18 @@ void ttm_pool_init(struct ttm_pool *pool, struct device *dev, } EXPORT_SYMBOL(ttm_pool_init); +/** + * synchronize_shrinkers - Wait for all running shrinkers to complete. + * + * This is useful to guarantee that all shrinker invocations have seen an + * update, before freeing memory, similar to rcu. + */ +static void synchronize_shrinkers(void) +{ + down_write(&pool_shrink_rwsem); + up_write(&pool_shrink_rwsem); +} + /** * ttm_pool_fini - Cleanup a pool * diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index c55c07c3f0cb..025c8070dd86 100644 --- a/include/linux/shrinker.h +++ b/include/linux/shrinker.h @@ -103,8 +103,6 @@ struct shrinker *shrinker_alloc(unsigned int flags, const char *fmt, ...); void shrinker_register(struct shrinker *shrinker); void shrinker_free(struct shrinker *shrinker); -extern void synchronize_shrinkers(void); - #ifdef CONFIG_SHRINKER_DEBUG extern int __printf(2, 3) shrinker_debugfs_rename(struct shrinker *shrinker, const char *fmt, ...); diff --git a/mm/shrinker.c b/mm/shrinker.c index 3ab301ff122d..a27779ed3798 100644 --- a/mm/shrinker.c +++ b/mm/shrinker.c @@ -650,18 +650,3 @@ void shrinker_free(struct shrinker *shrinker) kfree(shrinker); } EXPORT_SYMBOL_GPL(shrinker_free); - -/** - * synchronize_shrinkers - Wait for all running shrinkers to complete. - * - * This is equivalent to calling unregister_shrink() and register_shrinker(), - * but atomically and with less overhead. This is useful to guarantee that all - * shrinker invocations have seen an update, before freeing memory, similar to - * rcu. - */ -void synchronize_shrinkers(void) -{ - down_write(&shrinker_rwsem); - up_write(&shrinker_rwsem); -} -EXPORT_SYMBOL(synchronize_shrinkers); From patchwork Mon Aug 7 11:09:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343697 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 97FADC001DF for ; Mon, 7 Aug 2023 11:19:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3493D6B0081; Mon, 7 Aug 2023 07:19:25 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2D1B98D0005; Mon, 7 Aug 2023 07:19:25 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1251D8D0003; Mon, 7 Aug 2023 07:19:25 -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 F327C6B0081 for ; Mon, 7 Aug 2023 07:19:24 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id D0E72160993 for ; Mon, 7 Aug 2023 11:19:24 +0000 (UTC) X-FDA: 81097062648.29.9D3F817 Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) by imf02.hostedemail.com (Postfix) with ESMTP id E430A80024 for ; Mon, 7 Aug 2023 11:19:22 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=MbCTfulz; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf02.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.42 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691407163; a=rsa-sha256; cv=none; b=7I/dOIAst9hiTzJuy5OEixT4p+omm9rFPmdi7x6aB5KQL1+UbtoaUy45uExjkYs173/hvp FsAqcLBegiipapgBiZaKapDrKwzwjqdRMi0ncF8brImbbY09Ab7LXwHGIacirBYsyLDLCG fDEWzlI8Dz3M9IFovha7i6N36QMXsRw= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=MbCTfulz; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf02.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.42 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691407163; 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=BzKzY0EneoO0UlcJt4xJM2Sa0N5zE3blYFeUn1CwPvs=; b=4szAikO1c9aea8iBucH0xDyOAn4xHCioYc+ETjeDADrTzzUy+sge6ztvYudW4bGmhacYr4 4cJseaN+2crTTf3RRlMY15gq6ESwu4NWI74okAebCAQeikAswEyIeRkU5lSCYSMv3kaePl Jf46RBz0bQZT+bBfTdzqhxQQy2nN+YE= Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-268f6ba57b5so625653a91.1 for ; Mon, 07 Aug 2023 04:19:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691407162; x=1692011962; 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=BzKzY0EneoO0UlcJt4xJM2Sa0N5zE3blYFeUn1CwPvs=; b=MbCTfulzQY8dcLMV7HUHZRkhp3R/ALHm/oybkLiEqSrlkrAL5AMkdjufi+qbbnlWzq EwOScEMFKT9DjlO/FYIYHMtQq2tg1SmdFY2OX8CdMMfBbKmXJY114QpKxGPF0i15Oq8D +QZTUaNL6+5L3yXNniaSpwyckXVIsRgL4m06kBthWlP5xd4q7OECI5FeIwXi87e+H4c/ GUueoXTkms0i44pnefrN2CLy0SrJ5TW2S78B6UOaIOz/bQbdtDd+1wdG+NZVHpYstsoy +lnW4zf/cx/QjFol8gTUnT8cVUpimeAwTwTHHi/YAESl2hNrNHChT1CjEcEW9U23Nr7T gLNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691407162; x=1692011962; 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=BzKzY0EneoO0UlcJt4xJM2Sa0N5zE3blYFeUn1CwPvs=; b=IIqWK6Rwy4uALnIaViOvt1m+7t9CWzhu9BBBd8wUTJJXjaLeKdARrMAvi+mPnCttbt fW6ooKZaiV+Zqg5wlOwZmIAwbgE8T1DSbYpJxIIS3aRVF34uWK+tWAMXSNlPEetXd0kC HkF4Jzut7zxmy/L+EfhiaBRndi7Qi6pH7Q70rEtKe0i8CnNdbV0PgS/hc27BaRB07nN7 JD1wcfh+sMJuORLSs2iFgXcgt1WgcnIzm+7wATK2v6gM2oNKv1+HtnJF6tebDJfpT6ki Ukt5c1Qxg3uN8Hvh/f+GauaVNF7wqnanopAUCKLrfsq22B+K952dXj7uke4GAo+EPyfC KNDw== X-Gm-Message-State: ABy/qLbZtdyr/XbbYiBD7VUf5a1TYwbEjHhCyww7g7BZo4SlZER9XBfH fnx6o0gs6fKpnquDSNn3biod9G3DU05o0y6uuwk= X-Google-Smtp-Source: APBJJlGnB4Vyj5FGeoXczgSMBfjSqXYaN0nHE2UQ92aOKZGOd+EBKMKhZPi2ZgbvTuAEcRBjftj7zw== X-Received: by 2002:a17:90a:6c97:b0:263:730b:f568 with SMTP id y23-20020a17090a6c9700b00263730bf568mr23074339pjj.3.1691407161746; Mon, 07 Aug 2023 04:19:21 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.19.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:19:20 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng , Muchun Song Subject: [PATCH v4 44/48] mm: shrinker: add a secondary array for shrinker_info::{map, nr_deferred} Date: Mon, 7 Aug 2023 19:09:32 +0800 Message-Id: <20230807110936.21819-45-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: E430A80024 X-Stat-Signature: bddqmm1gdrmrrfn77fnkzihahb86qs1x X-HE-Tag: 1691407162-968166 X-HE-Meta: U2FsdGVkX18iR2IP+2XN8FTQNsc1eLivm6FGbGU0b8DAvBpofyRCMASqAgZ5PPM8u3u3l7C5rPj1o2T2sKl5IxtzYmEYWH6X4gu8PvP1HhjO1leZ+EZvptyQcbRVD1Ke6wprwS9iJ+hRaT5xBaKXQAse3NQl0Yi6Ha7KDYhHtaP7tcYcDVqo+Q7/YwRIA1zo2Qxw6bYtvwxPa/gLAFFCFHMIc71XEofpv6T1+8e6zfTET07HqvqYqisI9+2XRaYrr7YcaAdPRSm9hWK/pdrkX0pzAvnX9TyyD9c8A04+HtwDhiI11+SUSeTD3paEQcANM1E2/8dVbEoMkbgQBhjELzls6aVRXyzMyRS+unuaddCiyc7y65ka9S3GF+dUgLIYSvjdSOD2jb71d54KyvwspsRp2DwRUY9IeNoCBgjixqBfIiPh+JCc1uQQAoztWh4/0c4+Lzd9fWxIJ+PSyKe0wMwk/LzqM3scXb77w4K7L7ZTAd/LkmXgz86rDJ0HjJUwPDX42H/2/Cn1CLmAtzCEV3ZDimWni0UrDjl03rN5C4h2if9AymwfK7hba6ghowhdCV4NNeQzBdrI2pHIloEt2RDgWQ5BZNbwA3vMtj7wCqK/IvQr8eCS+55QjKdyGrlNjzbbb+AfUABo/5UIM8Afo3sR6DHVNK46jLOZGItxgQRPwA2+X/1JgXuJqpE7SQDdrWgvw+JjoanN3AVXZI6YKWAnLVCsiJzZWRLgZq3pgmQsHM2NAeQa/pMTo0QvfzQAr8DK2YTaFnAbZ6p0ReujZKK+cBfGjocnJH1nm+Ei5+fGbsqG0q4ihP5roKQy32c4EvNyaZr2i5rOXZHgcHSysxLsKwajQJpQPF/lQgRwgvW++2biS0oF/gYMU5v0mVuNb1y+3Z7kJto0zF5ubBAmFbUUvy2FoTFxLrlWu9bBvCrWUspfa0ly3mp8lcZSaa1KErkzL4/waCMUSnwLOPN ktwRjwy8 biktyTo9rHO/wWsKjFiBFb4GPaPUebUSvXkGR075vOlFZixTjNqzUU/11SaBXl/ujTkxgaYw8lG1eNfMf0bG++/jaIX9HsQ+REdBiieP9oQU5a1VYQt3VP3yTU5i0QtWRAL5DK5z+NzeiQ/cqN+I2bKWDwWdmJLFjHVjQp4SCPkespqq5zh6uhBiOLh30h7QzwM6+5ygzaPG5GDhvnIIZD8U1EfFDTPbF9LIoAH0EyI7gNSbVUqpvZzuwsWVV+dOygtBx/Ttwa4VAht7IauDsZOo2hRvFxVb2wLWb/CQS+kk5K6XWIeoPIIs4fG9YXPVEoP0AmQqk2mSeoaneu12nMxwU26vPTHkB2FWg1Td1MNWslLolz5BaDSZcZgkkrLpRzEkZMBn+Fkz/kQpNKg+kSqgrTzmJ/kMQCNV4rM80FDKcWmlnLrUShX6fJdS+eoBkFG9Oq89ZtM92HeKJfwbL0BygKEzvP/JidWyMcY/aac7dwgCsGib7nhNC3TmJN4RS9MGh3ZCQji5cwkU= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Currently, we maintain two linear arrays per node per memcg, which are shrinker_info::map and shrinker_info::nr_deferred. And we need to resize them when the shrinker_nr_max is exceeded, that is, allocate a new array, and then copy the old array to the new array, and finally free the old array by RCU. For shrinker_info::map, we do set_bit() under the RCU lock, so we may set the value into the old map which is about to be freed. This may cause the value set to be lost. The current solution is not to copy the old map when resizing, but to set all the corresponding bits in the new map to 1. This solves the data loss problem, but bring the overhead of more pointless loops while doing memcg slab shrink. For shrinker_info::nr_deferred, we will only modify it under the read lock of shrinker_rwsem, so it will not run concurrently with the resizing. But after we make memcg slab shrink lockless, there will be the same data loss problem as shrinker_info::map, and we can't work around it like the map. For such resizable arrays, the most straightforward idea is to change it to xarray, like we did for list_lru [1]. We need to do xa_store() in the list_lru_add()-->set_shrinker_bit(), but this will cause memory allocation, and the list_lru_add() doesn't accept failure. A possible solution is to pre-allocate, but the location of pre-allocation is not well determined. Therefore, this commit chooses to introduce a secondary array for shrinker_info::{map, nr_deferred}, so that we only need to copy this secondary array every time the size is resized. Then even if we get the old secondary array under the RCU lock, the found map and nr_deferred are also true, so no data is lost. [1]. https://lore.kernel.org/all/20220228122126.37293-13-songmuchun@bytedance.com/ Signed-off-by: Qi Zheng Reviewed-by: Muchun Song --- include/linux/memcontrol.h | 12 +- include/linux/shrinker.h | 17 +++ mm/shrinker.c | 250 +++++++++++++++++++++++-------------- 3 files changed, 172 insertions(+), 107 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 11810a2cfd2d..b49515bb6fbd 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -21,6 +21,7 @@ #include #include #include +#include struct mem_cgroup; struct obj_cgroup; @@ -88,17 +89,6 @@ struct mem_cgroup_reclaim_iter { unsigned int generation; }; -/* - * Bitmap and deferred work of shrinker::id corresponding to memcg-aware - * shrinkers, which have elements charged to this memcg. - */ -struct shrinker_info { - struct rcu_head rcu; - atomic_long_t *nr_deferred; - unsigned long *map; - int map_nr_max; -}; - struct lruvec_stats_percpu { /* Local (CPU and cgroup) state */ long state[NR_VM_NODE_STAT_ITEMS]; diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index 025c8070dd86..eb342994675a 100644 --- a/include/linux/shrinker.h +++ b/include/linux/shrinker.h @@ -5,6 +5,23 @@ #include #include +#define SHRINKER_UNIT_BITS BITS_PER_LONG + +/* + * Bitmap and deferred work of shrinker::id corresponding to memcg-aware + * shrinkers, which have elements charged to the memcg. + */ +struct shrinker_info_unit { + atomic_long_t nr_deferred[SHRINKER_UNIT_BITS]; + DECLARE_BITMAP(map, SHRINKER_UNIT_BITS); +}; + +struct shrinker_info { + struct rcu_head rcu; + int map_nr_max; + struct shrinker_info_unit *unit[]; +}; + /* * This struct is used to pass information from page reclaim to the shrinkers. * We consolidate the values for easier extension later. diff --git a/mm/shrinker.c b/mm/shrinker.c index a27779ed3798..1911c06b8af5 100644 --- a/mm/shrinker.c +++ b/mm/shrinker.c @@ -12,15 +12,50 @@ DECLARE_RWSEM(shrinker_rwsem); #ifdef CONFIG_MEMCG static int shrinker_nr_max; -/* The shrinker_info is expanded in a batch of BITS_PER_LONG */ -static inline int shrinker_map_size(int nr_items) +static inline int shrinker_unit_size(int nr_items) { - return (DIV_ROUND_UP(nr_items, BITS_PER_LONG) * sizeof(unsigned long)); + return (DIV_ROUND_UP(nr_items, SHRINKER_UNIT_BITS) * sizeof(struct shrinker_info_unit *)); } -static inline int shrinker_defer_size(int nr_items) +static inline void shrinker_unit_free(struct shrinker_info *info, int start) { - return (round_up(nr_items, BITS_PER_LONG) * sizeof(atomic_long_t)); + struct shrinker_info_unit **unit; + int nr, i; + + if (!info) + return; + + unit = info->unit; + nr = DIV_ROUND_UP(info->map_nr_max, SHRINKER_UNIT_BITS); + + for (i = start; i < nr; i++) { + if (!unit[i]) + break; + + kvfree(unit[i]); + unit[i] = NULL; + } +} + +static inline int shrinker_unit_alloc(struct shrinker_info *new, + struct shrinker_info *old, int nid) +{ + struct shrinker_info_unit *unit; + int nr = DIV_ROUND_UP(new->map_nr_max, SHRINKER_UNIT_BITS); + int start = old ? DIV_ROUND_UP(old->map_nr_max, SHRINKER_UNIT_BITS) : 0; + int i; + + for (i = start; i < nr; i++) { + unit = kvzalloc_node(sizeof(*unit), GFP_KERNEL, nid); + if (!unit) { + shrinker_unit_free(new, start); + return -ENOMEM; + } + + new->unit[i] = unit; + } + + return 0; } void free_shrinker_info(struct mem_cgroup *memcg) @@ -32,6 +67,7 @@ void free_shrinker_info(struct mem_cgroup *memcg) for_each_node(nid) { pn = memcg->nodeinfo[nid]; info = rcu_dereference_protected(pn->shrinker_info, true); + shrinker_unit_free(info, 0); kvfree(info); rcu_assign_pointer(pn->shrinker_info, NULL); } @@ -40,28 +76,27 @@ void free_shrinker_info(struct mem_cgroup *memcg) int alloc_shrinker_info(struct mem_cgroup *memcg) { struct shrinker_info *info; - int nid, size, ret = 0; - int map_size, defer_size = 0; + int nid, ret = 0; + int array_size = 0; down_write(&shrinker_rwsem); - map_size = shrinker_map_size(shrinker_nr_max); - defer_size = shrinker_defer_size(shrinker_nr_max); - size = map_size + defer_size; + array_size = shrinker_unit_size(shrinker_nr_max); for_each_node(nid) { - info = kvzalloc_node(sizeof(*info) + size, GFP_KERNEL, nid); - if (!info) { - free_shrinker_info(memcg); - ret = -ENOMEM; - break; - } - info->nr_deferred = (atomic_long_t *)(info + 1); - info->map = (void *)info->nr_deferred + defer_size; + info = kvzalloc_node(sizeof(*info) + array_size, GFP_KERNEL, nid); + if (!info) + goto err; info->map_nr_max = shrinker_nr_max; + if (shrinker_unit_alloc(info, NULL, nid)) + goto err; rcu_assign_pointer(memcg->nodeinfo[nid]->shrinker_info, info); } up_write(&shrinker_rwsem); return ret; + +err: + free_shrinker_info(memcg); + return -ENOMEM; } static struct shrinker_info *shrinker_info_protected(struct mem_cgroup *memcg, @@ -71,15 +106,12 @@ static struct shrinker_info *shrinker_info_protected(struct mem_cgroup *memcg, lockdep_is_held(&shrinker_rwsem)); } -static int expand_one_shrinker_info(struct mem_cgroup *memcg, - int map_size, int defer_size, - int old_map_size, int old_defer_size, - int new_nr_max) +static int expand_one_shrinker_info(struct mem_cgroup *memcg, int new_size, + int old_size, int new_nr_max) { struct shrinker_info *new, *old; struct mem_cgroup_per_node *pn; int nid; - int size = map_size + defer_size; for_each_node(nid) { pn = memcg->nodeinfo[nid]; @@ -92,21 +124,18 @@ static int expand_one_shrinker_info(struct mem_cgroup *memcg, if (new_nr_max <= old->map_nr_max) continue; - new = kvmalloc_node(sizeof(*new) + size, GFP_KERNEL, nid); + new = kvmalloc_node(sizeof(*new) + new_size, GFP_KERNEL, nid); if (!new) return -ENOMEM; - new->nr_deferred = (atomic_long_t *)(new + 1); - new->map = (void *)new->nr_deferred + defer_size; new->map_nr_max = new_nr_max; - /* map: set all old bits, clear all new bits */ - memset(new->map, (int)0xff, old_map_size); - memset((void *)new->map + old_map_size, 0, map_size - old_map_size); - /* nr_deferred: copy old values, clear all new values */ - memcpy(new->nr_deferred, old->nr_deferred, old_defer_size); - memset((void *)new->nr_deferred + old_defer_size, 0, - defer_size - old_defer_size); + /* copy old values, allocate all new values */ + memcpy(new->unit, old->unit, old_size); + if (shrinker_unit_alloc(new, old, nid)) { + kvfree(new); + return -ENOMEM; + } rcu_assign_pointer(pn->shrinker_info, new); kvfree_rcu(old, rcu); @@ -118,9 +147,8 @@ static int expand_one_shrinker_info(struct mem_cgroup *memcg, static int expand_shrinker_info(int new_id) { int ret = 0; - int new_nr_max = round_up(new_id + 1, BITS_PER_LONG); - int map_size, defer_size = 0; - int old_map_size, old_defer_size = 0; + int new_nr_max = round_up(new_id + 1, SHRINKER_UNIT_BITS); + int new_size, old_size = 0; struct mem_cgroup *memcg; if (!root_mem_cgroup) @@ -128,15 +156,12 @@ static int expand_shrinker_info(int new_id) lockdep_assert_held(&shrinker_rwsem); - map_size = shrinker_map_size(new_nr_max); - defer_size = shrinker_defer_size(new_nr_max); - old_map_size = shrinker_map_size(shrinker_nr_max); - old_defer_size = shrinker_defer_size(shrinker_nr_max); + new_size = shrinker_unit_size(new_nr_max); + old_size = shrinker_unit_size(shrinker_nr_max); memcg = mem_cgroup_iter(NULL, NULL, NULL); do { - ret = expand_one_shrinker_info(memcg, map_size, defer_size, - old_map_size, old_defer_size, + ret = expand_one_shrinker_info(memcg, new_size, old_size, new_nr_max); if (ret) { mem_cgroup_iter_break(NULL, memcg); @@ -150,17 +175,34 @@ static int expand_shrinker_info(int new_id) return ret; } +static inline int shriner_id_to_index(int shrinker_id) +{ + return shrinker_id / SHRINKER_UNIT_BITS; +} + +static inline int shriner_id_to_offset(int shrinker_id) +{ + return shrinker_id % SHRINKER_UNIT_BITS; +} + +static inline int calc_shrinker_id(int index, int offset) +{ + return index * SHRINKER_UNIT_BITS + offset; +} + void set_shrinker_bit(struct mem_cgroup *memcg, int nid, int shrinker_id) { if (shrinker_id >= 0 && memcg && !mem_cgroup_is_root(memcg)) { struct shrinker_info *info; + struct shrinker_info_unit *unit; rcu_read_lock(); info = rcu_dereference(memcg->nodeinfo[nid]->shrinker_info); + unit = info->unit[shriner_id_to_index(shrinker_id)]; if (!WARN_ON_ONCE(shrinker_id >= info->map_nr_max)) { /* Pairs with smp mb in shrink_slab() */ smp_mb__before_atomic(); - set_bit(shrinker_id, info->map); + set_bit(shriner_id_to_offset(shrinker_id), unit->map); } rcu_read_unlock(); } @@ -209,26 +251,31 @@ static long xchg_nr_deferred_memcg(int nid, struct shrinker *shrinker, struct mem_cgroup *memcg) { struct shrinker_info *info; + struct shrinker_info_unit *unit; info = shrinker_info_protected(memcg, nid); - return atomic_long_xchg(&info->nr_deferred[shrinker->id], 0); + unit = info->unit[shriner_id_to_index(shrinker->id)]; + return atomic_long_xchg(&unit->nr_deferred[shriner_id_to_offset(shrinker->id)], 0); } static long add_nr_deferred_memcg(long nr, int nid, struct shrinker *shrinker, struct mem_cgroup *memcg) { struct shrinker_info *info; + struct shrinker_info_unit *unit; info = shrinker_info_protected(memcg, nid); - return atomic_long_add_return(nr, &info->nr_deferred[shrinker->id]); + unit = info->unit[shriner_id_to_index(shrinker->id)]; + return atomic_long_add_return(nr, &unit->nr_deferred[shriner_id_to_offset(shrinker->id)]); } void reparent_shrinker_deferred(struct mem_cgroup *memcg) { - int i, nid; + int nid, index, offset; long nr; struct mem_cgroup *parent; struct shrinker_info *child_info, *parent_info; + struct shrinker_info_unit *child_unit, *parent_unit; parent = parent_mem_cgroup(memcg); if (!parent) @@ -239,9 +286,13 @@ void reparent_shrinker_deferred(struct mem_cgroup *memcg) for_each_node(nid) { child_info = shrinker_info_protected(memcg, nid); parent_info = shrinker_info_protected(parent, nid); - for (i = 0; i < child_info->map_nr_max; i++) { - nr = atomic_long_read(&child_info->nr_deferred[i]); - atomic_long_add(nr, &parent_info->nr_deferred[i]); + for (index = 0; index < shriner_id_to_index(child_info->map_nr_max); index++) { + child_unit = child_info->unit[index]; + parent_unit = parent_info->unit[index]; + for (offset = 0; offset < SHRINKER_UNIT_BITS; offset++) { + nr = atomic_long_read(&child_unit->nr_deferred[offset]); + atomic_long_add(nr, &parent_unit->nr_deferred[offset]); + } } } up_read(&shrinker_rwsem); @@ -407,7 +458,7 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, { struct shrinker_info *info; unsigned long ret, freed = 0; - int i; + int offset, index = 0; if (!mem_cgroup_online(memcg)) return 0; @@ -419,56 +470,63 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, if (unlikely(!info)) goto unlock; - for_each_set_bit(i, info->map, info->map_nr_max) { - struct shrink_control sc = { - .gfp_mask = gfp_mask, - .nid = nid, - .memcg = memcg, - }; - struct shrinker *shrinker; + for (; index < shriner_id_to_index(info->map_nr_max); index++) { + struct shrinker_info_unit *unit; - shrinker = idr_find(&shrinker_idr, i); - if (unlikely(!shrinker || !(shrinker->flags & SHRINKER_REGISTERED))) { - if (!shrinker) - clear_bit(i, info->map); - continue; - } + unit = info->unit[index]; - /* Call non-slab shrinkers even though kmem is disabled */ - if (!memcg_kmem_online() && - !(shrinker->flags & SHRINKER_NONSLAB)) - continue; + for_each_set_bit(offset, unit->map, SHRINKER_UNIT_BITS) { + struct shrink_control sc = { + .gfp_mask = gfp_mask, + .nid = nid, + .memcg = memcg, + }; + struct shrinker *shrinker; + int shrinker_id = calc_shrinker_id(index, offset); - ret = do_shrink_slab(&sc, shrinker, priority); - if (ret == SHRINK_EMPTY) { - clear_bit(i, info->map); - /* - * After the shrinker reported that it had no objects to - * free, but before we cleared the corresponding bit in - * the memcg shrinker map, a new object might have been - * added. To make sure, we have the bit set in this - * case, we invoke the shrinker one more time and reset - * the bit if it reports that it is not empty anymore. - * The memory barrier here pairs with the barrier in - * set_shrinker_bit(): - * - * list_lru_add() shrink_slab_memcg() - * list_add_tail() clear_bit() - * - * set_bit() do_shrink_slab() - */ - smp_mb__after_atomic(); - ret = do_shrink_slab(&sc, shrinker, priority); - if (ret == SHRINK_EMPTY) - ret = 0; - else - set_shrinker_bit(memcg, nid, i); - } - freed += ret; + shrinker = idr_find(&shrinker_idr, shrinker_id); + if (unlikely(!shrinker || !(shrinker->flags & SHRINKER_REGISTERED))) { + if (!shrinker) + clear_bit(offset, unit->map); + continue; + } - if (rwsem_is_contended(&shrinker_rwsem)) { - freed = freed ? : 1; - break; + /* Call non-slab shrinkers even though kmem is disabled */ + if (!memcg_kmem_online() && + !(shrinker->flags & SHRINKER_NONSLAB)) + continue; + + ret = do_shrink_slab(&sc, shrinker, priority); + if (ret == SHRINK_EMPTY) { + clear_bit(offset, unit->map); + /* + * After the shrinker reported that it had no objects to + * free, but before we cleared the corresponding bit in + * the memcg shrinker map, a new object might have been + * added. To make sure, we have the bit set in this + * case, we invoke the shrinker one more time and reset + * the bit if it reports that it is not empty anymore. + * The memory barrier here pairs with the barrier in + * set_shrinker_bit(): + * + * list_lru_add() shrink_slab_memcg() + * list_add_tail() clear_bit() + * + * set_bit() do_shrink_slab() + */ + smp_mb__after_atomic(); + ret = do_shrink_slab(&sc, shrinker, priority); + if (ret == SHRINK_EMPTY) + ret = 0; + else + set_shrinker_bit(memcg, nid, shrinker_id); + } + freed += ret; + + if (rwsem_is_contended(&shrinker_rwsem)) { + freed = freed ? : 1; + goto unlock; + } } } unlock: From patchwork Mon Aug 7 11:09:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343698 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 6EC0AC04A6A for ; Mon, 7 Aug 2023 11:19:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0FF606B0075; Mon, 7 Aug 2023 07:19:38 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 088E28D0005; Mon, 7 Aug 2023 07:19:38 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E44638D0003; Mon, 7 Aug 2023 07:19:37 -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 CE4B46B0075 for ; Mon, 7 Aug 2023 07:19:37 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id ACF1514091C for ; Mon, 7 Aug 2023 11:19:37 +0000 (UTC) X-FDA: 81097063194.23.436BFDE Received: from mail-io1-f46.google.com (mail-io1-f46.google.com [209.85.166.46]) by imf30.hostedemail.com (Postfix) with ESMTP id 9DFC380016 for ; Mon, 7 Aug 2023 11:19:35 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=SsVeEy7g; spf=pass (imf30.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.166.46 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=1691407175; 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=VvZzKGLWBPnU/YifQKDl8Wb9pt+zZKHS88YiwcrJMO0=; b=uVXk6YYKHQpGXzFgrJDfBlzBgGLDKP9o5NxDiajs+7m6kCulAw54yQJvtps5Yvu7yA01QX lKz4YKms0VL+MH2qYwuJEIYea7CsEYawTUR3TdAtAFjU9hSmcWSvLAqB2O8knB73Tscr0S PPuzQTxK2ZkKqEabpfWMjisiqGrJei0= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691407175; a=rsa-sha256; cv=none; b=3/B8Fa3EWSBceQoXqVoYKTmyMC4oprIdnQaJWoOiIkNCXBUaHRBX4N1fe7aMuuN0HstB5d fhEcfh3Omv4Di62MP8SffM549JI4/Y0NjGU+CMdvLCrd65Zqpj5UduRWVsHT9WRbobqpJw hHdAPWEORA8rjsOJz7haQhByYOEt4eY= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=SsVeEy7g; spf=pass (imf30.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.166.46 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-io1-f46.google.com with SMTP id ca18e2360f4ac-790dcf48546so32862639f.0 for ; Mon, 07 Aug 2023 04:19:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691407175; x=1692011975; 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=VvZzKGLWBPnU/YifQKDl8Wb9pt+zZKHS88YiwcrJMO0=; b=SsVeEy7gwtNzgRLX3Qao2jYE1354yjZBdHrMaMz2XqDOvdbs41vLXJnddUX7FwP0Qx hSxH4iCCuXgVTr2NPnCMWLevPuwCt7LGzr4+TdjZlq4Gl2oVZgjQ80i5jSaavOwgn6QQ +nWVM5qqld5fZH2+ndWf7n2/Ma+aJb4WkOxejaU0XvqKX5vqDu25nIk8n1U32mnTDZgh PkjRGyPGbDKhTCsbJSFCDCkrBYmJRSx+6Z+gu0duks49czJ2bXnjSlvfCZzOJmwtfJCD wbrCVDMtyTbzTIuZroq7DUtUcyce8ZMbc3QUuctGqLseQtbL1sL9WjN8CX6fRRrU5uhk 0bSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691407175; x=1692011975; 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=VvZzKGLWBPnU/YifQKDl8Wb9pt+zZKHS88YiwcrJMO0=; b=BASRSZSwpgMQoWemmT5QBHrdrrbSJ2s7BYK53iEDQNfcf3JPiARcoyTcYh7hDb4jLy mG2dzt9bgY+gQTJUuZyq9gLfDBwyF4XlDTTpcNzp/0XOEfzdPPxcem81TPNhIASRf2h1 96N4dBEKlNKzfZwfWcgiHb8Gka5iPlmLVuniMPDOBxtVpSJFzJpM/v88XQRG83SK0ofH wbgySV67zgUoTIzU+GA1oDqIW10ba5QAaisZamarAEtcDAEzvyTppit0nWCLPbXYjpIg QdwGLcPbSYfbFgtZMSjAb9K6K0zei4RaslAT7K3DQSK2MB4/2xvan9KbLrM/9V6jP+s9 cgow== X-Gm-Message-State: ABy/qLZesG4avp53Ecif5f7fOTSeaaZJ9eEsFdh2Ff5kwcBsPNKSdwWr 4BtlsSqgOT9WP+kjsIhnYuC9yw== X-Google-Smtp-Source: APBJJlG/XxZB6sKzQ/QKN1+d/Y+m2Z7kNpKSUjYzz7Oa2LvDnuz3c5eyzNfvhPPV8k8oKjwIpKOiLg== X-Received: by 2002:a6b:c30f:0:b0:783:6e76:6bc7 with SMTP id t15-20020a6bc30f000000b007836e766bc7mr26415608iof.2.1691407174771; Mon, 07 Aug 2023 04:19:34 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.19.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:19:34 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v4 45/48] mm: shrinker: make global slab shrink lockless Date: Mon, 7 Aug 2023 19:09:33 +0800 Message-Id: <20230807110936.21819-46-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 9DFC380016 X-Rspam-User: X-Stat-Signature: 8tu63w3s71ocszdo6ntxj1qpjayb4b4r X-Rspamd-Server: rspam03 X-HE-Tag: 1691407175-677049 X-HE-Meta: U2FsdGVkX1/vETp8HTG30YDO74MOqZ7RRgFdDHegUKS7aL7KKtHjenuRvcxk7Y9lZhz34VzPAk8By1rFTtk2dYR1ujjZmx05J1UFkB8swNo+LlipGWjc/ae4wEyh7MRolocfb77vG15i3oWQfHiZwNP0dIgkFGTqb0xkaEAbQxrResk2Ta5ooLdr6SnTB7yg9Y2XvJ7hHKHMjpBWDhuDF92mFmypig8zQ7XD0PLluEGllKmMxdVpWWg8w/8otXxe/siucc8wmnp4Mpke2Sbuj2GGDkOdKn2Nd2gin+KRymHrz186eP4JKhH0rgkabu8Tn3qXmp1Wli164xMp/1szXlghnwfU7R+o1At23rg07vWTRV/bIv4kPg1j+ZIlVLcFujHm23zhmB+g2gxEPSq+y1pq654EUsymh+iD2tzRuDZBCPVQ8B1CIjYK8Cui54Ex1bVk0WYdsp/rkY9Bo16Wr0j22kFbvTrLFRp2zH/LfMPXT5No2YvSUnnXTiBmB1xTqIxYaIaDy5rWtCD5+NfPWk+ib3h7X3AguYgeFykF6X0e3BzIwoHdWoxHFTtfctZp+Mw2bJKsISPpuIIl+w+hsFn86DR8AXZPC7P0z0S+SnBSIiT53CCPQZng6CL98rw32PugdOnsRfZAJE9pW8BK++hs/GSxlSh+XwoOmSW2VmyYRsHzuAIvAPRAPPCV+qSqgTqjAS20/84XYsnUc+2ZTNU2jNBec08ohfHFWt5t7Q8f22+8cBOKeGBZ79+OEq5gofQ9c7GDUfgSQgt2TkOUV2fI6my1uUf5jazfi4xFCe791v5ybPkbdkDMzwvxbTMI+VfXEltgsIHiVDi5cbXEgiSHVA3qPFV9IxtayZzoHtk1iX/8ol2cqdgVWzOPVEDrXBmfghnvY/LH+2eIOEbHDzwKR0TeQ6mawuuuMLE7tsHzcMVd4Po2/9rIO19qyzmVfPgvI0+HqxyRUoG08cL +MPArS00 olmZFuIgd5RbHyS4n8rIo6GQBI0qBY0W3V1OmSfIFS4rmoNIzlNZJI2GVW6p4uAUnVVdolWhZ2hkmUlrx71ZZrX3VEAcfgPHI3WsjbtzW383jEXTFGK0f0GLxg6Ise1DBhGMwMxIJ3Z8KX9xRQzWa9tNiug5A+4S5ETJIa7Y1pP094dc7DN4nTKNAasUfe6awgVhxnARGRcsX8GMhI5SjgsH9NRLcCQRVDClHtGwlQckUG29B0e+u+jtbR4/MtPuqv0GqA93OHzc7ab3McomuqyVooh4u/LbifEyQhRCwq8ZfqmAFlM7yPcB3Eo4XasPh2QNZCGFuHl69lA/ACbPtdd1aLMpaZoZY5cKzYGKTOUKAH6aTwZ9L5nmkwqP1r6/sQsxltCdSoPMulbQMMzM1wkvvnuENNBqWw0pNO2iVvShxFiZw5+v5ifQzFrkEqRbM5NxWe+0vIuLgPHiUcXJJizaP1Iafew3f3Y5xzHQwTUrb5jHDy7z/9iuH/AJFBUYTSzafnR6FCtRVY50z1QQihXtB65WchZZTmXcu7/yzRUaixv8= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: The shrinker_rwsem is a global read-write lock in shrinkers subsystem, which protects most operations such as slab shrink, registration and unregistration of shrinkers, etc. This can easily cause problems in the following cases. 1) When the memory pressure is high and there are many filesystems mounted or unmounted at the same time, slab shrink will be affected (down_read_trylock() failed). Such as the real workload mentioned by Kirill Tkhai: ``` One of the real workloads from my experience is start of an overcommitted node containing many starting containers after node crash (or many resuming containers after reboot for kernel update). In these cases memory pressure is huge, and the node goes round in long reclaim. ``` 2) If a shrinker is blocked (such as the case mentioned in [1]) and a writer comes in (such as mount a fs), then this writer will be blocked and cause all subsequent shrinker-related operations to be blocked. Even if there is no competitor when shrinking slab, there may still be a problem. The down_read_trylock() may become a perf hotspot with frequent calls to shrink_slab(). Because of the poor multicore scalability of atomic operations, this can lead to a significant drop in IPC (instructions per cycle). We used to implement the lockless slab shrink with SRCU [2], but then kernel test robot reported -88.8% regression in stress-ng.ramfs.ops_per_sec test case [3], so we reverted it [4]. This commit uses the refcount+RCU method [5] proposed by Dave Chinner to re-implement the lockless global slab shrink. The memcg slab shrink is handled in the subsequent patch. For now, all shrinker instances are converted to dynamically allocated and will be freed by call_rcu(). So we can use rcu_read_{lock,unlock}() to ensure that the shrinker instance is valid. And the shrinker instance will not be run again after unregistration. So the structure that records the pointer of shrinker instance can be safely freed without waiting for the RCU read-side critical section. In this way, while we implement the lockless slab shrink, we don't need to be blocked in unregister_shrinker(). The following are the test results: stress-ng --timeout 60 --times --verify --metrics-brief --ramfs 9 & 1) Before applying this patchset: setting to a 60 second run per stressor dispatching hogs: 9 ramfs stressor bogo ops real time usr time sys time bogo ops/s bogo ops/s (secs) (secs) (secs) (real time) (usr+sys time) ramfs 735238 60.00 12.37 363.70 12253.05 1955.08 for a 60.01s run time: 1440.27s available CPU time 12.36s user time ( 0.86%) 363.70s system time ( 25.25%) 376.06s total time ( 26.11%) load average: 10.79 4.47 1.69 passed: 9: ramfs (9) failed: 0 skipped: 0 successful run completed in 60.01s (1 min, 0.01 secs) 2) After applying this patchset: setting to a 60 second run per stressor dispatching hogs: 9 ramfs stressor bogo ops real time usr time sys time bogo ops/s bogo ops/s (secs) (secs) (secs) (real time) (usr+sys time) ramfs 746698 60.00 12.45 376.16 12444.02 1921.47 for a 60.01s run time: 1440.28s available CPU time 12.44s user time ( 0.86%) 376.16s system time ( 26.12%) 388.60s total time ( 26.98%) load average: 9.01 3.85 1.49 passed: 9: ramfs (9) failed: 0 skipped: 0 successful run completed in 60.01s (1 min, 0.01 secs) We can see that the ops/s has hardly changed. [1]. https://lore.kernel.org/lkml/20191129214541.3110-1-ptikhomirov@virtuozzo.com/ [2]. https://lore.kernel.org/lkml/20230313112819.38938-1-zhengqi.arch@bytedance.com/ [3]. https://lore.kernel.org/lkml/202305230837.db2c233f-yujie.liu@intel.com/ [4]. https://lore.kernel.org/all/20230609081518.3039120-1-qi.zheng@linux.dev/ [5]. https://lore.kernel.org/lkml/ZIJhou1d55d4H1s0@dread.disaster.area/ Signed-off-by: Qi Zheng --- include/linux/shrinker.h | 17 ++++++++++ mm/shrinker.c | 70 +++++++++++++++++++++++++++++----------- 2 files changed, 68 insertions(+), 19 deletions(-) diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index eb342994675a..f06225f18531 100644 --- a/include/linux/shrinker.h +++ b/include/linux/shrinker.h @@ -4,6 +4,8 @@ #include #include +#include +#include #define SHRINKER_UNIT_BITS BITS_PER_LONG @@ -87,6 +89,10 @@ struct shrinker { int seeks; /* seeks to recreate an obj */ unsigned flags; + refcount_t refcount; + struct completion done; + struct rcu_head rcu; + void *private_data; /* These are for internal use */ @@ -120,6 +126,17 @@ struct shrinker *shrinker_alloc(unsigned int flags, const char *fmt, ...); void shrinker_register(struct shrinker *shrinker); void shrinker_free(struct shrinker *shrinker); +static inline bool shrinker_try_get(struct shrinker *shrinker) +{ + return refcount_inc_not_zero(&shrinker->refcount); +} + +static inline void shrinker_put(struct shrinker *shrinker) +{ + if (refcount_dec_and_test(&shrinker->refcount)) + complete(&shrinker->done); +} + #ifdef CONFIG_SHRINKER_DEBUG extern int __printf(2, 3) shrinker_debugfs_rename(struct shrinker *shrinker, const char *fmt, ...); diff --git a/mm/shrinker.c b/mm/shrinker.c index 1911c06b8af5..d318f5621862 100644 --- a/mm/shrinker.c +++ b/mm/shrinker.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include "internal.h" @@ -577,33 +578,42 @@ unsigned long shrink_slab(gfp_t gfp_mask, int nid, struct mem_cgroup *memcg, if (!mem_cgroup_disabled() && !mem_cgroup_is_root(memcg)) return shrink_slab_memcg(gfp_mask, nid, memcg, priority); - if (!down_read_trylock(&shrinker_rwsem)) - goto out; - - list_for_each_entry(shrinker, &shrinker_list, list) { + rcu_read_lock(); + list_for_each_entry_rcu(shrinker, &shrinker_list, list) { struct shrink_control sc = { .gfp_mask = gfp_mask, .nid = nid, .memcg = memcg, }; + if (!shrinker_try_get(shrinker)) + continue; + + /* + * We can safely unlock the RCU lock here since we already + * hold the refcount of the shrinker. + */ + rcu_read_unlock(); + ret = do_shrink_slab(&sc, shrinker, priority); if (ret == SHRINK_EMPTY) ret = 0; freed += ret; + /* - * Bail out if someone want to register a new shrinker to - * prevent the registration from being stalled for long periods - * by parallel ongoing shrinking. + * This shrinker may be deleted from shrinker_list and freed + * after the shrinker_put() below, but this shrinker is still + * used for the next traversal. So it is necessary to hold the + * RCU lock first to prevent this shrinker from being freed, + * which also ensures that the next shrinker that is traversed + * will not be freed (even if it is deleted from shrinker_list + * at the same time). */ - if (rwsem_is_contended(&shrinker_rwsem)) { - freed = freed ? : 1; - break; - } + rcu_read_lock(); + shrinker_put(shrinker); } - up_read(&shrinker_rwsem); -out: + rcu_read_unlock(); cond_resched(); return freed; } @@ -671,13 +681,29 @@ void shrinker_register(struct shrinker *shrinker) } down_write(&shrinker_rwsem); - list_add_tail(&shrinker->list, &shrinker_list); + list_add_tail_rcu(&shrinker->list, &shrinker_list); shrinker->flags |= SHRINKER_REGISTERED; shrinker_debugfs_add(shrinker); up_write(&shrinker_rwsem); + + init_completion(&shrinker->done); + /* + * Now the shrinker is fully set up, take the first reference to it to + * indicate that lookup operations are now allowed to use it via + * shrinker_try_get(). + */ + refcount_set(&shrinker->refcount, 1); } EXPORT_SYMBOL_GPL(shrinker_register); +static void shrinker_free_rcu_cb(struct rcu_head *head) +{ + struct shrinker *shrinker = container_of(head, struct shrinker, rcu); + + kfree(shrinker->nr_deferred); + kfree(shrinker); +} + void shrinker_free(struct shrinker *shrinker) { struct dentry *debugfs_entry = NULL; @@ -686,9 +712,18 @@ void shrinker_free(struct shrinker *shrinker) if (!shrinker) return; + if (shrinker->flags & SHRINKER_REGISTERED) { + shrinker_put(shrinker); + wait_for_completion(&shrinker->done); + } + down_write(&shrinker_rwsem); if (shrinker->flags & SHRINKER_REGISTERED) { - list_del(&shrinker->list); + /* + * Lookups on the shrinker are over and will fail in the future, + * so we can now remove it from the lists and free it. + */ + list_del_rcu(&shrinker->list); debugfs_entry = shrinker_debugfs_detach(shrinker, &debugfs_id); shrinker->flags &= ~SHRINKER_REGISTERED; } else { @@ -702,9 +737,6 @@ void shrinker_free(struct shrinker *shrinker) if (debugfs_entry) shrinker_debugfs_remove(debugfs_entry, debugfs_id); - kfree(shrinker->nr_deferred); - shrinker->nr_deferred = NULL; - - kfree(shrinker); + call_rcu(&shrinker->rcu, shrinker_free_rcu_cb); } EXPORT_SYMBOL_GPL(shrinker_free); From patchwork Mon Aug 7 11:09: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: 13343699 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 74539EB64DD for ; Mon, 7 Aug 2023 11:19:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 126926B0080; Mon, 7 Aug 2023 07:19:51 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0B1278D0005; Mon, 7 Aug 2023 07:19:51 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E44E58D0003; Mon, 7 Aug 2023 07:19:50 -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 CFE6A6B0080 for ; Mon, 7 Aug 2023 07:19:50 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 333B91A0A22 for ; Mon, 7 Aug 2023 11:19:50 +0000 (UTC) X-FDA: 81097063740.23.8C298A0 Received: from mail-pg1-f180.google.com (mail-pg1-f180.google.com [209.85.215.180]) by imf03.hostedemail.com (Postfix) with ESMTP id 5BC1E20023 for ; Mon, 7 Aug 2023 11:19:48 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=O8pmKc9m; spf=pass (imf03.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.180 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691407188; 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=kfKKsEp61SZUnTy00HUcIO/dAXsDrrCBrc1q4f5gA2g=; b=h0EHdaXyG2zpf3+9OVvgNhhpXWjOFMwxHq87lwDq2ZWLSjc+OckOf4sRAWpt3gXOZ2rTl4 2DMGq+LIgmgrkPyOKJinQe068tZIlwEqeqBqhg+mQN1Z+Qx9DqzxDmsmtowpCHuZX4g8wY 7XbzWaEPd4C/e/JvLUBqfvYVYMSRzLI= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691407188; a=rsa-sha256; cv=none; b=aq+sIoRDKxh+VjzH+W3yTJ95PqQbf1/04RPNbATIpFuHZ39kKJ3Y1TKXR2T/e23B+ZfYeE a3ibVZRAGUQl3iBH9t8bzLNBtX614LTg6is0JzVZ/SpQk6ixTRQWgUJPdNHJRBD9rGOrl3 Mdfyqtb5maRdrZtapmvTWUd8sKMjRXo= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=O8pmKc9m; spf=pass (imf03.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.180 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pg1-f180.google.com with SMTP id 41be03b00d2f7-5648fca18b9so575745a12.0 for ; Mon, 07 Aug 2023 04:19:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691407187; x=1692011987; 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=kfKKsEp61SZUnTy00HUcIO/dAXsDrrCBrc1q4f5gA2g=; b=O8pmKc9mkUPcwQn3K6b4vfxrIY3urK+/nlSQG6IQu3i18+IpYULExI3wKEZ/xymknF +6oCCfFy6i2a+FxBuWdzORrib00J2OMl9nk96M99T35Rfc4jeDAhNe99hGl5QvCM8eUE R++VmLiOwJ6rpxA/HEOBJYNzpyPX4zl9hoqj3WQaK+cPExCggyj0/ZBw0z6oFSY7C91n 2YVhcwVUTJYlZTyzWc8hxnW2XvaNGOtz3UCGr0ovpjlwcNhR4geKecrxjuux2WrpYp3y 4o91QPRwP3cp6mR8m2un4L62pLlrYSmXBb+57ubwaC0hesJSLB153WlFgONAQW4tHigo DeMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691407187; x=1692011987; 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=kfKKsEp61SZUnTy00HUcIO/dAXsDrrCBrc1q4f5gA2g=; b=VW8tQBbv2OsjNa+alHfCZ5Fev2xTYrV2sY6FEMaw+opB9JZ8MFF2JqS8DFkvg0bk1V A6DMEbY4j2JoEB8dTWrsTne5ZSuSHs1rosxfYV6D6Rc/fS1cY6rXOGnvGcq5G1wzXJSF BwrrWbbzRRY3qgnlHGZIeituLz8ES9OKymTFrUvEw590Dk3d3dcrEY+IjlcJhaOrFAS2 wW7nqirOqQ7oBOB38NcVoy3rHtIEqkmM3zmFDSCgyUCrcKLQE00C21Ucb02Ql48h1cBK GDTid83Fy7pvR0wAT2ldX5O0f1E/Y+VUT/GWinRtw5y+sa85nIZMcwyWlKD4/MWTf3Fc V4Mg== X-Gm-Message-State: ABy/qLb35+57vxy/mIaQBrq83OXixGtSZuKqA41ig8ed+zY2ZQb+zGrP LOa9C3s2s42GrxDkYq5QcV/oig== X-Google-Smtp-Source: APBJJlGG6pz8UXODUVvMLzBj3hYH8JYeumw11e9YZ9plh8RnP0KuzfFyuRP+T7CTu9v0n/nCJMsqhQ== X-Received: by 2002:a17:90a:1090:b0:268:126c:8a8b with SMTP id c16-20020a17090a109000b00268126c8a8bmr24580285pja.3.1691407187287; Mon, 07 Aug 2023 04:19:47 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.19.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:19:46 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v4 46/48] mm: shrinker: make memcg slab shrink lockless Date: Mon, 7 Aug 2023 19:09:34 +0800 Message-Id: <20230807110936.21819-47-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Stat-Signature: 8odtor8or4yjke1bj18krqri5sprxww4 X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 5BC1E20023 X-Rspam-User: X-HE-Tag: 1691407188-306434 X-HE-Meta: U2FsdGVkX18Z8b5oziF8egHwb62fTD7dLjH4p1c0njPB7FsLb/DH8H724B7I9s1yqMa7YMavhaVt52pbuwyKupjqUcSc7vxfir75dh9FaBf11tiPByshvX5gc5v9g1vGgTeeXzN+LrLfWJ2rzYKebox/CrxUuk1SnPTyv4e+Tq4B+q8TRF5QNxh+LqH29erM7IklyjG75/cDT1AbIbeD0SPRl0BNXZK5JLamRzU9xtfDrSOuNJKTuDWxrI/+YShDPSiEtMMOtPzZGMif7r+eeYowc40dEOMwiEPRJg7wyfWRpJ+EU1n+Mxv0vrIplJ2h3joSV5e1N4TIcbZe3X9hKqpsrsjWrYHc2UMUKuU+Cwn5qO9OnTcBo4Y3jyfcbpDsWN0FmLUPKJhqBdIyUlbYjMBLSyQuSMc7qvGeDT8wIRUW+5gZ0nKJQmCA/lNB5RHeYBjJZFZQ340C30LB9OH/vu3ZEWEd/HDvxp/lxFHqi2gHN2Xs12M6BZtBze8/b7ogW3usw5STTIKOtYd2GsRLKBLYRiPoYLS+bMZ0+lgZdOkre3+aQ2Eognca4R0UPXUwUjqJEgcIzPWabgFYpU2jEHtdV7wix27n1bLxKP6ArNt/uwFnll/PvhRfUyaJhkqrC4Dr0v4UvYtYs5amQvbD5kfx0teE8sr+qymy90nm5fTrhAGsNpPM1alwpvoFnEtpns93Q/5QK+YYz2DV1kMLZ8okSOLGkEAzjdHjFZGBDNeeEw1J4D68t9dsyHDfn3JoAn09dPH6QJ0IhxxwrhUAMAKZwikZdZTo5uR8dq8cgIy67gQVRxuzVP3wjHFLweu/aZbAiNlcaVZ4wB4bDWeWA1IAsq+KkfXI0yeTaov2CpvlejF1LKGJjK6uzP3R4MXH56PgK/NpSdZ45pyjBhqDM5/ktHAIi4zFckWuvYbZn1X0XvuBcuMJn6g3I6Cc05VSHxm55V/M4RKFM2DhtzC aQpo3LEE XAt2MjBeCWwoVO8lDD0sGbB4tRYG42c/KRcSkuZEabiLHsS8s8NAaiBTIKOzc/nMUUAsWu+Y7xl4rTUkV4+6zHJ26YCe0hoabiygsA2hkdTUwVrp7VObxxOt6VpWLZE9bhjhUywum29yD7tji8JbBTRXQBbOqRIhgp+poBF5LBpR+BQL4Qcix3N1i4vulrJQq2V/FP13rIfcWqFWgAKvtSe73Dym0X1TD6vUS8dPfdqeJuufaiAGkI3BufyBssFNNnlUmlpIG0IaQJ+tyiaaPpzor1AeAuILw13Wxzajx5IzxMjbQHC9cTs+Q0WHyYPjngsYkpJv/aRNZAkLu2suZVhxO400Af2CRtWMNq4SJgoJX4Ez6CBhi1AcH8IxKsdjKJ+gVDjA6mYHrWZOj+jEIjTq3Sq3RpR/xPVOG X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Like global slab shrink, this commit also uses refcount+RCU method to make memcg slab shrink lockless. Use the following script to do slab shrink stress test: ``` DIR="/root/shrinker/memcg/mnt" do_create() { mkdir -p /sys/fs/cgroup/memory/test echo 4G > /sys/fs/cgroup/memory/test/memory.limit_in_bytes for i in `seq 0 $1`; do mkdir -p /sys/fs/cgroup/memory/test/$i; echo $$ > /sys/fs/cgroup/memory/test/$i/cgroup.procs; mkdir -p $DIR/$i; done } do_mount() { for i in `seq $1 $2`; do mount -t tmpfs $i $DIR/$i; done } do_touch() { for i in `seq $1 $2`; do echo $$ > /sys/fs/cgroup/memory/test/$i/cgroup.procs; dd if=/dev/zero of=$DIR/$i/file$i bs=1M count=1 & done } case "$1" in touch) do_touch $2 $3 ;; test) do_create 4000 do_mount 0 4000 do_touch 0 3000 ;; *) exit 1 ;; esac ``` Save the above script, then run test and touch commands. Then we can use the following perf command to view hotspots: perf top -U -F 999 1) Before applying this patchset: 40.44% [kernel] [k] down_read_trylock 17.59% [kernel] [k] up_read 13.64% [kernel] [k] pv_native_safe_halt 11.90% [kernel] [k] shrink_slab 8.21% [kernel] [k] idr_find 2.71% [kernel] [k] _find_next_bit 1.36% [kernel] [k] shrink_node 0.81% [kernel] [k] shrink_lruvec 0.80% [kernel] [k] __radix_tree_lookup 0.50% [kernel] [k] do_shrink_slab 0.21% [kernel] [k] list_lru_count_one 0.16% [kernel] [k] mem_cgroup_iter 2) After applying this patchset: 60.17% [kernel] [k] shrink_slab 20.42% [kernel] [k] pv_native_safe_halt 3.03% [kernel] [k] do_shrink_slab 2.73% [kernel] [k] shrink_node 2.27% [kernel] [k] shrink_lruvec 2.00% [kernel] [k] __rcu_read_unlock 1.92% [kernel] [k] mem_cgroup_iter 0.98% [kernel] [k] __rcu_read_lock 0.91% [kernel] [k] osq_lock 0.63% [kernel] [k] mem_cgroup_calculate_protection 0.55% [kernel] [k] shrinker_put 0.46% [kernel] [k] list_lru_count_one We can see that the first perf hotspot becomes shrink_slab, which is what we expect. Signed-off-by: Qi Zheng --- mm/shrinker.c | 80 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 54 insertions(+), 26 deletions(-) diff --git a/mm/shrinker.c b/mm/shrinker.c index d318f5621862..fee6f62904fb 100644 --- a/mm/shrinker.c +++ b/mm/shrinker.c @@ -107,6 +107,12 @@ static struct shrinker_info *shrinker_info_protected(struct mem_cgroup *memcg, lockdep_is_held(&shrinker_rwsem)); } +static struct shrinker_info *shrinker_info_rcu(struct mem_cgroup *memcg, + int nid) +{ + return rcu_dereference(memcg->nodeinfo[nid]->shrinker_info); +} + static int expand_one_shrinker_info(struct mem_cgroup *memcg, int new_size, int old_size, int new_nr_max) { @@ -198,7 +204,7 @@ void set_shrinker_bit(struct mem_cgroup *memcg, int nid, int shrinker_id) struct shrinker_info_unit *unit; rcu_read_lock(); - info = rcu_dereference(memcg->nodeinfo[nid]->shrinker_info); + info = shrinker_info_rcu(memcg, nid); unit = info->unit[shriner_id_to_index(shrinker_id)]; if (!WARN_ON_ONCE(shrinker_id >= info->map_nr_max)) { /* Pairs with smp mb in shrink_slab() */ @@ -211,7 +217,7 @@ void set_shrinker_bit(struct mem_cgroup *memcg, int nid, int shrinker_id) static DEFINE_IDR(shrinker_idr); -static int prealloc_memcg_shrinker(struct shrinker *shrinker) +static int shrinker_memcg_alloc(struct shrinker *shrinker) { int id, ret = -ENOMEM; @@ -219,7 +225,6 @@ static int prealloc_memcg_shrinker(struct shrinker *shrinker) return -ENOSYS; down_write(&shrinker_rwsem); - /* This may call shrinker, so it must use down_read_trylock() */ id = idr_alloc(&shrinker_idr, shrinker, 0, 0, GFP_KERNEL); if (id < 0) goto unlock; @@ -237,7 +242,7 @@ static int prealloc_memcg_shrinker(struct shrinker *shrinker) return ret; } -static void unregister_memcg_shrinker(struct shrinker *shrinker) +static void shrinker_memcg_remove(struct shrinker *shrinker) { int id = shrinker->id; @@ -253,10 +258,15 @@ static long xchg_nr_deferred_memcg(int nid, struct shrinker *shrinker, { struct shrinker_info *info; struct shrinker_info_unit *unit; + long nr_deferred; - info = shrinker_info_protected(memcg, nid); + rcu_read_lock(); + info = shrinker_info_rcu(memcg, nid); unit = info->unit[shriner_id_to_index(shrinker->id)]; - return atomic_long_xchg(&unit->nr_deferred[shriner_id_to_offset(shrinker->id)], 0); + nr_deferred = atomic_long_xchg(&unit->nr_deferred[shriner_id_to_offset(shrinker->id)], 0); + rcu_read_unlock(); + + return nr_deferred; } static long add_nr_deferred_memcg(long nr, int nid, struct shrinker *shrinker, @@ -264,10 +274,16 @@ static long add_nr_deferred_memcg(long nr, int nid, struct shrinker *shrinker, { struct shrinker_info *info; struct shrinker_info_unit *unit; + long nr_deferred; - info = shrinker_info_protected(memcg, nid); + rcu_read_lock(); + info = shrinker_info_rcu(memcg, nid); unit = info->unit[shriner_id_to_index(shrinker->id)]; - return atomic_long_add_return(nr, &unit->nr_deferred[shriner_id_to_offset(shrinker->id)]); + nr_deferred = + atomic_long_add_return(nr, &unit->nr_deferred[shriner_id_to_offset(shrinker->id)]); + rcu_read_unlock(); + + return nr_deferred; } void reparent_shrinker_deferred(struct mem_cgroup *memcg) @@ -299,12 +315,12 @@ void reparent_shrinker_deferred(struct mem_cgroup *memcg) up_read(&shrinker_rwsem); } #else -static int prealloc_memcg_shrinker(struct shrinker *shrinker) +static int shrinker_memcg_alloc(struct shrinker *shrinker) { return -ENOSYS; } -static void unregister_memcg_shrinker(struct shrinker *shrinker) +static void shrinker_memcg_remove(struct shrinker *shrinker) { } @@ -464,18 +480,23 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, if (!mem_cgroup_online(memcg)) return 0; - if (!down_read_trylock(&shrinker_rwsem)) - return 0; - - info = shrinker_info_protected(memcg, nid); +again: + rcu_read_lock(); + info = shrinker_info_rcu(memcg, nid); if (unlikely(!info)) goto unlock; - for (; index < shriner_id_to_index(info->map_nr_max); index++) { + if (index < shriner_id_to_index(info->map_nr_max)) { struct shrinker_info_unit *unit; unit = info->unit[index]; + /* + * The shrinker_info_unit will not be freed, so we can + * safely release the RCU lock here. + */ + rcu_read_unlock(); + for_each_set_bit(offset, unit->map, SHRINKER_UNIT_BITS) { struct shrink_control sc = { .gfp_mask = gfp_mask, @@ -485,12 +506,14 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, struct shrinker *shrinker; int shrinker_id = calc_shrinker_id(index, offset); + rcu_read_lock(); shrinker = idr_find(&shrinker_idr, shrinker_id); - if (unlikely(!shrinker || !(shrinker->flags & SHRINKER_REGISTERED))) { - if (!shrinker) - clear_bit(offset, unit->map); + if (unlikely(!shrinker || !shrinker_try_get(shrinker))) { + clear_bit(offset, unit->map); + rcu_read_unlock(); continue; } + rcu_read_unlock(); /* Call non-slab shrinkers even though kmem is disabled */ if (!memcg_kmem_online() && @@ -523,15 +546,20 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, set_shrinker_bit(memcg, nid, shrinker_id); } freed += ret; - - if (rwsem_is_contended(&shrinker_rwsem)) { - freed = freed ? : 1; - goto unlock; - } + shrinker_put(shrinker); } + + /* + * We have already exited the read-side of rcu critical section + * before calling do_shrink_slab(), the shrinker_info may be + * released in expand_one_shrinker_info(), so reacquire the + * shrinker_info. + */ + index++; + goto again; } unlock: - up_read(&shrinker_rwsem); + rcu_read_unlock(); return freed; } #else /* !CONFIG_MEMCG */ @@ -638,7 +666,7 @@ struct shrinker *shrinker_alloc(unsigned int flags, const char *fmt, ...) shrinker->flags = flags | SHRINKER_ALLOCATED; if (flags & SHRINKER_MEMCG_AWARE) { - err = prealloc_memcg_shrinker(shrinker); + err = shrinker_memcg_alloc(shrinker); if (err == -ENOSYS) shrinker->flags &= ~SHRINKER_MEMCG_AWARE; else if (err == 0) @@ -731,7 +759,7 @@ void shrinker_free(struct shrinker *shrinker) } if (shrinker->flags & SHRINKER_MEMCG_AWARE) - unregister_memcg_shrinker(shrinker); + shrinker_memcg_remove(shrinker); up_write(&shrinker_rwsem); if (debugfs_entry) From patchwork Mon Aug 7 11:09:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343700 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 BEA43C41513 for ; Mon, 7 Aug 2023 11:20:04 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5BB116B0075; Mon, 7 Aug 2023 07:20:04 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 54D308D0005; Mon, 7 Aug 2023 07:20:04 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3BD898D0003; Mon, 7 Aug 2023 07:20:04 -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 2E6CB6B0075 for ; Mon, 7 Aug 2023 07:20:04 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id F3A6F1409CB for ; Mon, 7 Aug 2023 11:20:03 +0000 (UTC) X-FDA: 81097064286.04.A3C6067 Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) by imf05.hostedemail.com (Postfix) with ESMTP id 5F7F9100011 for ; Mon, 7 Aug 2023 11:20:01 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=i3OLYIqg; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf05.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.41 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691407202; 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=X5ij/O+E/bk/tTzX9mgxwiCynzBHcXx4EKtI9EsHayo=; b=c75EPncV0oMaUWpBJwhfheksCQ7ejH1dmuUCQtUIFrsE2O0yBfNT1DkGtPdYhoEbGHtUMG zcfDQXWqngVWYWLkkHFQ0JAs+PxP3TskdLnGuO8eJCfLWAkPK2qjnB7LJnEg2yefxyw/k/ dvIalrLKND+jprAHiQ7JIl4MiSx79ZU= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=i3OLYIqg; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf05.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.41 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691407202; a=rsa-sha256; cv=none; b=kmlD9qF8Yp5OQitpzDFOSVu0lOiv9c9K4vJseu1xXOM03xAreZLnOzc8ZWmpBhIFAOyrdp VkNyMnN01fn7PS8oDAdFITgO5Bq/HbGJq2PXaRV/kZ9Y7/X/JOWwBfAJ23unL12Ma2yaQP uSTTLYQrwJUsbB6/NOWv9G6qxIy/R0M= Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-26890669c8eso933006a91.1 for ; Mon, 07 Aug 2023 04:20:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691407200; x=1692012000; 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=X5ij/O+E/bk/tTzX9mgxwiCynzBHcXx4EKtI9EsHayo=; b=i3OLYIqgHrVEAaoeqhN7xu/7U1C+reDkv4O93uYT3wVXPD8PclsjVNwGlC6uACGJON 5G7yHqhhbIuKFoghA6ZSicHcXMJKMfCogQ8szn+vWtZn4EOKB8vbAdIc7rpijTp0cbxa Z/AamO41rUovV3Rd5mToLS3fdUn/gIbndWW5fXdkD//uV9WpRp/5E2yE1kJcYdxc2q43 2kKg85HGCsKzT23sBdglbe/LKtHC4WUeFtaNvdRNowxvHAXGs/cRyz4+kFuB/ka63yH8 5vv+ldmlZuknYjC0UrMsohE+IjtZuT+2tIf1cSRO1giyAMKM5zLXRshImNoV+3DwaEWW qy8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691407200; x=1692012000; 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=X5ij/O+E/bk/tTzX9mgxwiCynzBHcXx4EKtI9EsHayo=; b=Xe68d4CYnva89IJm4vVenb7qNPPayWd0JJ9pr2W4IZ/g1mAxatwe5S0wLZjFbR2vCl hDoTXmQpIpWy42230Olnl/IpZRZoZeMvFveOLszYJa0YBQ7o0FKkPtXk7doYvzfhr41a wOfG93JANCfUhLTFSIy2cf8Nskdx5XVctA0wZwx/EUPv7iNUbpnLBAYPtwj5w6DBVbhL LjtWxFLIIRkhDEeoCzSP/ePh4364iFcL4F98pFXRGbcRl312KjPEUIhIXKv2y6iJq06i RvTP40aszRkVJlgtEth7g/Fz0aGUBCBbCyC7QV+mrWpIF8CXErKnFlMy3S8GFB9A571+ QJ6g== X-Gm-Message-State: AOJu0Yy8bAtB0t9e3Z3AkOcp0FYTa0puMkdbHZbxUBEJtHgoP0fQZ8fs BB3t5wq8KNBEgIWs95+TCPIsaw== X-Google-Smtp-Source: AGHT+IH1iUQIXRu8fJbzxUHSh+kWmc44BJdJFh0ZxZy41KSEiq7lusFAb/6JfkXEPdg45Q03TKbByg== X-Received: by 2002:a17:90a:9c3:b0:269:41cf:7212 with SMTP id 61-20020a17090a09c300b0026941cf7212mr4973775pjo.4.1691407200010; Mon, 07 Aug 2023 04:20:00 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.19.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:19:59 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v4 47/48] mm: shrinker: hold write lock to reparent shrinker nr_deferred Date: Mon, 7 Aug 2023 19:09:35 +0800 Message-Id: <20230807110936.21819-48-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: 3komjzdnq5feuoca1x5trip9oxj643yx X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 5F7F9100011 X-HE-Tag: 1691407201-908243 X-HE-Meta: U2FsdGVkX1/paXCJvOt29EztZy0A1EIZ51mZsL95PvEW/2Ndi9mxTTQIRr+ihx6gDWNf/gFDkY6bL9rRwuiDuulVsRBDFx2TuYos76Wl4YiJI+rO9gJOj+vF3On+or1Wd7HbcqcJ7hitCvWcjF7HnUFng4u6OtNis/BCv7PvW43EHKd+Rbss/yb7lZFAWepODhVJprb7YtEPLwOquhLEcf27Hhbnd5gyPpIBgVwSAaI9q5DjHCZ/ndWxPrH5yPyWS83OZ9YuUqbEVTtZlKD/qY8r7Rz+20kZOMGkYJqm3fCWbBk/tdgzAc5Y3dJCYkay1NXSAbHTo80hl8zAlNVWulsnbxjFe2gYdrxbQOfzqvpOqLOqwXi1NCXoPO9QJhLVv6NtVwQ4BAH8Gx1Fc4cu031azFw4nvYdlAtn4O1EP7T8JzBz+8ytVIsYVyFJFDP36QimDpBpwELKKbqGp4wQNnbkmv47jdPw2W5DLGRU0xlhi++/XZ+slyPo8fMBAWItEmxaVR9pJ19ctqQdG5pTVV7KdIQDwSMyCXZRhsswQIPKoUd+9BFWZS5sR3dGJK2VYq2m9e1/SceqnkFU8t7LTksv14340+3uP0vgavpj87T39RNhQVAR0UgvIJGSAVZGrFgPMdKoLPDEgTBFpx0cU2u9R3Nfh51eyUhFKvHMUqZDqemrnDGQO8aoOvtydzkYIeDo33iAFenwESGlwVyGH0qzxSsZUIEsX3jh0Ok7QkAAV69Gl0Li2qovuhCAmcyhNB87csu1yV0rNLMdYAoP/AFMTMW+83b/Hm9IeQFkwQvZZvckPADuiLIJyX1djBcrHCTLssZa23skrBjilKhCJOknqZ4gETfpSZhoepeq0wOFhbRAP0scqsM22uKtLe0m9e3rY50nCGxJO1QETFyHl8EP+lDM4QEIBuweQoBSLWHgxPdDJ0Cw9DtTxdc7e+cGY0nOP3IG7KcBaSe/rTD 7gw9MBlY IlQHAhMGxjoX9XVORRlHwPhP+c3o+SLiez2uuc60PMsFU+aGyUjB4MJToPzWBDS1wP0KjrPXse1wSBd0V3zD+Y8lhlgEihASH+jr9fKKGYzdQCzKmwbvttAVaxrUxVsrKdgSzVU0zDongZV+HSe0Fc2o+/5MTaB2K2L65I6ThY1vB/VyCX7LBOCTIrEBDLk8XFaAk3E505ROs35xIVLPzZ11Zu+mlcU2N5Ibe5L0Kg3GT9+Mq0hzIlXHEJJriNmG60+eF6goaWYkw+g8rAro5taI4kXAn/KiUCyXAHkjTvVNJsKlklW5KW29vKr8LSeK9aqQoHfPcVSWlJniS3zEwBYkHueTKlUWAYUd8Fe5VucdQaixy2INu9Ra8wpO7uXpkhH4govY6DLuBK8Cb7Rrdz6fbKr14Ty7gdXp618AJCJAyUMJI+T2rqcvnGmR6JbSxFh3zZnICaCHY0TBnjMfcmvzIeQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: For now, reparent_shrinker_deferred() is the only holder of read lock of shrinker_rwsem. And it already holds the global cgroup_mutex, so it will not be called in parallel. Therefore, in order to convert shrinker_rwsem to shrinker_mutex later, here we change to hold the write lock of shrinker_rwsem to reparent. Signed-off-by: Qi Zheng --- mm/shrinker.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mm/shrinker.c b/mm/shrinker.c index fee6f62904fb..a12dede5d21f 100644 --- a/mm/shrinker.c +++ b/mm/shrinker.c @@ -299,7 +299,7 @@ void reparent_shrinker_deferred(struct mem_cgroup *memcg) parent = root_mem_cgroup; /* Prevent from concurrent shrinker_info expand */ - down_read(&shrinker_rwsem); + down_write(&shrinker_rwsem); for_each_node(nid) { child_info = shrinker_info_protected(memcg, nid); parent_info = shrinker_info_protected(parent, nid); @@ -312,7 +312,7 @@ void reparent_shrinker_deferred(struct mem_cgroup *memcg) } } } - up_read(&shrinker_rwsem); + up_write(&shrinker_rwsem); } #else static int shrinker_memcg_alloc(struct shrinker *shrinker) From patchwork Mon Aug 7 11:09:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13343701 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 EC65AEB64DD for ; Mon, 7 Aug 2023 11:20:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8EF366B0081; Mon, 7 Aug 2023 07:20:16 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8787A8D0005; Mon, 7 Aug 2023 07:20:16 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6F2068D0003; Mon, 7 Aug 2023 07:20:16 -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 600816B0081 for ; Mon, 7 Aug 2023 07:20:16 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 2B6351A055D for ; Mon, 7 Aug 2023 11:20:16 +0000 (UTC) X-FDA: 81097064832.23.8E0618F Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) by imf02.hostedemail.com (Postfix) with ESMTP id 35F3A80012 for ; Mon, 7 Aug 2023 11:20:13 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=AEtfoTIx; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf02.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.50 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691407214; 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=+T9zoPssix7N9qfaGNa68znQHEAFyeYciCKXdVaHQFo=; b=lHIA71pmJQgu/xjqMyImDYjG7ftbrmGS2FY3Wvft4SPdM4/1ftmNc3TIhRxAU+hi5+PrAk go7GvRZxSlc9kewru56nEA23b6/BDJJaXFDFfKH4EuDVrQi4ljsE2A4HHL2C76wS8qMxp6 quWx9ERggICkyvA2F2Shh4hmDwAQSbQ= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=AEtfoTIx; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf02.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.50 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691407214; a=rsa-sha256; cv=none; b=gX9a6WtldEU3tSkL+UgpllUBy/kgbCzrUsn8vf5cviIiEDYzIMHC7OIiAAVZb7sNMYcU0H ov06SmCSqpDJWUzOKwmbOuySgiRzJVnRvok58zI1KoKVvFEGLnWvIrhUrUA+ouPnqXhWti nphbCueKNgquc3n1uMphQ6mo1nn3S40= Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-2690803a368so591682a91.1 for ; Mon, 07 Aug 2023 04:20:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691407213; x=1692012013; 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=+T9zoPssix7N9qfaGNa68znQHEAFyeYciCKXdVaHQFo=; b=AEtfoTIxkqzl025wvf9yyl8OvVpV1orZ+7ADsAn8FRdyaHqyneHFGuyJ9jSB6bZbnq 2fmUw9pixcoPu0uENFLV6yEHDyHzbx9PEa4/1QReRkJ9Vdrtq4t36sOjNjHyywd/DJSd tcNSBkDsm06qXT7HTJrbLcS8z4Stb96uz/ah29ckB60DgcXFm35Nrt3Aq6Gzw7rdETno 9DoEQihV9/klwV9kg7jDjWFfkJeTbrOGsUsJTU6XthyBDJ62ZHYmlNs7Ps0ai9BdMXBM XSVKEoVI2ousbfFpSnJdwsS47J/fbQRy8WPmYTGdWXjklXq1QHXWKCVy/72epw0hglU+ Vytw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691407213; x=1692012013; 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=+T9zoPssix7N9qfaGNa68znQHEAFyeYciCKXdVaHQFo=; b=eQEQHdeftXaAY+fmNCb0QbhXuuqxH7PfYALmcIH5cUL4e2cMWo2Z4SPVylnQU4c8Sf dViHaPuLV7N+9zo0Yvr6ZThdWJypreggxGV6LJbc52r1dW1SEMMxcDXNeniuLVZMMBAA tc+iMshN3rg19w2KpW+iOcP1pFrfpaH66YwK/brA6EpQZHBPQGoCC2NNloO3l3InxXGd kTEJFf9UHl2cm7kL4cPuMtUnwNhF4yIZRTa9+fJ8Jg+2Ewb5kZpuaQfcKzUDpSeQ1Q/1 b7A85DfF1YGLxAHq72dvsWUnVUN7p3tZ2ohtRFIFm8Z6/1hj0QL5GIrpc6hQ1HAugOfs H/9g== X-Gm-Message-State: AOJu0YyHUMpiasjM2te98uJBmFe+CpHSpmsCxo5G0jTdcxPdGxayhYpr K46Rj/p5NW6vz30icxgNlGRQRw== X-Google-Smtp-Source: AGHT+IF0evmdLrDlsDTr5Y4TU4NmdZynXgLSKug5uHjkOo8cedCVYEqxJp+s7Xi+ZKGxMcrB3jNS6g== X-Received: by 2002:a17:90a:648:b0:269:60ed:d493 with SMTP id q8-20020a17090a064800b0026960edd493mr1830877pje.4.1691407213020; Mon, 07 Aug 2023 04:20:13 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id y13-20020a17090aca8d00b0025be7b69d73sm5861191pjt.12.2023.08.07.04.20.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:20:12 -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, simon.horman@corigine.com, dlemoal@kernel.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH v4 48/48] mm: shrinker: convert shrinker_rwsem to mutex Date: Mon, 7 Aug 2023 19:09:36 +0800 Message-Id: <20230807110936.21819-49-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230807110936.21819-1-zhengqi.arch@bytedance.com> References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 35F3A80012 X-Stat-Signature: sa6rjpgkbizhna7ar94chuuic454gtpo X-Rspam-User: X-HE-Tag: 1691407213-667779 X-HE-Meta: U2FsdGVkX1/xgCC/djwiHTksHTpOyY8H3CIHuDP5lMUjd7OU25sYQojOATyH1aa3V8Ra5T8lh1+zHSqrCiPN1jz4Q9K9xxnlf0N3GJhO243NI1iwieAuHI2F41J72Nhn0o3RZKdP7rdPwbYc/j7Ph3w2Q5HZVIH25lEgu+46OgCOVsHLGFiyKdpYtBoeTXhZDckGivaPDjPHXYJR+AeO356HPGYKbGmunGUrXvp5LQhVcD6ybwOpr18JbfKHkx1Z6PJJo3BhX8zVrtDDgEcHcO9WQOO7ST8vbbFXzyP7HbmDrvAu9GpbKC2igrUeo0eZlO4GT4gDDxck6VCiadfkr0NxDaR32AYdX3N+d6plZ/X5n5BKg1hN++6qfigGkn4ypShJ7wxwN42JGXxqOY0Ny81aoMc8w/SvxJdf5nFCnhtBvtFprMhghYHqADF6t/TEM1svQynorNqfbI8oK/61r3SOs9/9LXJrG3eErLiecViKVIaMR+Hf3bVpvhFJavhPWoi9CvRJysL8oKePX2bBaR3paGE+ywFSMsgkd0a97Uoch0yYiQc014m+pVj/56bXqxNBvuWFCwHQAq6qmXKf9m+VSzgbmfOUvcdEshwc+0NVJolQ6h+UrwBGtC8jrpAGXIZzUj5zpNVR3QXt+GgQ8zG7tSrWyVKtqC049hAGbO0w+jG1YIGTYr4ZHv7FAvzDXOLkPbnyggzxM9AIjLtd7izG5R+2HrvGRdUsj5mJQTl+/LF6HdklMCg7WK91rB16zVStsdgDzl7vLI+MGx6K9kshJhJk8ykplZLOXceGwjgC7FqX+i8gIPqNPHfXBEe01bIgo42DnRQ+GbgzzdtRIPV6C0hTu8/HaOUjY6rGkh2CIA3AwakXmdlMEM+9yQaeqv+EBULaXLmBqRyCUNa70ci5Ie3GMBlSuQioUa6tMZIbK3QZe5UReqglIpRe2Yz0gAmdRtwZh/45j9oFrvu T4Jt3Ml5 ZYg+hWC6kBOPTsK5deG6KOMcJXcbbhQAHCxZt5MwB+nHFBUeYvL3f8Zj5pzD014pKuKyckvwKg/Eji6kE6wtO0O8C0TDfi/xPipPRdn+K6GY4/YpKK/6iLqyWzOveJZxjG87DUEkBPmKrBOLc6uJE3xm8Iz0oH9TUMv2Ps7zMmiyFmr1N9F93wr/T1mMpHTmhlzQFmD6rk9bc4dYqagW0DlGcCTDD0YIFJa4Lj+ADcpjcjZZKsPg8G2qU7O2bLup9LJMtSpIRTySol4Qac0Vq4j5K/XZJ97amA3xReWPEOS3+5QqlpiWoV7ob2UePup39FQNdPQVR09wGD+I2E/XHTPnFQubxENNrr0pQCt5abxKvRKNWSCiP40cOMI/jRIXtUmJ05PQFJjmxAgwCRMFMH10vPzLXvTtIx9kNVj1enH9O3zbfD2plfowUIRQZHAx5KsC0903UZ9sb7DWuJ75hjR7cCA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Now there are no readers of shrinker_rwsem, so we can simply replace it with mutex lock. Signed-off-by: Qi Zheng --- drivers/md/dm-cache-metadata.c | 2 +- fs/super.c | 2 +- mm/shrinker.c | 28 ++++++++++++++-------------- mm/shrinker_debug.c | 14 +++++++------- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/drivers/md/dm-cache-metadata.c b/drivers/md/dm-cache-metadata.c index acffed750e3e..9e0c69958587 100644 --- a/drivers/md/dm-cache-metadata.c +++ b/drivers/md/dm-cache-metadata.c @@ -1828,7 +1828,7 @@ int dm_cache_metadata_abort(struct dm_cache_metadata *cmd) * Replacement block manager (new_bm) is created and old_bm destroyed outside of * cmd root_lock to avoid ABBA deadlock that would result (due to life-cycle of * shrinker associated with the block manager's bufio client vs cmd root_lock). - * - must take shrinker_rwsem without holding cmd->root_lock + * - must take shrinker_mutex without holding cmd->root_lock */ new_bm = dm_block_manager_create(cmd->bdev, DM_CACHE_METADATA_BLOCK_SIZE << SECTOR_SHIFT, CACHE_MAX_CONCURRENT_LOCKS); diff --git a/fs/super.c b/fs/super.c index a28193045345..60c2d290c754 100644 --- a/fs/super.c +++ b/fs/super.c @@ -54,7 +54,7 @@ static char *sb_writers_name[SB_FREEZE_LEVELS] = { * One thing we have to be careful of with a per-sb shrinker is that we don't * drop the last active reference to the superblock from within the shrinker. * If that happens we could trigger unregistering the shrinker from within the - * shrinker path and that leads to deadlock on the shrinker_rwsem. Hence we + * shrinker path and that leads to deadlock on the shrinker_mutex. Hence we * take a passive reference to the superblock to avoid this from occurring. */ static unsigned long super_cache_scan(struct shrinker *shrink, diff --git a/mm/shrinker.c b/mm/shrinker.c index a12dede5d21f..3d44a335ef3c 100644 --- a/mm/shrinker.c +++ b/mm/shrinker.c @@ -8,7 +8,7 @@ #include "internal.h" LIST_HEAD(shrinker_list); -DECLARE_RWSEM(shrinker_rwsem); +DEFINE_MUTEX(shrinker_mutex); #ifdef CONFIG_MEMCG static int shrinker_nr_max; @@ -80,7 +80,7 @@ int alloc_shrinker_info(struct mem_cgroup *memcg) int nid, ret = 0; int array_size = 0; - down_write(&shrinker_rwsem); + mutex_lock(&shrinker_mutex); array_size = shrinker_unit_size(shrinker_nr_max); for_each_node(nid) { info = kvzalloc_node(sizeof(*info) + array_size, GFP_KERNEL, nid); @@ -91,7 +91,7 @@ int alloc_shrinker_info(struct mem_cgroup *memcg) goto err; rcu_assign_pointer(memcg->nodeinfo[nid]->shrinker_info, info); } - up_write(&shrinker_rwsem); + mutex_unlock(&shrinker_mutex); return ret; @@ -104,7 +104,7 @@ static struct shrinker_info *shrinker_info_protected(struct mem_cgroup *memcg, int nid) { return rcu_dereference_protected(memcg->nodeinfo[nid]->shrinker_info, - lockdep_is_held(&shrinker_rwsem)); + lockdep_is_held(&shrinker_mutex)); } static struct shrinker_info *shrinker_info_rcu(struct mem_cgroup *memcg, @@ -161,7 +161,7 @@ static int expand_shrinker_info(int new_id) if (!root_mem_cgroup) goto out; - lockdep_assert_held(&shrinker_rwsem); + lockdep_assert_held(&shrinker_mutex); new_size = shrinker_unit_size(new_nr_max); old_size = shrinker_unit_size(shrinker_nr_max); @@ -224,7 +224,7 @@ static int shrinker_memcg_alloc(struct shrinker *shrinker) if (mem_cgroup_disabled()) return -ENOSYS; - down_write(&shrinker_rwsem); + mutex_lock(&shrinker_mutex); id = idr_alloc(&shrinker_idr, shrinker, 0, 0, GFP_KERNEL); if (id < 0) goto unlock; @@ -238,7 +238,7 @@ static int shrinker_memcg_alloc(struct shrinker *shrinker) shrinker->id = id; ret = 0; unlock: - up_write(&shrinker_rwsem); + mutex_unlock(&shrinker_mutex); return ret; } @@ -248,7 +248,7 @@ static void shrinker_memcg_remove(struct shrinker *shrinker) BUG_ON(id < 0); - lockdep_assert_held(&shrinker_rwsem); + lockdep_assert_held(&shrinker_mutex); idr_remove(&shrinker_idr, id); } @@ -299,7 +299,7 @@ void reparent_shrinker_deferred(struct mem_cgroup *memcg) parent = root_mem_cgroup; /* Prevent from concurrent shrinker_info expand */ - down_write(&shrinker_rwsem); + mutex_lock(&shrinker_mutex); for_each_node(nid) { child_info = shrinker_info_protected(memcg, nid); parent_info = shrinker_info_protected(parent, nid); @@ -312,7 +312,7 @@ void reparent_shrinker_deferred(struct mem_cgroup *memcg) } } } - up_write(&shrinker_rwsem); + mutex_unlock(&shrinker_mutex); } #else static int shrinker_memcg_alloc(struct shrinker *shrinker) @@ -708,11 +708,11 @@ void shrinker_register(struct shrinker *shrinker) return; } - down_write(&shrinker_rwsem); + mutex_lock(&shrinker_mutex); list_add_tail_rcu(&shrinker->list, &shrinker_list); shrinker->flags |= SHRINKER_REGISTERED; shrinker_debugfs_add(shrinker); - up_write(&shrinker_rwsem); + mutex_unlock(&shrinker_mutex); init_completion(&shrinker->done); /* @@ -745,7 +745,7 @@ void shrinker_free(struct shrinker *shrinker) wait_for_completion(&shrinker->done); } - down_write(&shrinker_rwsem); + mutex_lock(&shrinker_mutex); if (shrinker->flags & SHRINKER_REGISTERED) { /* * Lookups on the shrinker are over and will fail in the future, @@ -760,7 +760,7 @@ void shrinker_free(struct shrinker *shrinker) if (shrinker->flags & SHRINKER_MEMCG_AWARE) shrinker_memcg_remove(shrinker); - up_write(&shrinker_rwsem); + mutex_unlock(&shrinker_mutex); if (debugfs_entry) shrinker_debugfs_remove(debugfs_entry, debugfs_id); diff --git a/mm/shrinker_debug.c b/mm/shrinker_debug.c index aa2027075ed9..b698ca9e309e 100644 --- a/mm/shrinker_debug.c +++ b/mm/shrinker_debug.c @@ -7,7 +7,7 @@ #include /* defined in vmscan.c */ -extern struct rw_semaphore shrinker_rwsem; +extern struct mutex shrinker_mutex; extern struct list_head shrinker_list; static DEFINE_IDA(shrinker_debugfs_ida); @@ -163,7 +163,7 @@ int shrinker_debugfs_add(struct shrinker *shrinker) char buf[128]; int id; - lockdep_assert_held(&shrinker_rwsem); + lockdep_assert_held(&shrinker_mutex); /* debugfs isn't initialized yet, add debugfs entries later. */ if (!shrinker_debugfs_root) @@ -220,7 +220,7 @@ int shrinker_debugfs_rename(struct shrinker *shrinker, const char *fmt, ...) if (!new) return -ENOMEM; - down_write(&shrinker_rwsem); + mutex_lock(&shrinker_mutex); old = shrinker->name; shrinker->name = new; @@ -238,7 +238,7 @@ int shrinker_debugfs_rename(struct shrinker *shrinker, const char *fmt, ...) shrinker->debugfs_entry = entry; } - up_write(&shrinker_rwsem); + mutex_unlock(&shrinker_mutex); kfree_const(old); @@ -251,7 +251,7 @@ struct dentry *shrinker_debugfs_detach(struct shrinker *shrinker, { struct dentry *entry = shrinker->debugfs_entry; - lockdep_assert_held(&shrinker_rwsem); + lockdep_assert_held(&shrinker_mutex); shrinker_debugfs_name_free(shrinker); @@ -279,14 +279,14 @@ static int __init shrinker_debugfs_init(void) shrinker_debugfs_root = dentry; /* Create debugfs entries for shrinkers registered at boot */ - down_write(&shrinker_rwsem); + mutex_lock(&shrinker_mutex); list_for_each_entry(shrinker, &shrinker_list, list) if (!shrinker->debugfs_entry) { ret = shrinker_debugfs_add(shrinker); if (ret) break; } - up_write(&shrinker_rwsem); + mutex_unlock(&shrinker_mutex); return ret; }