From patchwork Wed Jul 28 01:22:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shakeel Butt X-Patchwork-Id: 12404853 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B2C8AC4320A for ; Wed, 28 Jul 2021 01:22:51 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 364C260F9D for ; Wed, 28 Jul 2021 01:22:51 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 364C260F9D Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id 8BACF6B0036; Tue, 27 Jul 2021 21:22:50 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 843726B005D; Tue, 27 Jul 2021 21:22:50 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 70B4E8D0001; Tue, 27 Jul 2021 21:22:50 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0089.hostedemail.com [216.40.44.89]) by kanga.kvack.org (Postfix) with ESMTP id 52B1C6B0036 for ; Tue, 27 Jul 2021 21:22:50 -0400 (EDT) Received: from smtpin12.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id DE6F28249980 for ; Wed, 28 Jul 2021 01:22:49 +0000 (UTC) X-FDA: 78410247258.12.CF077E0 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) by imf29.hostedemail.com (Postfix) with ESMTP id 830EC901E0FB for ; Wed, 28 Jul 2021 01:22:49 +0000 (UTC) Received: by mail-pl1-f202.google.com with SMTP id n16-20020a170902e550b029012948835151so501414plf.15 for ; Tue, 27 Jul 2021 18:22:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=KmGPLe7yWyGg+5xBmJJBJmFQBI3nGe2qI3u2htSZRc8=; b=nuhUlmTMHBefTVNrgYI+UtWHFhAeUZ55sBhNa0QX9fumm4mflb1V6DbSoHCRW6t06r onMeMgc+EcsYHFi0X4PcAOFTt1Ca4GWOMdzhbbiOrGVTrb0+gtM9N1DnIZxhXv8HlftC DJSqiUVC7neopxxFodop5YR1Gled3AwZiXE7gKa9y/fs3sAr5ZECb/Puda3R9v+/bkI+ nb00mP95Ua0jnx3xuMqkU9/WGjDryEYGUuk5L5v/oC3oUWmi5Da3evvFfquWnPH15h+y PKiZUtUG5Qb4p9eZ7PCfY2pcvyOh2brxBgAENIFwi2xJrsLT1ESfcW03z9V4K8U/cP8u YJPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=KmGPLe7yWyGg+5xBmJJBJmFQBI3nGe2qI3u2htSZRc8=; b=rPy6s3rSzEUHAcNsBCGtQ1aY9Ql2b3TwfLamZYHKMk0xs/o+l0mEZCSwTT2suuPE1o UfW3JHrsayX9FFcYPs/MlQNJE5XLSCmamcCJOu5JYHQwlL3RYkKra5pu+pYetuBBh6xA JGfZdNysG3+JgF3K4yXOT3swZNl5SIc/toHRpJGMZF0Qz8snjkMQZaZHF9VNqw9sDw1w 9jwftJn8iZ4DImiN6ob8C0rwDOq43UcfS0gdgJ2CL0MWeAlDLXgUk4D7Ln5esmXuplVD j4JrOCo4+hdqb1dmCBohSj1Nr7Y0NEGnlzw0eb8k/L4Ymn7Jeci9cfV7v3/my8or7+/A gGMQ== X-Gm-Message-State: AOAM532NJjFoF2jEw8Oj035psnuglRgMFbbhHSAroo38s1wusAOBu+Um t0qPEHlGCdd7ZpU1LOBKkhDSMkO3mwOBsw== X-Google-Smtp-Source: ABdhPJzw9SOwdwjV0WZ2MCa+P1MfPRGVFwKeQeenXU6wTjTUOggsSdYuRL9EvyC6Q1eQ/xQYrxL51Z0AKSHI7w== X-Received: from shakeelb.svl.corp.google.com ([2620:15c:2cd:202:40e2:477f:2bc7:716c]) (user=shakeelb job=sendgmr) by 2002:a17:90a:3489:: with SMTP id p9mr13744551pjb.4.1627435368045; Tue, 27 Jul 2021 18:22:48 -0700 (PDT) Date: Tue, 27 Jul 2021 18:22:43 -0700 Message-Id: <20210728012243.3369123-1-shakeelb@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.32.0.432.gabb21c7263-goog Subject: [PATCH] memcg: cleanup racy sum avoidance code From: Shakeel Butt To: Michal Hocko , Johannes Weiner , Roman Gushchin Cc: Andrew Morton , cgroups@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Shakeel Butt X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 830EC901E0FB Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=google.com header.s=20161025 header.b=nuhUlmTM; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf29.hostedemail.com: domain of 3aLEAYQgKCNsPE7HBBI8DLLDIB.9LJIFKRU-JJHS79H.LOD@flex--shakeelb.bounces.google.com designates 209.85.214.202 as permitted sender) smtp.mailfrom=3aLEAYQgKCNsPE7HBBI8DLLDIB.9LJIFKRU-JJHS79H.LOD@flex--shakeelb.bounces.google.com X-Stat-Signature: fpke3ahogkxyywdrquhfkpwgq5eaewku X-HE-Tag: 1627435369-283968 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: We used to have per-cpu memcg and lruvec stats and the readers have to traverse and sum the stats from each cpu. This summing was racy and may expose transient negative values. So, an explicit check was added to avoid such scenarios. Now these stats are moved to rstat infrastructure and are no more per-cpu, so we can remove the fixup for transient negative values. Signed-off-by: Shakeel Butt Acked-by: Roman Gushchin Reviewed-by: David Hildenbrand Acked-by: Michal Hocko --- include/linux/memcontrol.h | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 7028d8e4a3d7..5f2a39a43d47 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -991,30 +991,19 @@ static inline void mod_memcg_state(struct mem_cgroup *memcg, static inline unsigned long memcg_page_state(struct mem_cgroup *memcg, int idx) { - long x = READ_ONCE(memcg->vmstats.state[idx]); -#ifdef CONFIG_SMP - if (x < 0) - x = 0; -#endif - return x; + return READ_ONCE(memcg->vmstats.state[idx]); } static inline unsigned long lruvec_page_state(struct lruvec *lruvec, enum node_stat_item idx) { struct mem_cgroup_per_node *pn; - long x; if (mem_cgroup_disabled()) return node_page_state(lruvec_pgdat(lruvec), idx); pn = container_of(lruvec, struct mem_cgroup_per_node, lruvec); - x = READ_ONCE(pn->lruvec_stats.state[idx]); -#ifdef CONFIG_SMP - if (x < 0) - x = 0; -#endif - return x; + return READ_ONCE(pn->lruvec_stats.state[idx]); } static inline unsigned long lruvec_page_state_local(struct lruvec *lruvec,