From patchwork Wed Mar 8 16:25:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yue Zhao X-Patchwork-Id: 13166100 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 C68D4C678D5 for ; Wed, 8 Mar 2023 16:26:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 569096B0074; Wed, 8 Mar 2023 11:26:18 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 51BD96B0075; Wed, 8 Mar 2023 11:26:18 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3E11E6B0078; Wed, 8 Mar 2023 11:26:18 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 2C39C6B0074 for ; Wed, 8 Mar 2023 11:26:18 -0500 (EST) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id D94161A0F57 for ; Wed, 8 Mar 2023 16:26:17 +0000 (UTC) X-FDA: 80546258394.20.209F6DE Received: from mail-qv1-f45.google.com (mail-qv1-f45.google.com [209.85.219.45]) by imf25.hostedemail.com (Postfix) with ESMTP id 2B7EDA0008 for ; Wed, 8 Mar 2023 16:26:15 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=En9ZXMIV; spf=pass (imf25.hostedemail.com: domain of findns94@gmail.com designates 209.85.219.45 as permitted sender) smtp.mailfrom=findns94@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1678292776; a=rsa-sha256; cv=none; b=v5vy46XcnCg/KEuQcZpASlL2EFvKA7MctxAWAfboZLrc0u8A0JaNGDvA4Vz7JPA0sCr1RH SxXYZP4bsO/NtrqA0nukp5Ho7W4gh/YQfw32G4tclJQ6kpwXNGso+e46Gp04SFQ3ydcAdo WndzGN/q1cOxhjGjPLwcbAJ13RekRB4= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=En9ZXMIV; spf=pass (imf25.hostedemail.com: domain of findns94@gmail.com designates 209.85.219.45 as permitted sender) smtp.mailfrom=findns94@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1678292776; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:in-reply-to: references:references:dkim-signature; bh=dSGH6XW8GGWy2Vlt5EOF3HzragLrWkAt6Pl6/u4DucU=; b=Qi64t3CXqW3IYnUvvUARSzTUfBN5shyKVaQ0v+/Fi3gedrK8bmaRe41CsqcwJuuqTsEH0Y BnlXN1y4imxhf3AmaTDSKI1k5T9fdFSo4upsHisLQK7K17WsrgP7FbjHRRgby4IEJP68+J UxzkSG1WJVqljXbplIoR+1KIhh+ASec= Received: by mail-qv1-f45.google.com with SMTP id ks17so11429916qvb.6 for ; Wed, 08 Mar 2023 08:26:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678292775; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=dSGH6XW8GGWy2Vlt5EOF3HzragLrWkAt6Pl6/u4DucU=; b=En9ZXMIVUd6NZpo/Upabpi/wUSCx0yExcRdNjF/axSruKy2K9v6CA7OeDMP3a/ru9n pL9y2zjezsuviNzL0E6V/HZCzlzqC90vqu7LGfuG08q9vH1O0eE411zH8qUX+D/gtGE0 tSEiT6I5xfRcgCFgsfPzksV+nRLOqFCHPY18ucVNS++GJg2xfxfkOXzCC8d+b+09OF/Z bS8fbe+mIauuqeZpC97vkqdt7Y0sqyo3ZSskkmZzZFmjxZnk5N7M41AqEXZdXVK+A1gx eHODoCOX9g9owrKSLb6HJPHJjDy1UznEl8NXE104v6PUHJ0AFQeyPIAg3F36YfKq2Oqd Snpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678292775; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=dSGH6XW8GGWy2Vlt5EOF3HzragLrWkAt6Pl6/u4DucU=; b=qoBwZfabJLGDQgHg57LopJkqdrWNhKhM3HWGPNvA2SmIDTlK2B5xhwt49X/PUtSsk5 6bpHQSkVJrOpe0jBXWMZr9Fee/YO66v115EgoktLRJ9etuv6dvc+mb0P2JjNG6VG02xp EGTrPYPQe9yFtp/GhZZZSReXzHhELNZXHv4eQZkAJyB85LtFl4wwdODvuPSlkM92D8Au BZQ2EgsDK6cI2isZh60GHF19DexOV35OUroX7VlWih8UU7+hvVNjRPBXe/NrZfstAzQ8 Xcqv8Qc/wMLLMA89xYSsjOK9IQHxRGZUE+bHUW9znKocLLT3xtIrWHAaL0zxGQko1FQz t3Iw== X-Gm-Message-State: AO0yUKWR2OvDzv0++GY5QRqfiJLMTWKVdVuSTNRoriys4hZ7ZLH09KFz BnGukOD5Krz+5rkBPX6MVzg= X-Google-Smtp-Source: AK7set9TI3vxqdtLO0j+SXqyOYnua//R3FeO4371rl129WwGAWY1BSc+8N+B24s98/n93FGr9Iq/EA== X-Received: by 2002:a05:6214:19cb:b0:570:ee5c:2953 with SMTP id j11-20020a05621419cb00b00570ee5c2953mr45162467qvc.11.1678292775368; Wed, 08 Mar 2023 08:26:15 -0800 (PST) Received: from MSI-FindNS.localdomain ([107.191.40.138]) by smtp.gmail.com with ESMTPSA id w20-20020a05620a0e9400b0073b8459d221sm11619813qkm.31.2023.03.08.08.26.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Mar 2023 08:26:15 -0800 (PST) From: Yue Zhao To: akpm@linux-foundation.org Cc: roman.gushchin@linux.dev, hannes@cmpxchg.org, mhocko@kernel.org, shakeelb@google.com, muchun.song@linux.dev, willy@infradead.org, linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, tangyeechou@gmail.com, Yue Zhao Subject: [PATCH v3, 1/4] mm, memcg: Prevent memory.oom.group load/store tearing Date: Thu, 9 Mar 2023 00:25:52 +0800 Message-Id: <20230308162555.14195-2-findns94@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230308162555.14195-1-findns94@gmail.com> References: <20230308162555.14195-1-findns94@gmail.com> X-Rspam-User: X-Rspamd-Queue-Id: 2B7EDA0008 X-Rspamd-Server: rspam01 X-Stat-Signature: g6f7mjhu1uyrkayxw4bpn76cdj1wt6eo X-HE-Tag: 1678292775-714580 X-HE-Meta: U2FsdGVkX1+drq9Cb4DUps4XcVIYMuR8sFDpTik71QLZQ1G8U4+IDWLGm7ox0EzBjSiNALCRv8CXROZFLpOeg9dwOY7TYZ3f0LBrmwsi2mPZkp1rTyAYNtNF4eWmufTCUeGsQ+KINxitHtnrkFIId9qaSZWqMiN558aGIOj/1wLnKNAnuKZQXu1Ez3hvRTJ233SICsCGctFsQVYJ/BhKyzEywKjGqeR4PF9ZZzUVQyeSBdgW0Oaiju0mTkvptCSErpUXN/IkkMmodJzmpsdwligjDSnF9/9Onbm6l4fEsKb5gf2pP7CIexf0Ha1ykXfYF4VO/OX40vUmjWOj4c0g6Vl7sPjtpceiWXcqm0Xj0c5vc+l26HanGRsEnsHKsUHoLXlM1PGPk/TNakemcYWEP3VTN9/T7fLYglYQzqJaWHiVN+e5+/xgBwvhYUt9OrM3b7zeiaPHM6IWDkHi8FWUogrcnb++CmcORbJ/BG+dCM0BTBkCurCs6I3Ma+piuL2pSb9kqxLQUTRWcsmEvSdjw1R548x/eyT+ochwNVClhN6ZiXP+UMEQqR8WczCfZx8cV0lPQUHvqcb8nx/pTSNzQrzRB5Q39vVSv5klT5256DHO4AUGyj4uMAOtFjE3qVBVzVqvpVgEV+9JIEa1zZYCWZc8NFeemAc0RPCnjRZIGB5Wxs7rIdrr9W9rdq0bRmYxld1b9C60xm3SA5RZMMDDJgwrXe6d79jB9YZMnwljMTYFMcICovU43rECX/ItX0NctiMgRec/izVJuDFT4+9RrZLFO5n1ehvgNzsAzpIsakdhTYt5tFmHJGWC7arJafEMwkExXz60vFlrR1iRgM5CZevPJyx2/lPm+paK0/4laPqS+6phuzutmVqJ8DvdsQUqlA9p9bO05dIwJ/sRPV0Oe36RugM0KhW+T5u29CQe2WKWpV5cdsPI87FvYW3ph+L49AW2jR8Q+GtmfOuzGCe 9lSrFP+q eKrkqsJ9mnjpVq+EQm0sSJzkxlyNKtx7QdWDY1lTX3UD+2tLwR/Ack9Vvg6VDiNy5PCRxAKIzjVaoEd1JBnVmCcJLolwCasR68WCjBjKL1Hu1L2XDo9Li/VWwBmG0ISjAvgrLqlFgH6UfBWnhwqE+HuaSOxwtXLLkShQJJ+HKTyMWBLObsoqeu5T2dDMMjVTLHNs/r3Mq7XEE23bELkXJkV45m8SPofv12N9gvLic4XLMcv4m75Iqr3cJIgtMpj8EJCODdBtF3n6auCp1PmXp0RHjhYNfjDZ/MkUpBkdUMe4s5EfIVgyiUptADL/06f/fteFUj5Td6CQbVFezNSmLUIi4bwKE/l9qzu6tQ0Q6et99ZgRQNE+a08P63LDAfsy8Mo9AQy4PUKeOkIA1y5C8chYjMkrxRDsBvkTpEdiWo8LMQGJRr4wUGwrhTfYWvaxhZXBwA9HIKcB810tL5uBK4ARYqeVm7R/G6G2w73VQc+l9vCfLYEXjUGg6aQpO1CUmP3OC 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: The knob for cgroup v2 memory controller: memory.oom.group is not protected by any locking so it can be modified while it is used. This is not an actual problem because races are unlikely (the knob is usually configured long before any workloads hits actual memcg oom) but it is better to use [READ|WRITE]_ONCE to prevent compiler from doing anything funky. The access of memcg->oom_group is lockless, so it can be concurrently set at the same time as we are trying to read it. All occurrences of memcg->oom_group are updated with [READ|WRITE]_ONCE. Signed-off-by: Yue Zhao --- mm/memcontrol.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 5abffe6f8389..06821e5f7604 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2067,7 +2067,7 @@ struct mem_cgroup *mem_cgroup_get_oom_group(struct task_struct *victim, * highest-level memory cgroup with oom.group set. */ for (; memcg; memcg = parent_mem_cgroup(memcg)) { - if (memcg->oom_group) + if (READ_ONCE(memcg->oom_group)) oom_group = memcg; if (memcg == oom_domain) @@ -6623,7 +6623,7 @@ static int memory_oom_group_show(struct seq_file *m, void *v) { struct mem_cgroup *memcg = mem_cgroup_from_seq(m); - seq_printf(m, "%d\n", memcg->oom_group); + seq_printf(m, "%d\n", READ_ONCE(memcg->oom_group)); return 0; } @@ -6645,7 +6645,7 @@ static ssize_t memory_oom_group_write(struct kernfs_open_file *of, if (oom_group != 0 && oom_group != 1) return -EINVAL; - memcg->oom_group = oom_group; + WRITE_ONCE(memcg->oom_group, oom_group); return nbytes; }