From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id D0949EB64DA for ; Thu, 22 Jun 2023 08:54:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6F9F38D0007; Thu, 22 Jun 2023 04:54:22 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6AB698D0001; Thu, 22 Jun 2023 04:54:22 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 571E28D0007; Thu, 22 Jun 2023 04:54:22 -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 490AB8D0001 for ; Thu, 22 Jun 2023 04:54:22 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 22D64140149 for ; Thu, 22 Jun 2023 08:54:22 +0000 (UTC) X-FDA: 80929772364.02.9BB3DDA Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) by imf29.hostedemail.com (Postfix) with ESMTP id 5671A120006 for ; Thu, 22 Jun 2023 08:54:20 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Sk9j4D1M; spf=pass (imf29.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687424060; 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=4+KB+8A1a3nPwmndVeoDnF0UUBrNJStZPfOFWRboZRM=; b=VqBvHcDO1ac2T1+zFANeWh7WmH6SsVXsO6isEU2HFN2QVTK4CF3JVu99meL6tX8Ma/fL0J 5c7/WCvHPCIYZBt2Xqy9LeG+RIljhVv1WiOVVuMj5p2o8mak4NgBCqpIh7AGxxJh8jpzTc h9odSCJWnbp3vF8SgGSwBwbC4KLS9vk= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Sk9j4D1M; spf=pass (imf29.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687424060; a=rsa-sha256; cv=none; b=yOMxC9KIK7vZOi/N+dC6MvKXn+5P9Z7i4DxCTT4v6CrDzJME6ycIGgirLDezU5OYQWoe9k wAd2WNuA6+jTASRjjUDtsDXwhHQbuJJfyQUwGD8IBdCtHlfW3lAokYB8LbfnP2uDkZSpHH zSv2vHpxdPjLXbDtV4kwQnhoGBH6C6c= Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-1b693afe799so2463745ad.1 for ; Thu, 22 Jun 2023 01:54:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1687424059; x=1690016059; 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=4+KB+8A1a3nPwmndVeoDnF0UUBrNJStZPfOFWRboZRM=; b=Sk9j4D1M64xyAQoy0v1SMiRRuiugSGVsgHhv7vYv9c3IikKaUFVDiFJczRjS+t8QJh 8bRZCGyYvkRGHDm8uUJh3JrpsRJfZFHSfxrg783G1zZ8ag+Nrop0sZP8BnmbcU+0S25q ZIKtGKgKPIH7cGpK2fHrvYtY9p82kt8TosN3NcpFb8CLbiW0zQyLzdahaQYLKutpL1Kb iV83VCrLSsoe4tZLXCgr7bzLBi5xWr4Iu6AgSr+ApJLZMKUxhfto21PwHxkzor+s4sBV FrT1a+LNzQzeAZGp0p/ozv8VRhpBFeAgfX/MFGdkWk3iK2t7SrfDgjAEjXYPkdmChJzo lkUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687424059; x=1690016059; 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=4+KB+8A1a3nPwmndVeoDnF0UUBrNJStZPfOFWRboZRM=; b=gqRbabf78plOFsmHc8t4sLggrWfWzFcbazidcMUe67jmckHmaT+xsMkZGdL+YUis+L Aowb8e1QZq1Q7W7ebhFupHkqZpwIoBBoHxHcjq3rcAQj6/s16O7CQO13/eblhmN/gDv5 eWFNrCPmHW+iLtG1hC4xpvKiui2ft+ssqGzyYI5BlbANblGHuSnwE9abfbI6yylOOi4C ASGGj6CbQaIjpptn/37hvaFx2+0/Bdgs7sgaXTnu51N6sXY1157OVd+my4bBS1vDefci JQ6QAZpAyzJE7+P0HwQibnD+0Mc8sGIMZHWVYBMUBdQ9rInk9kUOg49QV5zZtwkZhOAC bDRA== X-Gm-Message-State: AC+VfDx6DhwUFeMoMxTHAq0Ljxrwwz8kOYNP6T4AMbOxLRj4h1LOFOpc VO+W541JW4wo5Qy5ezXaj0sUqQ== X-Google-Smtp-Source: ACHHUZ4ysdKcTcW8I0NFLAt2c3adAhLn+VAaFg6uutJFhO8zbaZNgTMf0Qt9rlrj2Rh11Ffv9G+1Gw== X-Received: by 2002:a17:903:2451:b0:1b0:34c6:3bf2 with SMTP id l17-20020a170903245100b001b034c63bf2mr21537674pls.5.1687424059079; Thu, 22 Jun 2023 01:54:19 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([139.177.225.254]) by smtp.gmail.com with ESMTPSA id h2-20020a170902f7c200b001b549fce345sm4806971plw.230.2023.06.22.01.54.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jun 2023 01:54:18 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, intel-gfx@lists.freedesktop.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-nfs@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH 02/29] mm: vmscan: introduce some helpers for dynamically allocating shrinker Date: Thu, 22 Jun 2023 16:53:08 +0800 Message-Id: <20230622085335.77010-3-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230622085335.77010-1-zhengqi.arch@bytedance.com> References: <20230622085335.77010-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 5671A120006 X-Rspam-User: X-Stat-Signature: q5f14xqykxefiugcm1dmu6sxnu9ncsgx X-Rspamd-Server: rspam01 X-HE-Tag: 1687424060-947350 X-HE-Meta: U2FsdGVkX18emWl84JCetwxr+NOXGlFhPiHPXQV+XUN2YrQ29yYyih/K1Hf3uYKqZOfwN83NyShJBvKDKF43k0K3A2Pgn30m9IISg4mOcb8kae2xMi1BnZ+gKq36ItaA7Wuf9Iwa7v86PictD6s+Ype0ShDUlkEoVfuepz7v8Z74kw8PEbF7SL3NDvvxjJpBJnzD1bQYnYZolJrWSDjCRIkIFlHjU+SoIittz8zXqYnmwga+5I3tpdNFYDZGbZrtlX6NLsyOgRvWjCqukltDnmVABrmjjPaMQLg276jyhhXD3L1T0zfIg69gBT4/X4+Lpy3i9CnxMlRXq0Nj2xx+5ELNnKCsmGjEQKOSrOlsgFPaWTrSUZjKPs/IfpEP+Y5xzJTaR+XDVUi/H/EYQDOQMDOCl4jNx3O/YOzw/tceghCcvVf217S02p5CbeTFG1yxt8ce89axePrY2md5LECohNUmVFl++v6GQq86gfwk/tBbCXLGKd0fpQmrp+wwWS9d0kq5xbEkwhCamgvJgeZdEa1Sbof/8FkAuu/15PhYqcuIU69jR8JHzd5k+s65HqliXeoWIcKk5liM3Wap9Cz5zQV7QRerFCd0PLyL9Kn07sL7AEmvvg1er9gUGFpakcZEI5JEokrG9FdfrsqvS2E+AqLGlGNFQk1uPhjNkVsbTd6XTE9CAj+a11i7bYgjsz3/3y7axtEYmSPqQyUtWsaH4W8QnF61TVI1gUPokEohfzD+bXYpVNpHMsAZ55dYfg3bg0g6aIto1Ra71lcCiEn+/Q7wZnkUY6PZS5tpZJMvnPJ31R+oHiAz895l4ejWlcfkG2RTNHLCByg9zN0ucFEHxOF5yHvEuQiagwnxrU3WT4FP8HqUIIfPU3PWzdUPtFh+YZVL6kvSZSrYBpN50eSmxLt1Ipk0XxJH7CaAMTLbbTuP1T7GGmixOoyg+GT9INl+7mGxxf67R4mGwUZ4BDz ZGKg9f0I OtozSBwtJ4UG7BwyVcpHIbCSEveDUf2v/yVsQxDV4NdeLOJIQ2nPDsb6N8hN8bo6cC/oCVslZmRAPkmsa2HYBvFcaAPTjc4ybq63wBAbJX/D980Py5WAjCHGIZupTya0PGgAbanLdV9peI9r3NBW46jqr2144i2S5fSXx+JAiluTSAMMzqjuJaXy5TVwnN6oOu5yIBEpq24Qiry9ZiO7rhoq/0d5Mv+rABMGNiKTulwMpook/f5BT3lMQy7o7zF1NPuGgwLx2aK2quDah/5x2To8neNPKz40RAVSO0UdhGn1rchyZqbrSKElhgAiavY4LN3hNtyfpcEsL9q8J/vmxf9GT5h1QJQldizXSOvVnBV1gqjawAox6apxgUi5Lg73zD+6CYM3uhnJQd6Gsh72XOZ7G8ydcXCgZhuTZ 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: Introduce some helpers for dynamically allocating shrinker instance, and their uses are as follows: 1. shrinker_alloc_and_init() Used to allocate and initialize a shrinker instance, the priv_data parameter is used to pass the pointer of the previously embedded structure of the shrinker instance. 2. shrinker_free() Used to free the shrinker instance when the registration of shrinker fails. 3. unregister_and_free_shrinker() Used to unregister and free the shrinker instance, and the kfree() will be changed to kfree_rcu() later. Signed-off-by: Qi Zheng --- include/linux/shrinker.h | 12 ++++++++++++ mm/vmscan.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index 43e6fcabbf51..8e9ba6fa3fcc 100644 --- a/include/linux/shrinker.h +++ b/include/linux/shrinker.h @@ -107,6 +107,18 @@ extern void unregister_shrinker(struct shrinker *shrinker); extern void free_prealloced_shrinker(struct shrinker *shrinker); extern void synchronize_shrinkers(void); +typedef unsigned long (*count_objects_cb)(struct shrinker *s, + struct shrink_control *sc); +typedef unsigned long (*scan_objects_cb)(struct shrinker *s, + struct shrink_control *sc); + +struct shrinker *shrinker_alloc_and_init(count_objects_cb count, + scan_objects_cb scan, long batch, + int seeks, unsigned flags, + void *priv_data); +void shrinker_free(struct shrinker *shrinker); +void unregister_and_free_shrinker(struct shrinker *shrinker); + #ifdef CONFIG_SHRINKER_DEBUG extern int shrinker_debugfs_add(struct shrinker *shrinker); extern struct dentry *shrinker_debugfs_detach(struct shrinker *shrinker, diff --git a/mm/vmscan.c b/mm/vmscan.c index 45d17c7cc555..64ff598fbad9 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -809,6 +809,41 @@ void unregister_shrinker(struct shrinker *shrinker) } EXPORT_SYMBOL(unregister_shrinker); +struct shrinker *shrinker_alloc_and_init(count_objects_cb count, + scan_objects_cb scan, long batch, + int seeks, unsigned flags, + void *priv_data) +{ + struct shrinker *shrinker; + + shrinker = kzalloc(sizeof(struct shrinker), GFP_KERNEL); + if (!shrinker) + return NULL; + + shrinker->count_objects = count; + shrinker->scan_objects = scan; + shrinker->batch = batch; + shrinker->seeks = seeks; + shrinker->flags = flags; + shrinker->private_data = priv_data; + + return shrinker; +} +EXPORT_SYMBOL(shrinker_alloc_and_init); + +void shrinker_free(struct shrinker *shrinker) +{ + kfree(shrinker); +} +EXPORT_SYMBOL(shrinker_free); + +void unregister_and_free_shrinker(struct shrinker *shrinker) +{ + unregister_shrinker(shrinker); + kfree(shrinker); +} +EXPORT_SYMBOL(unregister_and_free_shrinker); + /** * synchronize_shrinkers - Wait for all running shrinkers to complete. * -- 2.30.2