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 106A4C00140 for ; Fri, 29 Jul 2022 02:11:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 895F46B0071; Thu, 28 Jul 2022 22:11:17 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 81E016B0072; Thu, 28 Jul 2022 22:11:17 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 70D328E0001; Thu, 28 Jul 2022 22:11:17 -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 63F9B6B0071 for ; Thu, 28 Jul 2022 22:11:17 -0400 (EDT) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 3DABF1A110B for ; Fri, 29 Jul 2022 02:11:17 +0000 (UTC) X-FDA: 79738510194.01.B7297BB Received: from mail-vs1-f52.google.com (mail-vs1-f52.google.com [209.85.217.52]) by imf24.hostedemail.com (Postfix) with ESMTP id E1B8D180039 for ; Fri, 29 Jul 2022 02:11:15 +0000 (UTC) Received: by mail-vs1-f52.google.com with SMTP id x125so3239831vsb.13 for ; Thu, 28 Jul 2022 19:11:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=2WcddWcFdt7fAP9+AWjH8FT0p8wf4uBGYcr1CKODSic=; b=T87Qq00pcI1Wcz7YeyyoSQI07uEY91bTIhm50/q8dPnHemS2oTTLFpbS85qVQgfzKe oicMFDhqSGTIbnAnayOGQyNCNhkGqjAv6PFH12UEl4ZuRohXz3PvapyBpZFhCgY4QvW7 bqSTNKEe6n/k7+jOvRnH6+szE6ERYA/DHdLiw2n3W0V3SM30a6R9wEGF65wOujiPFrEe f4gNbnnMreOzzlMTj5ir4EKYG0bUssrXLQxfjgGRuDh9iV4zsJ2Gy14ftM/cvG9JT0vB IlBJnLf3XXtwt8peVFTqoBY3zji4PHoNc0V7GLImLhHPH1n8VSvW6Sf2vTyLisGD+o2f U+zg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=2WcddWcFdt7fAP9+AWjH8FT0p8wf4uBGYcr1CKODSic=; b=Ao0b9SFfi89T8CmXvijp07UxEKBNJkPk5pTVhsAirHVy4zKZ1YdVeZVqfxVer7h0dg 0/WjaJUy/Qu2cOZvidpfxvnmUvVmCDrtISYZ//jrva5oyBljnTtz+JXWnmn9OEpAXjUe TE3TKVQmFpT2m0Wu5gAFJE/kMk3hhCviQMWhHbh5QRnbsP6TU/y82l5CeAyQLR15tjRb uqkKR2i7BftjBALgcugUibUnepQQHtqeWyGJ0GqrnDCTMnoOvpU7eRhHkZhRFhX2NRXK nrwcn9ymkLDH2CwUWJ318iAu3GUly4gO65V7QYrdds/4gUSwEbucgubMAJQa+zjJhLUT 4OUA== X-Gm-Message-State: AJIora851Plk+dnG6IgftowV9c0YnlQIQR4v24yrsQgiGOWipl9a21QX ofXMeWvyKO62N5mdl6gbSbb8/Ygd4sAlYBSnBWkX9g== X-Google-Smtp-Source: AGRyM1ubhYZ7kSrnERbL6wT+pDfjGCL3qN7xOpT8+q6L3xJutPXRsQP+/EEE+PL99SJ4h4DhxzWVgAqLh4lWywl0CFY= X-Received: by 2002:a05:6102:a30:b0:358:58ed:3d2 with SMTP id 16-20020a0561020a3000b0035858ed03d2mr549619vsb.32.1659060674829; Thu, 28 Jul 2022 19:11:14 -0700 (PDT) MIME-Version: 1.0 References: <20220728091341.20820-1-tujinjiang@bytedance.com> In-Reply-To: From: Jinjiang Tu Date: Fri, 29 Jul 2022 10:11:04 +0800 Message-ID: Subject: Re: Re: [PATCH v2] vmscan: Do not free nr_deferred for memcg aware shrinkers To: Michal Hocko Cc: Yang Shi , akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b=T87Qq00p; spf=pass (imf24.hostedemail.com: domain of tujinjiang@bytedance.com designates 209.85.217.52 as permitted sender) smtp.mailfrom=tujinjiang@bytedance.com; dmarc=pass (policy=none) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1659060677; a=rsa-sha256; cv=none; b=gGPqDltWy5tX6Qwf/J/iGwpJ7BU9+3e48/bsI2mHLrC6FCRejd2kXfoQ7azwKxAvw3c9bR the7a4uUFasEcOsXbdEMkFuouyf//sV5xHVv7t7/NnmOBKwmcgLWi9TI2NA9BKrwdrL1bx gKwE9ocCDRzk0YNO7LTXkBolW1ohd8Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1659060677; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=2WcddWcFdt7fAP9+AWjH8FT0p8wf4uBGYcr1CKODSic=; b=iY3Od4irelIj+B41yhiueAYLt9ut5oobsqrm9dL7x/XOfcTDqaiVonl1BcpDJOO73QVfEO k5DrGDOIh+qD1jywI2InE0aUIC6kvoYPRf2PcgHRdsmjHc9/z+22LTLyAbR2tgCAAUCzOz lkWJqbwA9P0dVnytFb6gLhTTlOBCvSs= X-Rspamd-Server: rspam10 X-Rspam-User: Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b=T87Qq00p; spf=pass (imf24.hostedemail.com: domain of tujinjiang@bytedance.com designates 209.85.217.52 as permitted sender) smtp.mailfrom=tujinjiang@bytedance.com; dmarc=pass (policy=none) header.from=bytedance.com X-Stat-Signature: 4qb8r6ogw8p6c5y6iqqfk7ix63gss8qn X-Rspamd-Queue-Id: E1B8D180039 X-HE-Tag: 1659060675-846016 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: On Thu, Jul 28, 2022 at 7:43 PM Michal Hocko wrote: > > On Thu 28-07-22 17:13:41, tujinjiang@bytedance.com wrote: > > From: Jinjiang Tu > > > > When a memcg aware shrinker is registered by register_shrinker(), > > shrinker->nr_deferred will not be initialized. But when the shrinker > > is unregistered by unregister_shrinker(), shrinker->nr_deferred > > will be freed. > > > > Luckily, the memcg aware shrinkers in the current kernel are pre-zeroed. > > But a new memcg aware shrinker may be added in the future, and we should > > not assume the shrinker is pre-zeroed. > > > > Another unregister API free_prealloced_shrinker() does not assume the > > shrinker is pre-zered and free shrinker->nr_deferred only if it is > > not memcg aware. So unregister_shrinker() should do like > > free_prealloced_shrinker(). > > > > Signed-off-by: Jinjiang Tu > > --- > > mm/vmscan.c | 5 ++++- > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > diff --git a/mm/vmscan.c b/mm/vmscan.c > > index f7d9a683e3a7..f8a9a5349b6e 100644 > > --- a/mm/vmscan.c > > +++ b/mm/vmscan.c > > @@ -675,8 +675,11 @@ void unregister_shrinker(struct shrinker *shrinker) > > down_write(&shrinker_rwsem); > > list_del(&shrinker->list); > > shrinker->flags &= ~SHRINKER_REGISTERED; > > - if (shrinker->flags & SHRINKER_MEMCG_AWARE) > > + if (shrinker->flags & SHRINKER_MEMCG_AWARE) { > > unregister_memcg_shrinker(shrinker); > > + up_write(&shrinker_rwsem); > > + return; > > + } > > up_write(&shrinker_rwsem); > > > > kfree(shrinker->nr_deferred); > > Can we get rid of the code duplication? > --- > diff --git a/mm/vmscan.c b/mm/vmscan.c > index f7d9a683e3a7..308279414fe8 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -632,12 +632,10 @@ int prealloc_shrinker(struct shrinker *shrinker) > return 0; > } > > -void free_prealloced_shrinker(struct shrinker *shrinker) > +static void __free_shrinker(struct shrinker *shrinker) > { > if (shrinker->flags & SHRINKER_MEMCG_AWARE) { > - down_write(&shrinker_rwsem); > unregister_memcg_shrinker(shrinker); > - up_write(&shrinker_rwsem); > return; > } > > @@ -645,6 +643,13 @@ void free_prealloced_shrinker(struct shrinker *shrinker) > shrinker->nr_deferred = NULL; > } > > +void free_prealloced_shrinker(struct shrinker *shrinker) > +{ > + down_write(&shrinker_rwsem); > + __free_shrinker(shrinker); > + up_write(&shrinker_rwsem); > +} > + > void register_shrinker_prepared(struct shrinker *shrinker) > { > down_write(&shrinker_rwsem); > @@ -675,12 +680,9 @@ void unregister_shrinker(struct shrinker *shrinker) > down_write(&shrinker_rwsem); > list_del(&shrinker->list); > shrinker->flags &= ~SHRINKER_REGISTERED; > - if (shrinker->flags & SHRINKER_MEMCG_AWARE) > - unregister_memcg_shrinker(shrinker); > - up_write(&shrinker_rwsem); > > - kfree(shrinker->nr_deferred); > - shrinker->nr_deferred = NULL; > + __free_shrinker(shrinker); > + up_write(&shrinker_rwsem); > } > EXPORT_SYMBOL(unregister_shrinker); > > -- > Michal Hocko > SUSE Labs Yes, the code is clearer.