From patchwork Wed Jul 24 19:02:11 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kinsey Ho X-Patchwork-Id: 13741272 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 2C91FC3DA61 for ; Wed, 24 Jul 2024 19:02:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8A22F6B0083; Wed, 24 Jul 2024 15:02:24 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 853496B0088; Wed, 24 Jul 2024 15:02:24 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6F4A86B0089; Wed, 24 Jul 2024 15:02:24 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 4EBE96B0083 for ; Wed, 24 Jul 2024 15:02:24 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 03A451C1E74 for ; Wed, 24 Jul 2024 19:02:23 +0000 (UTC) X-FDA: 82375567008.08.2701A23 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.201]) by imf06.hostedemail.com (Postfix) with ESMTP id 33ED718002C for ; Wed, 24 Jul 2024 19:02:21 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=Ey8W4nYk; spf=pass (imf06.hostedemail.com: domain of 3u0-hZggKCBwCAFK6Q9G8GG8D6.4GEDAFMP-EECN24C.GJ8@flex--kinseyho.bounces.google.com designates 209.85.215.201 as permitted sender) smtp.mailfrom=3u0-hZggKCBwCAFK6Q9G8GG8D6.4GEDAFMP-EECN24C.GJ8@flex--kinseyho.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1721847718; 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=iLDZhQ0id4uDXJarhBRTOmxWLKOk3mwU62F8HwEfdow=; b=vFroBQxNYcyjRkWoV48667F8l5osJESFrxobE2RyCwu68FQK0VsgSzGKind1PMFKdAUCIj ER5NKi99jHAJBiqUebQ+US523VyPMA0bfd17jB70ByKArMc5JfDfw3OM0G1oyhRsNbpID2 dGtT7RACGK2mDta+wbzdU3lSe43Bex4= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=Ey8W4nYk; spf=pass (imf06.hostedemail.com: domain of 3u0-hZggKCBwCAFK6Q9G8GG8D6.4GEDAFMP-EECN24C.GJ8@flex--kinseyho.bounces.google.com designates 209.85.215.201 as permitted sender) smtp.mailfrom=3u0-hZggKCBwCAFK6Q9G8GG8D6.4GEDAFMP-EECN24C.GJ8@flex--kinseyho.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1721847718; a=rsa-sha256; cv=none; b=O+sx1sZXPdAdPVnS5a3hftXXztJXFpGhwGKDs3BXPT7VNZ0eYjxQpYZX5thvKqXSumkKbH hxxtQ6J3Tc7gcIu9sbSKjEWQnL0zOHXD0+5l6qo/2G3+Oif1mhgPRyONI6LRnDp2GNy6Gg FngQZO1aZml/9yoPVQZph9c7kPgBQB4= Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-7a2a04c79b6so1202542a12.0 for ; Wed, 24 Jul 2024 12:02:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1721847741; x=1722452541; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=iLDZhQ0id4uDXJarhBRTOmxWLKOk3mwU62F8HwEfdow=; b=Ey8W4nYkXtJp0EkUPnG1PmUKGFiCukMrhWzmJnTdupgCu1tAcVE5cVMdFqXRgBA517 YcgLDOtzDN9mWGkDJt8KKUCnjD/p1j1D3/0qmQORZGV4CzkVNwMM3SG85B/9B7Ht/DZQ nN+1zq2sED7vsMKG2Qgl7cp8BA1xVSsSVJyViP5kG/OMq8UbtnhQgniumktq5/xSGk29 6CXP+0YbHjKK2ZM4WVdr1GtLLjmbrjdUr13PqMDxH594v27Tf8NBsR8qlgKuiKVbW5Au aEV1CEwlnmRCx7tdf47qPTWnukG4i0erhFyfbFbtmmh/FxOeaPSkDiuuEcx43MrnlInB 3ckw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721847741; x=1722452541; 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=iLDZhQ0id4uDXJarhBRTOmxWLKOk3mwU62F8HwEfdow=; b=bVZgKyl3vxE/GG+rSIFzc3CykcRQ3EaKuNzsBoUDzhiq4YFQ1AJ6o/+4baT7s9Zij4 Qmue1sulXnzWgCyWN2fptKs9Qy1FTtSaNsIjEmYUGJd7eAzyctcZoGw8K8SzYcT7wkaS 4BL3IWF+5uWwXE2IMz/p1IaDzhL6M51OhzuS8g9futTDYPepPbIphIe7E1veQpFLWtYj XcekesjfuwEoNn2QLAEkOxK7VHKa13bBx56IUGtq8A+Wlg3dF5NMy9Bn/OfTuziNDwaS n/kJ0eyQJ4ytGhXJc97UDa7fnV5l5fGuOREf7qknXSOfhlitgNtMEkSElgArgmV8QEba /yFg== X-Gm-Message-State: AOJu0YzcPUwVd8Gu/ehE4d4oM4SCAmRQlsp+8wte5Gvc0acb39JUcows xaJJil2QiNe5N6zbdC/NsCoiSU3rbFSH3Tmg46aImwBBJnl15OkPtE+5ayg+VSuNHOommyTCRqj /JJYS8QZixQ== X-Google-Smtp-Source: AGHT+IE2wliyUgg36eRbrdQG0eW2t+LBhnewXuB2szeGvK9iDIHirGHs2LzRSu2WcnyoQhiliA2iavEfWfM/Kg== X-Received: from kinseyct.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:46b]) (user=kinseyho job=sendgmr) by 2002:a17:90a:6b0a:b0:2c8:632:7efe with SMTP id 98e67ed59e1d1-2cdb9661b65mr32367a91.4.1721847739514; Wed, 24 Jul 2024 12:02:19 -0700 (PDT) Date: Wed, 24 Jul 2024 19:02:11 +0000 In-Reply-To: <20240724190214.1108049-1-kinseyho@google.com> Mime-Version: 1.0 References: <20240724190214.1108049-1-kinseyho@google.com> X-Mailer: git-send-email 2.45.2.1089.g2a221341d9-goog Message-ID: <20240724190214.1108049-2-kinseyho@google.com> Subject: [PATCH mm-unstable v1 1/4] mm: don't hold css->refcnt during traversal From: Kinsey Ho To: Andrew Morton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Yosry Ahmed , Roman Gushchin , Kinsey Ho X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 33ED718002C X-Stat-Signature: ysrng7hyeb96yamoxbwa61tiz188wxqe X-Rspam-User: X-HE-Tag: 1721847741-204683 X-HE-Meta: U2FsdGVkX19M0ournU9p1KvkJFTks3x5id9JT1YqZoxvuAveGyT8FD+SaG+zO8Q9VWj1wUsweRCnHDjVqT971AnQEJqsGsRESzRTVGk4Hqq7EM04zQ52xUOlH8dNTWkMancQGU9GqmhVlMIdlenZZjLei5tXJWlD/w2lUJv4eSiYjMM6QkAV7kbTrl00ltvvDQZuoXzlxQs7RncwZ190yWX7tAW8Id0u6uXrcUrGhaXRkTgBZOjMReLxzGtqyYNfFv/R++NP4nktbQpKS4Hk65FEqGKHs3RMKKQ5i/CD9jyIPnzaBeHqRrTMWF5ATU2cSU2e1/m4+Fgv79qYffZTw1BgY+sKG4mcnEsQuL1wfGNOHymkhInJza8T6uku2sZGljL1CBBoeIp/fl3mMAKQWUI1tEd+jiazDvu2MbsMkVnXySIb28qBCEqt4EP7LfhItVBNTF64mCJW0rzMvLSdbRz5CpmvAvpffvv4AVfxvjSyfDpCi5dGOpxWDNLD9R3C05yDGaysyrgHnM7kJ5PHlhFu7QlChZUFp3S8OVRGWtgUsv38kHReXkmdOfLCljc+XcZFRlVliIMhgrzhPzNhmJGQiKB93mgkog9i5QlULNFxLT/BfELfJDUvoLERoqq3mCRBp5Y/2qWCKEC4si4XJdyw7mdr+XvebU//8SAgoDwgcCSDfQ6xdW8Z6ij9SlWM6aA8F5W73n2W1mABmegje1uBRjyFO2t2Gwj8/vJsoxjPb4EopwR4jQVH13UfCxkyJ/BtObpeJ6FgUOc0l3Se/Rv66eeJyvEvgI0/FuFEznZgjKqEauQUtd1OvNPdIfsz+/f5C0f1t/iA69H1VGW9zDAZ++PSdtSyxAiWDNr6yzdPD9Q0TV8CyIXdrOTcO319+IzfDo4zBKLqT89xwB9dC+5cRQ21Chmyp2nld4h6AFLS1YKzEWM2xkqB8t2PRtbhF/MBaWAXOREgbuV1+1X mLMA1u3v UDYZ/Db2L1q3nloMl/4uyPxvWt8gITE9xK6gypGhc7d/nNS6MvwdLZuZO/H5fnjvEXRGhyGG5YgGYNgw+pv9ReVkpcHvihp3wZpHu9IlMHcIDGqcanX9ld28n3gbzJDxIGgUEFIR+neEwKrnUr408HncgXWUrJsrDanrAHdVWEq3hsE0gwTsX+GgYnB5IRgsyRg303+c2TN1n76oPvSpK2TzOTBPR6IzZMuQoj0hssrVgmpFvdDTqsdQ2EwEIRnDxUSVjG4376ExY4TER7WdZlXE0ZB8IyFxFBRygyV1hpzQBWCCb0mtTTIFj+joVS1lRMG+B37qWMkU0PK4zYf/ayFgncR4qKscfOD0ceZjFLPDyGa8iUYFtNM+8oec5tM+fCb+8bNK7eMeEjQKrn3DKPUjL8S+WTRe1lV5gCwoSllxCYo48YWKmdkyrrzgNid9osomF9JuwGrPINHJTqcjdW5BJQah87NZhorlOdEmmGkKT6+aQaBgKU+ahZMNsX8ZxnLg3yLHVKyiOZ3NPnHFct7cIOQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000009, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: To obtain the pointer to the saved memcg position, mem_cgroup_iter() currently holds css->refcnt during memcg traversal only to put css->refcnt at the end of the routine. This isn't necessary as an rcu_read_lock is already held throughout the function. Remove css->refcnt usage during traversal by leveraging RCU. Signed-off-by: Kinsey Ho --- include/linux/memcontrol.h | 2 +- mm/memcontrol.c | 18 +----------------- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 7e2eb091049a..4cbab85e2e56 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -75,7 +75,7 @@ struct lruvec_stats_percpu; struct lruvec_stats; struct mem_cgroup_reclaim_iter { - struct mem_cgroup *position; + struct mem_cgroup __rcu *position; /* scan generation, increased every round-trip */ unsigned int generation; }; diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 960371788687..062bfeee799c 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1019,20 +1019,7 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root, else if (reclaim->generation != iter->generation) goto out_unlock; - while (1) { - pos = READ_ONCE(iter->position); - if (!pos || css_tryget(&pos->css)) - break; - /* - * css reference reached zero, so iter->position will - * be cleared by ->css_released. However, we should not - * rely on this happening soon, because ->css_released - * is called from a work queue, and by busy-waiting we - * might block it. So we clear iter->position right - * away. - */ - (void)cmpxchg(&iter->position, pos, NULL); - } + pos = rcu_dereference(iter->position); } else if (prev) { pos = prev; } @@ -1073,9 +1060,6 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root, */ (void)cmpxchg(&iter->position, pos, memcg); - if (pos) - css_put(&pos->css); - if (!memcg) iter->generation++; }