Received: by 2002:ac0:b7d5:0:0:0:0:0 with SMTP id v21csp117661ime; Thu, 28 Jul 2022 19:30:11 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sW1JOJrQwUWNJUHnfIfn6woc6sGHkqOBeUbSmz04oOzl+wHWPkUcUknliV+bSG5wD/lG8o X-Received: by 2002:a17:907:3daa:b0:72b:7656:d4d2 with SMTP id he42-20020a1709073daa00b0072b7656d4d2mr1259428ejc.166.1659061810819; Thu, 28 Jul 2022 19:30:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1659061810; cv=none; d=google.com; s=arc-20160816; b=zKAZa7dPOdjtnOYZw8AIga+w05bvnFppSWuD7KZBibkpq1WkI2Uyd3z/UjFuGCekOD tdnU9+asyaT4p6Z0euKq3Zrh0bML1EdQbMf6i+U6181T9isfLaHM9lu7Bn1oe0BvQWVc LzsqhkFXfSPJiadkJBkEr1OiyFmTBMNt+mAutVF3WSQbE73L0dgorMYfZaeiI1suoXK6 8BPyhXT1yhRLl7KDVR/2Bc/60embhz84DcLXSGkVzl7ObpQ1pq6JfBnqWOerc8hDypgu vz0DYh8UGeD2Cysmj9ILpLIpVseOxVxcAYm2drPykvnfntVvHEpFPLAo7pUKbJcJfaes piLg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=2WcddWcFdt7fAP9+AWjH8FT0p8wf4uBGYcr1CKODSic=; b=QYjWguT5LSvCd6glEOZk19hb8hfzan0ugJbEXEIPA3IuE2oSz9F9hf8dXuR3FV+wyp 3GInB96en2S+HpU6ylO2ruoQBzAZcKD8EGW70Wt5+FHgdLTOrhyJ1df3VpVaz+6SF2KF 0WPy/N5VPWLXwFtyLHsEN572TBKdr0u6dALPSGPwF0jKTega9dYWkPD3xHY0vO6HowPI 9JDcovmDXfMx8j+xTgYdJxoCgRaqYRSpSzbQ1lsNglIwVo8jDl5fAcMv7fM573iLR/QK ZbIoenYmr85PJ2Tw5JHw4o/3UFX9kvv+YZplXIMafKU9zS2q4Y7VYjzlnKhDSL7hpIXR nLhA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b=T87Qq00p; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=bytedance.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i8-20020a1709064fc800b0072f6a9d159dsi2532711ejw.173.2022.07.28.19.29.46; Thu, 28 Jul 2022 19:30:10 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b=T87Qq00p; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=bytedance.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229643AbiG2CLS (ORCPT + 99 others); Thu, 28 Jul 2022 22:11:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36036 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232133AbiG2CLQ (ORCPT ); Thu, 28 Jul 2022 22:11:16 -0400 Received: from mail-vs1-xe2d.google.com (mail-vs1-xe2d.google.com [IPv6:2607:f8b0:4864:20::e2d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B706779EE7 for ; Thu, 28 Jul 2022 19:11:15 -0700 (PDT) Received: by mail-vs1-xe2d.google.com with SMTP id o4so3251117vsc.12 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=xo7Vt9pr9gAB+8koFHSJ9GDE7Rzz6STSeRfNo38UxRUj0IslNXAbgxsiXZZ8mNN4Zp 9p7BiFHLvGmposwDmhIL/o6eSSLtJ5XlmqdA5h7qllH1S2xyZyD9jLrMOSvRrC1lEfqP UPlaIbWTGpJkpF6YUSqujxXvXzBVWwXJ0eGZ2MePwCAui9FpFVGq4YTAAllrgcvpakcC tw4iw13UDkokHV5zuV3L/B9mdLYQvl5mO9uPQgI9f9sqHDIsoGdUF999IBW57s9+YI60 4ZtFMSnbfsaQEH0Vr4hNMY02Dy8e8nvJtDLwbwmZJU0eVcm/pFO+IT146OxyGIX6ZAC4 6pGw== X-Gm-Message-State: AJIora8jMwFQOgXiqOU7629m/kPZwCByWTY7SLAjT2FuIp6H6OHKRl3/ cBp6e/5JvKfm8JKFbSULkWdLcKrfKqBTURkXfgb5Rw== 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" X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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.