From patchwork Thu Aug 24 03:42:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13363492 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 049F1C3DA6F for ; Thu, 24 Aug 2023 03:48:12 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9A87B2800A3; Wed, 23 Aug 2023 23:48:11 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 92FD08E0011; Wed, 23 Aug 2023 23:48:11 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7A93E2800A3; Wed, 23 Aug 2023 23:48:11 -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 63E468E0011 for ; Wed, 23 Aug 2023 23:48:11 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id EB2711401B0 for ; Thu, 24 Aug 2023 03:48:10 +0000 (UTC) X-FDA: 81157615140.10.FF105A3 Received: from mail-oa1-f54.google.com (mail-oa1-f54.google.com [209.85.160.54]) by imf20.hostedemail.com (Postfix) with ESMTP id 3135A1C001B for ; Thu, 24 Aug 2023 03:48:07 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=PJuxMtfg; spf=pass (imf20.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.160.54 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=1692848888; 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=LxPdqdZaLdhGYYJIXR2HiqrFCPctwXJ/6zdagwsVwGU=; b=vqyr1K8ZbNf0+vGx3+elZUnOqyNHMLzY1CawlHgOyWX70yeP+2Yu8QAfzOuN+QZoJfKkSb MGcXmcTPXLilIpRUHy3Mbb45vZXUanX/L8dBOyvZs4hOBkQGU24T33JPYebWoNagRxRGHJ nWpLI69ir9SnYDFCzR70yhPkCQSw3+U= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1692848888; a=rsa-sha256; cv=none; b=IATma63clFu1F+Hpz64sRaiR3pPhbIybOMg+FEmv5cN/kbL8+pMdCAK/mtS2oH4NrEzaki kUieUZ25IiuUpUBu+xpHtS4gnQ06AEEewVYjL39CQhfeO3WuUOkP0TMVMtn5U8yg7VUGJ7 jsJpCXgOwTQRROlXToJB8NYDBFhTH60= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=PJuxMtfg; spf=pass (imf20.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.160.54 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-oa1-f54.google.com with SMTP id 586e51a60fabf-1c134602a55so1134468fac.1 for ; Wed, 23 Aug 2023 20:48:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1692848887; x=1693453687; 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=LxPdqdZaLdhGYYJIXR2HiqrFCPctwXJ/6zdagwsVwGU=; b=PJuxMtfgXiGgGBUiCdmwFzQZzSKHmeg0qoDKufcfTS784L/xDIwTD1+lLPGVYKdHY2 rBP0cjJkTTzpPnAs1x87JmXYN/ZYYtC+gXSknA7fDxhp7i0MEmm+MWDsSg/8O5gfGyTx MpXxiJzAYAQERb3t8MJ6Qpur+mk5F0VpMByzvS3sTwsWDwNng4+smpLsPG6NN5jPn6KN G1sHrCWSckkOsM06kv0UN/eMfulOnTn3juEsShLfG3ofrqlX0FOYySZ4kFESBb9Gbc98 6q26WY2vUTZC1oZG+U7DUHUgJ2+CwxyrSKSk9eO7DDG8HhjgmC6fXTySg2XkeiSj+d5c EsIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692848887; x=1693453687; 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=LxPdqdZaLdhGYYJIXR2HiqrFCPctwXJ/6zdagwsVwGU=; b=WSwR+o2Nb3QyL188ibTKOXYGZl2klPXkydZwJx3cJWqxoK3lA8oHIe519ctmzpC1d0 7YPvgXMXgqZV8FFsyLIRvu0q00CnOZvs6n6z4sDEoXe2oglPBmij3tqKn71s1c+NltoU 2GiebmKYIYUfZ/UbcV1J7wGeoyS0NlxOX8qJ4j4KGXpDIMSQXMOTV6JCznJHx7Z87fVz bGnw1H5Xib69AvLts01y5YUbbzLGP4NWzjDOtqSX0mhQi17g9ZWZIpwjGqXr/SHRJEm6 HuMRNhiqKDlstGPAInv5zP45yjt5ApxeSMND9o7ReADFiEeKxWtjEJgBjrTKaRRu3ntE 0aYQ== X-Gm-Message-State: AOJu0Yx072N86I0gFbSxYYM+mm4Xq5qzadU/u6vmpDPe8oU3+Yki21Bi Axq2Qw1RBZfbeN3PRJnRSgeuvg== X-Google-Smtp-Source: AGHT+IFCmSzrTq4gj/MOmL4UkrAItcPBwWXNEE2+RqRXlnnu5/fpsCgGwGOaIZ24w8cH0PGv9ZafUw== X-Received: by 2002:a05:6870:56a8:b0:1bb:b9d1:37fe with SMTP id p40-20020a05687056a800b001bbb9d137femr16277998oao.2.1692848887374; Wed, 23 Aug 2023 20:48:07 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id t6-20020a63b246000000b005579f12a238sm10533157pgo.86.2023.08.23.20.47.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Aug 2023 20:48: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 Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, Qi Zheng , Muchun Song , Alexander Viro Subject: [PATCH v5 29/45] mbcache: dynamically allocate the mbcache shrinker Date: Thu, 24 Aug 2023 11:42:48 +0800 Message-Id: <20230824034304.37411-30-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230824034304.37411-1-zhengqi.arch@bytedance.com> References: <20230824034304.37411-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 3135A1C001B X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: h55sx5j9i3g69z5bq5m3pxcu6rda6zt1 X-HE-Tag: 1692848887-541617 X-HE-Meta: U2FsdGVkX1/bcB86e16cJu81/ObRu60oKA19xf/Pt2vYMT1M0XzospAs5rnalQKLyHqOAJBAdgnN9Ya5iR3K8om3MJmH59p+qwotcaB31d+1mK7paRADNS/84Ofsi3l0JsU4JY2o5edYXhBYOXspo0VH5vvgZjHgrOTX9F+A5kJ+yTxtDrni0IVToi0vIme4ABsDPL6FBTZq5ErhxOdg4BaUyK1cv+BsZKSkTsKAgCPbq2qbN4YfruPXWCuB0rWHK6EJkJBcC5mKTKFuWTKSPVUo3BvhGFdkXEi+WY5PFL2MU2p2nrXQ/bTI4Byg+d29FjCimEqcut/SVwDIkaikPH2ZXpOf4jHJou/LYjS8PrMm2xeWacKwbyYGGV3/S97RA0v2tr2yYp+eqlmAhrySP7lwFaw4EmRlvl2WAtkNFd1E1fSzY9gYqqVMZHxhL5MvHwt3/wxv5oRV5JDvbGBjAnoxm1RZ6voLwEHC5ZV/ASmvHAy42WztNBKMyggwMvAXowl6blNAo2eT6ZQc+cdF3/6oDQoW6aijj/nBSURCJaihi2esGZ8K6OKQY2MqZbJ0DEW2dFWZt++ipGyQ+iYgMlXewWsbQk9IZMyu5CroZ2MSOB0NIpHffQyMNm5yqhxfNTn5R67F8amBKFQ7l+i50yucl68sdQrG7yqLuOWy71garNas3em0w73DA9WI8vsZMM1AFc1O4ANFHBggj5PkD/pewtT6kuvjOF+8Z0uA0czLGGe0MIFDwGXP5EjCjuqpxKG9kQtialDld1u9z+cEOTG3R1IOXH8Tq/f1rojWXV1cVRomTai8exX4BqzUPFktpyYn9hbVDmftr2TIW05PQuJCmrfSHwFY6gQo8xX/ivCPDXFBehSHadO3l8kEoGUtiEFeAHJNT8U7aay4oxtu/FhiuO9f1oiU0c5BullFb+rTH5cXgpNLqnCbOYF9sJyR7xVqMWs0zAPDH8LeBNx WPGIOE3J DE3acduBaMIFWxoqiG1IjylpkUTHRh2nMYhf6WBB+eUy3DwWhadrzDt83iYOGm5rRX1KZywSLC+MkOTWMzmELxzN2ZDvXXv0nuz3sQb9kzite2TA+gHES6ISeI2CXjLTQR2TPrHOWukyM7VHLZ4WOeCBFxGE+d5xcYm4j30ASHwuVqRfYWD9UhxaWrDXOcI7ShhHSq4yVAJGyNtFO6LwteiifxyekE8zCU05iuN642ZLGNlSM69klUWGTqqRBcBxZRa68SU/ZAPAVm6n7YTYBf3L+JLQy2BE1tlfYRrAs5GXq1EGhkHEUUX36ZggWiOM9rxLTJjP1iG7mqn/Q6ykApMalpVqoEvNNMcQVUSppbjFx0QRewUe4GxsP3vkGiiX40+sN4NzyLyvx19yFuVciF2bc0fftmyrnoqJpotfzez+J5jvRw6y5ipQaDz+Q2OjeKtYMlCHRVtvEa6AK4eCZeEbZogNvJyZxcGSCs9pkSxE0U+WNKm+mOW9mcJC1aEPdZzYQgUh/eFeykotnCKRu6oweOQ== 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 via 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 CC: Alexander Viro CC: Christian Brauner --- 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