From nobody Sun Sep 7 17:10:03 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DB17DEB64DA for ; Thu, 20 Jul 2023 07:09:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231394AbjGTHJF (ORCPT ); Thu, 20 Jul 2023 03:09:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43220 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230147AbjGTHIq (ORCPT ); Thu, 20 Jul 2023 03:08:46 -0400 Received: from mail-oo1-xc4a.google.com (mail-oo1-xc4a.google.com [IPv6:2607:f8b0:4864:20::c4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 15CF92694 for ; Thu, 20 Jul 2023 00:08:38 -0700 (PDT) Received: by mail-oo1-xc4a.google.com with SMTP id 006d021491bc7-5634c4df8c4so838478eaf.1 for ; Thu, 20 Jul 2023 00:08:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1689836917; x=1692428917; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=OzwAcynUjm4TDDZtYUdTlt8GRef6hCkFmXsjGPYLvQA=; b=QdsbdWEvmo4m7dFreE18whaI10HNxA5U6Eq4dlh5z46nHRuNKvgnmtyQrlecaO4sV8 pWMQ+xztiQx/wc1YGWhMYzOCtuiM6PjW82kZXGkYJ68Xwsx5KrsGhi4OgbRK80gIgcB7 clLYTavc+M9b93VW/QkD9WL4K9KunD/+0BOFjNktnoseyObLt2ro/bWXeUjfsH//HPvv iKo/LdVH7XZs+1rJF1M/AwxhXSl+9z13Axu/a0fHLc9te/mN1I0tCp0Us23Ispa/XUDp ufe5XWIgsZtbi6tiF99R36YBIvSUA+Db8luFMXb3WtMXUvnpGh0pFJrrPbseVvr7ZJUC YeoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689836917; x=1692428917; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=OzwAcynUjm4TDDZtYUdTlt8GRef6hCkFmXsjGPYLvQA=; b=lm6Q2GPAFex8aVBp72Rh4uCBJ7lZoY7F5Yh27gC40a1SNt6LK43Z1qv/tqhuBukToR m1nh5FEWdidPezq9BTt62WpGPyFmpr+u+9r9UsJnNbbRoQVHULDjYE/woOkUpZM+wzb+ leAKTRCf0M+GNSIj8njyy9s6IB6YKbwELyS8GgjPGJt//ISJj/vsH+EdmYVplEesoqGq OIN5NgNVSNyQmCZHtlNowQnUPkqZXlE3TIT80lo9okitRwMWNpKZyZFFcFzbD6pLkvaV rMgUnJJ2xbi8/AEApelBNDlHT7bNb8VFsz5clCt5x4n3CTOi1XcDnaMXi9hEOPeLfeqj 7+/A== X-Gm-Message-State: ABy/qLbTGoM3msKws6VhhzlnUvUsHx5Yj+PrWd76/6iza2+3718XsHbA GP6/apsK5hMYyUckDH1RkYRl6OFFv2XPMfYo X-Google-Smtp-Source: APBJJlHxP5P9yoiXFXdFsa+fxsrJ91qoDIJe3rq084GoRyXYn6ED56dX4GksMdKRSpbhY7hotG9fq78xxc+urVcp X-Received: from yosry.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:2327]) (user=yosryahmed job=sendgmr) by 2002:a05:6820:34a:b0:563:4841:891f with SMTP id m10-20020a056820034a00b005634841891fmr2470502ooe.0.1689836917359; Thu, 20 Jul 2023 00:08:37 -0700 (PDT) Date: Thu, 20 Jul 2023 07:08:22 +0000 In-Reply-To: <20230720070825.992023-1-yosryahmed@google.com> Mime-Version: 1.0 References: <20230720070825.992023-1-yosryahmed@google.com> X-Mailer: git-send-email 2.41.0.255.g8b1d071c50-goog Message-ID: <20230720070825.992023-6-yosryahmed@google.com> Subject: [RFC PATCH 5/8] memcg: recharge folios when accessed or dirtied From: Yosry Ahmed To: Andrew Morton , Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt Cc: Muchun Song , "Matthew Wilcox (Oracle)" , Tejun Heo , Zefan Li , Yu Zhao , Luis Chamberlain , Kees Cook , Iurii Zaikin , "T.J. Mercier" , Greg Thelen , linux-kernel@vger.kernel.org, linux-mm@kvack.org, cgroups@vger.kernel.org, Yosry Ahmed Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The previous patch provided support for deferred recharging of folios when their memcgs go offline. This patch adds recharging hooks to folio_mark_accessed() and folio_mark_dirty(). This should cover a variety of code paths where folios are accessed by userspace. The hook, folio_memcg_deferred_recharge() only checks if the folio is charged to an offline memcg in the common fast path (i.e checks folio->memcg_data). If yes, an asynchronous worker is queued to do the actual work. Signed-off-by: Yosry Ahmed --- mm/page-writeback.c | 2 ++ mm/swap.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/mm/page-writeback.c b/mm/page-writeback.c index d3f42009bb70..a644530d98c7 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -2785,6 +2785,8 @@ bool folio_mark_dirty(struct folio *folio) { struct address_space *mapping =3D folio_mapping(folio); =20 + folio_memcg_deferred_recharge(folio); + if (likely(mapping)) { /* * readahead/folio_deactivate could remain diff --git a/mm/swap.c b/mm/swap.c index cd8f0150ba3a..296c0b87c967 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -457,6 +457,8 @@ static void folio_inc_refs(struct folio *folio) */ void folio_mark_accessed(struct folio *folio) { + folio_memcg_deferred_recharge(folio); + if (lru_gen_enabled()) { folio_inc_refs(folio); return; --=20 2.41.0.255.g8b1d071c50-goog