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; } From patchwork Wed Mar 8 16:25:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yue Zhao X-Patchwork-Id: 13166101 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 38147C6FD1E for ; Wed, 8 Mar 2023 16:26:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C47026B0075; Wed, 8 Mar 2023 11:26:22 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id BCFDB6B0078; Wed, 8 Mar 2023 11:26:22 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A4A706B007B; Wed, 8 Mar 2023 11:26:22 -0500 (EST) 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 9457D6B0075 for ; Wed, 8 Mar 2023 11:26:22 -0500 (EST) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 600C0C0F02 for ; Wed, 8 Mar 2023 16:26:22 +0000 (UTC) X-FDA: 80546258604.22.3A903E2 Received: from mail-qv1-f49.google.com (mail-qv1-f49.google.com [209.85.219.49]) by imf18.hostedemail.com (Postfix) with ESMTP id 9E3901C0011 for ; Wed, 8 Mar 2023 16:26:20 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=McRkR1Wh; spf=pass (imf18.hostedemail.com: domain of findns94@gmail.com designates 209.85.219.49 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=1678292780; 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=pobmz56zWKXlv9VCRaNaOZMVD/RL8QxL/evDPGbbBYE=; b=Oe271HGCFaqce3QROyxjHyfJ4AGmhu/LO224tnCB8RnvSPSrlV0n3XXG5VyDTe0ojlYk5f escZ2xVea6BJjPpOClgocz1Udw+Cv8uIK9mHbIlsMG/OL3GAw9nnPREM3ejQ7bGVWdprWi UjVnU7ChYlRjoPJx+XwvTqpPv70f7KM= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=McRkR1Wh; spf=pass (imf18.hostedemail.com: domain of findns94@gmail.com designates 209.85.219.49 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=1678292780; a=rsa-sha256; cv=none; b=WnomuPlB04PtQP9gNtlo4mym9RtQIA7BxA48L7xamwC8AxqpiydO6uvs0689Kk9u8iO9b8 i/0btoEHE3WGH0VZ7jq0EqJbryQwO2TgHJfYfNKjK/9zRGcboFR4tVncnnWKwxQ8Rny1Fg yNECVtOW9IyTf/oyJJDcM4byGbOtaOM= Received: by mail-qv1-f49.google.com with SMTP id f1so11396503qvx.13 for ; Wed, 08 Mar 2023 08:26:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678292780; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=pobmz56zWKXlv9VCRaNaOZMVD/RL8QxL/evDPGbbBYE=; b=McRkR1WhMXjVktc5aTw6T5/gz6rhdeR71Ukow2/ZzU1pNGgYskeBNM0STRwyIy0Hfm VTjxzQlU7sNL+v1NTYRQO8byhGn8P2ftwg0bNZl33Yx1hL90jCxOR3bvGXjNkeWh9G+m C3j8eWUiMVJgELYTg2oJkgiUFs3xb8VJ3e0o8SI1++jbALmILsUgu9mjOqkVEbP7RbIl TMWTLq/3F2oYXfLXSG/GLKvyAmjIjvn95772zy1qiECDYhLI3hP7yw575MZeEwjnopoj KCscHtCaCIVPuwZUB7vRCpSp6eQz5bg1OXfrbbiYqWy19G0Ga3XuBmYXT4rGuhEJ20xZ Vryg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678292780; 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=pobmz56zWKXlv9VCRaNaOZMVD/RL8QxL/evDPGbbBYE=; b=lCVGgFGU+0PJwOHUEth3L6zdbQPGiUoCoer8Omdy7HYNkO8FHl0bf75NqrBA/pEnCA oZ5yuOioL5InDp93YorILn4f3d0rWOltpJyGeYV/6XRXorlLnHZxRMR6MO3fvLhU9eg/ LxpoWoJSSMAipKiO0Jl7uPQpWOkTa149dVoR44qLoF1u/pKqB2duT+GnBAeKy0LMZlND BT0vAFl5Q5V5nC00jNqdi9YJxeg4Q19SVIFm0S8fhj89ppvpPIk9XcxsEQNZOM5XCSd+ /pkGg372BLxQA9ygVJX4s3SNT5B6kvoZ6BNvOfYopjuQjtoN9gvAQs0N1QZKvZ9j5I/P OQWw== X-Gm-Message-State: AO0yUKWU9gYDJPRh3vdOZrGsblAXDMKWwUbfER21QNdJFmqB5H7YKop3 YROAo7Z2XL5w8Bcc5eH4fa0= X-Google-Smtp-Source: AK7set9fJpkEVxDTECYsrfoWBBWoQm1UPxTBvv9OtImj+CJODpxx724Aby+U/JKlSJDy6TUKlKt6aA== X-Received: by 2002:ad4:5de1:0:b0:56b:f09e:9ab0 with SMTP id jn1-20020ad45de1000000b0056bf09e9ab0mr28752380qvb.5.1678292779760; Wed, 08 Mar 2023 08:26:19 -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.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Mar 2023 08:26:19 -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, 2/4] mm, memcg: Prevent memory.swappiness load/store tearing Date: Thu, 9 Mar 2023 00:25:53 +0800 Message-Id: <20230308162555.14195-3-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-Stat-Signature: xwa1oaktqttbbcirnhgorxxpmy1onneh X-Rspam-User: X-Rspamd-Queue-Id: 9E3901C0011 X-Rspamd-Server: rspam06 X-HE-Tag: 1678292780-355472 X-HE-Meta: U2FsdGVkX182GDGCOrZtXxQlb7lds6fZpE/mp0Xfv1I8K/ESdnr2FucPofrPr11LwMbyMqTdjN2YxHuNIEjVU5V37Lx1nCKRxQkeJUMD5zPsYAdCWgt/sqStfoN9KCj6zgSdXvJXnkKW2lEg9AkY5wZ9Ssv/lpGT7R92tESorUGy76bpScVEOU6QaRUDPsqR1/g4QAOC8CxnRFxooSSumkff2s43K1dQfipoxZSR+eFPILz0XD6tp7vxOVw1cATuw6VLpAHRVINVwLmeE2awBVfOkMRLfIJYWn9SOFUZftUCboZ8elWjrLZEZRv7WJQDybwwAS2XiNeq/ez+3S0ekY1KXQC/7zJBHpKogtCpeoeybX7POzlWkIEzfHgCNtLKS8gsRf6bsbttk4mYB2ZOBdI0IEuDPUbBBXXotG0qIpETbGoXlYBzIdCaLOnsutFxcvpzJvpftko14KsXIIoi2HzXLnhk8gpSSkddGxY4V1UhSwcPiBoTgRUp7W8Haat3ESuim2aimxxGuaCRIsEd2/bQLomE2I2dSo8L8HNZ7lZfeWdI20gsJzy2UaQa2MySA6DDYcvlYBLIUlB8bQg0t9mI011PYGthi0thXh0jNIMFP/5vPf9shB3d3PJNuNSaXyN2fn+LY1VlutvGydjzr+oZClziPOa6zKb4F4JS1AM3EpC5DJEGCXyYt27g2C8izDtP0/qzGTMCSQYHIX1TsD/T8mx2Ptm00FF7fta40rfuB9uaJ8ZEH3Bd1NsHF5Y9WyHs/vALDKYfTim0z+B6XffExpeRXrUYwTSb+qa2vdIoEQMfgdVHp20L51j8vQarJVPv6TeSbIMr3cvO2Z02Ykx6fdR14NVQmPV5VtwO50XuDVmhe3CEWkEE3DtEXvvo48vlc4maaOHnfnieW1NWtpGAhoHKjJDAvxPjlxIIH0ploDlD/JI793n17kmx/O9mxeN7ic1+WycwLFs7l3c AwMgVwN8 XXw7ztXbl3sJydUJg9GT2r4cOx2tApTUVETeR0tf+fwBHNDjuFex2WAazU+cwHv6oxu2X2fPRrNr6nBWEYv+JFlUMA6X9RJ22nP0lSA5LHnOBpMZqrMKehO75M4MEZg2bb3nd79HvGHTcE6inydODux9D7a0e5zKTvGoM5saq9xcX8PFPq7ZXn0sHIQMsK/hN+Pcw+kDWK8HJDTBjOK/XDBiU05Wio02E7JGh2yOHmO2AeHyqfFMsGQQpOWz2krny1aPcfSpMuIy+3AIMIAzCwEizA/V2GLvU58+HoJc+/ez3/Tr4NPCNVWeXIRYlVfrIqIGq20CwX6Px+66g199QzmFvlI1HUjrq8hMc3KMwmDQzx4X+U4Wg6A8s9mA78VZJAN0y7FLDhKrvY3oEqq69ZkZisyXRMeQIDM4+2TWpjvrpA1L4dpWu9itFZCCLUmcZZvJVNL0zLvBLcYPtAfCTlrmDVG9jbb/oLSFC4m7xiN7G3Ys= 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 v1 memory controller: memory.swappiness 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. But it is better to use [READ|WRITE]_ONCE to prevent compiler from doing anything funky. The access of memcg->swappiness and vm_swappiness is lockless, so both of them can be concurrently set at the same time as we are trying to read them. All occurrences of memcg->swappiness and vm_swappiness are updated with [READ|WRITE]_ONCE. Signed-off-by: Yue Zhao --- include/linux/swap.h | 8 ++++---- mm/memcontrol.c | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/linux/swap.h b/include/linux/swap.h index 209a425739a9..3f3fe43d1766 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -620,18 +620,18 @@ static inline int mem_cgroup_swappiness(struct mem_cgroup *memcg) { /* Cgroup2 doesn't have per-cgroup swappiness */ if (cgroup_subsys_on_dfl(memory_cgrp_subsys)) - return vm_swappiness; + return READ_ONCE(vm_swappiness); /* root ? */ if (mem_cgroup_disabled() || mem_cgroup_is_root(memcg)) - return vm_swappiness; + return READ_ONCE(vm_swappiness); - return memcg->swappiness; + return READ_ONCE(memcg->swappiness); } #else static inline int mem_cgroup_swappiness(struct mem_cgroup *mem) { - return vm_swappiness; + return READ_ONCE(vm_swappiness); } #endif diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 06821e5f7604..1b0112afcad3 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -4179,9 +4179,9 @@ static int mem_cgroup_swappiness_write(struct cgroup_subsys_state *css, return -EINVAL; if (!mem_cgroup_is_root(memcg)) - memcg->swappiness = val; + WRITE_ONCE(memcg->swappiness, val); else - vm_swappiness = val; + WRITE_ONCE(vm_swappiness, val); return 0; } @@ -5353,7 +5353,7 @@ mem_cgroup_css_alloc(struct cgroup_subsys_state *parent_css) #endif page_counter_set_high(&memcg->swap, PAGE_COUNTER_MAX); if (parent) { - memcg->swappiness = mem_cgroup_swappiness(parent); + WRITE_ONCE(memcg->swappiness, mem_cgroup_swappiness(parent)); memcg->oom_kill_disable = parent->oom_kill_disable; page_counter_init(&memcg->memory, &parent->memory); From patchwork Wed Mar 8 16:25:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yue Zhao X-Patchwork-Id: 13166102 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 5DCF2C6FD1E for ; Wed, 8 Mar 2023 16:26:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EB7D86B0078; Wed, 8 Mar 2023 11:26:26 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E72516B007B; Wed, 8 Mar 2023 11:26:26 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CE3A26B007D; Wed, 8 Mar 2023 11:26:26 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id B4F096B0078 for ; Wed, 8 Mar 2023 11:26:26 -0500 (EST) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 5458D1A0955 for ; Wed, 8 Mar 2023 16:26:26 +0000 (UTC) X-FDA: 80546258772.02.400A725 Received: from mail-qt1-f181.google.com (mail-qt1-f181.google.com [209.85.160.181]) by imf07.hostedemail.com (Postfix) with ESMTP id 891534000D for ; Wed, 8 Mar 2023 16:26:24 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=RrUABNuC; spf=pass (imf07.hostedemail.com: domain of findns94@gmail.com designates 209.85.160.181 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=1678292784; 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=kqeFiKRizo4EGYqriaZmF5h1PWpLfju0MvbdsBusLUQ=; b=QDSOTFZVXKwvtFrU3iy1nlLnT5VjWZcTKsP21G+hqVzadfHshIz98K+PEbTR28nUVo1BeE TaHUpLKImEf/3EtoW+wzHXq1pGW9Q8PsvAKkulis5zt6J6KCOJBfPBfTCsqRGh1EC7fedD 4YPrP1E8OgmZgupTHG2Nvh12Xt8lBHg= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=RrUABNuC; spf=pass (imf07.hostedemail.com: domain of findns94@gmail.com designates 209.85.160.181 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=1678292784; a=rsa-sha256; cv=none; b=XicamUmk/sN9273QAUiU9lzTmTafn9erVBwq12K//VX3Te4G7kWJwhC2ZAKsYRYCa8VJbE C9M7qk4o4/riUndqWK4zKGd7QhvR9N8A/Eqs4LwVvo2kNm7braIZZFIxrgl4Lho1M1LkWB v/vYxvzvzB3NjLRvPgMp0CtbysQXKuE= Received: by mail-qt1-f181.google.com with SMTP id s12so18598492qtq.11 for ; Wed, 08 Mar 2023 08:26:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678292783; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=kqeFiKRizo4EGYqriaZmF5h1PWpLfju0MvbdsBusLUQ=; b=RrUABNuCm23cw7zAS2r7lcfX6PoRi1Q4A6nYTvlFu+h/X4B289H2dUHucrYXkd+iTy hsSB64i59WWfc0uy40q5BicLg5T3NqA4EyM2HtbP9aMG90H7ysqkcwwRIBDQM+oKsL2c jPzCGI3yBDcGPpWH5BAjJXwdZxPUUwC1rqqb3BWim1UFKIptfQROIZjUOFkUF2Ymg+N5 n6LeGStUZx/yL69zcRf/KOjYv/sAPzIADkPqKSYyNQGpBeLOeQvpPCva8YqeIATfzeqG ztixlNoZ28CemrDp8oaWk6AisdpRAoEDS3zAo3qrU3z2NhNSc3zR/aUp1Y8rFBkKVIEI GWcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678292783; 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=kqeFiKRizo4EGYqriaZmF5h1PWpLfju0MvbdsBusLUQ=; b=BZWfJImBedhxYkDWfbRqLaLLkbYG9Ml+CLuhR84bVOWW+csCHR7xdutY1BGoDxLywv lhFLRDcDX5ddtxztb1XrHVG+B+zXGbmy6JpAq3AkzA+pmKhli1HKXsSg6IcJLs5NyEPD dHMaOOO+4Fa/pvUkBGkMYB/KC7YQTuZ1tPXi84RDOtHhqtgJikJ34fCnjGoQnudzmAPs /oIdVEti7ytzpWgjVTChXkA3rZmrr8rUETKNnCapRdN7JBw03HOLuAL8fBo9QqqVjQ25 HBK2W0XK+E8NovikmvhZBQPgTXJ43TfCqdgsFyGyb5FmITQRIwiR5xs/RSgLmRgzPcmQ Z0Hw== X-Gm-Message-State: AO0yUKWrG649UiHle6voOIiyl2L+COo06r0DkFTqDF9m/mKjaTHvIh2R gg11tTrC4Qg08JwK5skm07Q= X-Google-Smtp-Source: AK7set9S3qW7rerankN3AMXxiZeWoehZYZsS5K65VfhGp7RyFY4IEwJ/A1jtYx9iu85RIgpQlXI21Q== X-Received: by 2002:a05:622a:104c:b0:3b6:3995:2ec2 with SMTP id f12-20020a05622a104c00b003b639952ec2mr34051919qte.19.1678292783733; Wed, 08 Mar 2023 08:26:23 -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.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Mar 2023 08:26:23 -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, 3/4] mm, memcg: Prevent memory.oom_control load/store tearing Date: Thu, 9 Mar 2023 00:25:54 +0800 Message-Id: <20230308162555.14195-4-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-Stat-Signature: hucwhw4tzkuhs3c381sucrg9oj31js7e X-Rspam-User: X-Rspamd-Queue-Id: 891534000D X-Rspamd-Server: rspam06 X-HE-Tag: 1678292784-659151 X-HE-Meta: U2FsdGVkX1+mNtPFhiDumSXSWi6j437WVD5WhUIf9fBAT54+qoEKZJ9GB4ulYimL70oX6ay+iL55eeRSGHgI8nfc8FlN3A8NHCYwcLKY8ZjXv2OHLOz8CiLIbmoiKo1kXekSmKPq5FJtt8MJBoI0KA97ZZoE3QjpgbHZrWsLzy+hNY2AIbTANC1ZbaJviSHGiUKdtevDsvFJdH/voX2JJn450QHURbE8XqzNM8WauKQkQdv7aHRQVr4VlnUcyfFvTdLiElDZteHQdTsfPBtheyRg1nv0+Zzb0XmMnxySNGBzQpun1WcVfh/qfSgKAruaLRUdUvTiAwCB7TtxzOUHRn1l0R2unLrZv2mutvD3g+v20A/vgY8+KMErpF4T8+DX6SBRcaq3V8Rk++A/p3JWZrmT2zk56lTiQKVIZT0ACGVviQkerHvGC+CoV1YKPQLCbZ9batGfvFWY2bAwf/B4GAdfzbQ43OiTA2QFpgrg6BS9/7rAoY02YpadiXlJJqw04jI4rvgqUfGEaWEcTHsJirl/hZ5FgJQ9Zr0kL6jVND4RFQeyDQJFElLptXdr2MxmYkJq0nRo9b2COGK9A4I3csAVRa2b4iowmFP0Bi+dvYe4DRb37fxrtMskW6QUVlVi4HThnFgQywxbWWnRigZFzzSlbuTcA29z8mg2JyrEKy9EO+nRZTarGbm8OQV+U7BGva6IyyLOEDnEgpabcx4FNQ3XeAzkPBtgoVK1sNOI+Sud0Ws71gUMMUm8ApRpmseXGmoS60jfgX2u0vynNysgZRy7nIiARLBGELwTu7qgJWjEHd1KoUtHEpdVIRpWx14sWDye1r9o4/AdnICVqQBD9nNSxEL5Igi5hQzzE2lj79sONhdi68roZicE64+MXIjaOtvDyp/nAzcmmdNQl16rM5exrxnAvL+xEigDxiq5YAhnZCSM9/USychHm0xV3FcdtY6izVZq2pz3lo+b566 Dz6lK6Jl CwZVxlIhh21ZmwAIAzkmFclkpgMCREFZ7pHXqPxwvzBZ8nOxXN4TYy3iDoGURWtY0WVOfBhkOVugGMlnFgbmjFZskXqQVs530hXpFqdtSFeaOSdJOHq3AVriWvT6tKheU7/Arkw8AuYfJzRREQD2fOSrUmwNhsgcNQFJJ3DAooc8OjD+/W/TcUcJNZMK7WPMMENb6afWdQyw7ltND4biM+L/Ii3v8PwGmXqASk8veq32R+ecFxupBalexsvQy0RZPTlRm+cSUvoaPqNk0ELg4Q7cXy8z3MQlSWx6nUgf9p3bO3OQu+AGgyHfKxbAP3n8ZsllEP7LxrNxco8RcgreU/k11HRAnjrXU5d8tM33Br9zVidfbeEUhfAAq9eSJE5VnkG+rquUvH2dCj4ZL6gxC/cTtdNleRJf4gl4Tnn09fVSPVNt4O4KDTomObKkFxcKlGrnqy6YhGkcWwUzHyc34e3FRZPKNFTaekOza5hlXAd6JZHzY0HarXCQr6fLR4fXpYKzHLA175SLIrWb286Nj0kixSw== 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 v1 memory controller: memory.oom_control 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. But it is better to use [READ|WRITE]_ONCE to prevent compiler from doing anything funky. The access of memcg->oom_kill_disable is lockless, so it can be concurrently set at the same time as we are trying to read it. All occurrences of memcg->oom_kill_disable are updated with [READ|WRITE]_ONCE. Signed-off-by: Yue Zhao --- mm/memcontrol.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 1b0112afcad3..5b7062d0f5e0 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1929,7 +1929,7 @@ static bool mem_cgroup_oom(struct mem_cgroup *memcg, gfp_t mask, int order) * Please note that mem_cgroup_out_of_memory might fail to find a * victim and then we have to bail out from the charge path. */ - if (memcg->oom_kill_disable) { + if (READ_ONCE(memcg->oom_kill_disable)) { if (current->in_user_fault) { css_get(&memcg->css); current->memcg_in_oom = memcg; @@ -1999,7 +1999,7 @@ bool mem_cgroup_oom_synchronize(bool handle) if (locked) mem_cgroup_oom_notify(memcg); - if (locked && !memcg->oom_kill_disable) { + if (locked && !READ_ONCE(memcg->oom_kill_disable)) { mem_cgroup_unmark_under_oom(memcg); finish_wait(&memcg_oom_waitq, &owait.wait); mem_cgroup_out_of_memory(memcg, current->memcg_oom_gfp_mask, @@ -4515,7 +4515,7 @@ static int mem_cgroup_oom_control_read(struct seq_file *sf, void *v) { struct mem_cgroup *memcg = mem_cgroup_from_seq(sf); - seq_printf(sf, "oom_kill_disable %d\n", memcg->oom_kill_disable); + seq_printf(sf, "oom_kill_disable %d\n", READ_ONCE(memcg->oom_kill_disable)); seq_printf(sf, "under_oom %d\n", (bool)memcg->under_oom); seq_printf(sf, "oom_kill %lu\n", atomic_long_read(&memcg->memory_events[MEMCG_OOM_KILL])); @@ -4531,7 +4531,7 @@ static int mem_cgroup_oom_control_write(struct cgroup_subsys_state *css, if (mem_cgroup_is_root(memcg) || !((val == 0) || (val == 1))) return -EINVAL; - memcg->oom_kill_disable = val; + WRITE_ONCE(memcg->oom_kill_disable, val); if (!val) memcg_oom_recover(memcg); @@ -5354,7 +5354,7 @@ mem_cgroup_css_alloc(struct cgroup_subsys_state *parent_css) page_counter_set_high(&memcg->swap, PAGE_COUNTER_MAX); if (parent) { WRITE_ONCE(memcg->swappiness, mem_cgroup_swappiness(parent)); - memcg->oom_kill_disable = parent->oom_kill_disable; + WRITE_ONCE(memcg->oom_kill_disable, READ_ONCE(parent->oom_kill_disable)); page_counter_init(&memcg->memory, &parent->memory); page_counter_init(&memcg->swap, &parent->swap); From patchwork Wed Mar 8 16:25:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yue Zhao X-Patchwork-Id: 13166103 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 EC11DC678D5 for ; Wed, 8 Mar 2023 16:26:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 89D9B6B007B; Wed, 8 Mar 2023 11:26:31 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 8269D6B007D; Wed, 8 Mar 2023 11:26:31 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6A0656B007E; Wed, 8 Mar 2023 11:26:31 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 57C1F6B007B for ; Wed, 8 Mar 2023 11:26:31 -0500 (EST) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 375441C67BC for ; Wed, 8 Mar 2023 16:26:31 +0000 (UTC) X-FDA: 80546258982.02.04C9620 Received: from mail-qt1-f178.google.com (mail-qt1-f178.google.com [209.85.160.178]) by imf21.hostedemail.com (Postfix) with ESMTP id 830431C0014 for ; Wed, 8 Mar 2023 16:26:29 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=kswqtEU7; spf=pass (imf21.hostedemail.com: domain of findns94@gmail.com designates 209.85.160.178 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=1678292789; 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=z+4uYXTHdSZJGlTQ4yJuaUKIcEogMIg606wt+PsHQ10=; b=MgXhQUr6bwEFFNXRrtbBtxHouVhnJmgb4xFnnOx8oySJMamDki4xPMH03HsVDOlzHbPNcn vleVvQN3ZDVAiSr9ADDzIb+r5jQpeM3vbO7yvfczh6WQyCTRNvfd3zx00B613W8YgZSfRl 0ilMwChXeRN/pteFuES8uKopxzQp6wM= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=kswqtEU7; spf=pass (imf21.hostedemail.com: domain of findns94@gmail.com designates 209.85.160.178 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=1678292789; a=rsa-sha256; cv=none; b=kx9oVqUkOvIlU7HWD2kQv25cNFkjpNM6gLDXnmtfkqoJTTYzcAgwKX1Ky0/R2VzNtlTIwL LFLklzTzDpSRM55lAAYrsv6smVQyiGVTTsS+DY+dPic3dyHS1fcZdWr0frz2hnFQO4tk0j QnpokWU9c6nJN04o5JRIZbOw1qBx+P4= Received: by mail-qt1-f178.google.com with SMTP id d7so18591564qtr.12 for ; Wed, 08 Mar 2023 08:26:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678292788; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=z+4uYXTHdSZJGlTQ4yJuaUKIcEogMIg606wt+PsHQ10=; b=kswqtEU7Xj6n7CisW2qiImBeQaeJAQosHCyMQLF85hJ3RIz6SE9Rt2WZbQXfYtQarS w1QOwuboYFZVWg3MH8bUqqwclcgHc3MmuZZUsydleg5jg4zMt4wgbQMRkOBzw3Zucdt8 bDfH1puKOJ2+Jws7pHS692luihVb02mlaXjFcfe/mkc0SVVtNkvvaMGjhmgRWz60Hrhj hsoZyvjuIAA64kBJePxrgKD3g/6sRoG8j42SBuX/XEEqcwDNrw4HvoAAvVN3G64Ld9aT Efv9BEBWmzR2cSAbKApAMZDiqB5AIM5zyFGrDWK2hfiWrdLkaCvW3wS224bS2oq9JkyC BQvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678292788; 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=z+4uYXTHdSZJGlTQ4yJuaUKIcEogMIg606wt+PsHQ10=; b=Y2Ux8SD1ADwaD5ayU3VNR07wsT2SlvuSQuuR2asTIzBHxxIywGATx9t3lfTfiI0WTI tLBjiDOBJAEKvwxmpmihakkkc+s1kQyAxDvoTW8DTU9xiJLyQdzh1baNa0fcMXJwGU24 uhW381aXrxgPWj/9VWXjh1LeODggZYVImSn8Oj7K1h/clbyNYBI7dUGY6lxZlHyrAu86 zuCc87xKWmzqNtkdwmaXteOoRGRs3pdQDhH246xtFmmIsaRL9Ns6Mw1XzAn5O3ztJWA5 OI/BI5faMMlnlLpNicoUfIIdaJRX/gvu0S+Lv3EjW3SiyiJt5+KKUlRq2PR0MYyI+ouQ /vig== X-Gm-Message-State: AO0yUKWlC4BOlqxwZ11vf8Kw5OV1vBEUvwZTChVA2FLr0w7tH7/a87oA rK8XbC18YAkpSvm7ZZ6e8WU= X-Google-Smtp-Source: AK7set+0qHmJ/1GfUszz/r9Eo2DlcBq2rsqeob7MHbP84HYNS4R6ufmoVsorbLyoGDsjhwgPzL4ESw== X-Received: by 2002:a05:622a:4c6:b0:3bf:cd7a:dd14 with SMTP id q6-20020a05622a04c600b003bfcd7add14mr30017906qtx.12.1678292788636; Wed, 08 Mar 2023 08:26:28 -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.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Mar 2023 08:26:28 -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, 4/4] mm, memcg: Prevent memory.soft_limit_in_bytes load/store tearing Date: Thu, 9 Mar 2023 00:25:55 +0800 Message-Id: <20230308162555.14195-5-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-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 830431C0014 X-Rspam-User: X-Stat-Signature: q4kiww3zkwcqsj8p8gmfg4ids77ejqca X-HE-Tag: 1678292789-302109 X-HE-Meta: U2FsdGVkX18x8kI8jeeUeUrJ72cbTq9UePZu6XdpEDWhk+qEcvM62bq5/yXtUAWmqVLPcB+IWPiyBt2V0HMsZyi59RzeW4UY9sjjNUngoFWsy3weZ5yM6NitRfKBGjyeWQ5uAaS1KWlybILq2vBTr+t++Nojlc6D2PizrzmOs8z1gKMYsAKkSAWqIDASMuaLMtec35VIotc96hE/pl/3bcJ3HZH7V+lIzZEWucjOAsl4MCB7QYGnWYt+BQrFLCgB3lYF9PMtUMBVecARoIRI2nbjhsUVOjKnMs8cygJNbAmiF1x4OY9wUoW/e9kCu9JJgzZg1PzPtg8WtF9KETEa48Tn87yW6GAo43EX7qfDCZbccHC/T5X91StpnOOQYHDbKcUsw6SzV1pxRUjyx1ZZH25HhhaEOsK1x3XpaCyLJyWsUdwG7Ji2G61b8tU3ffxMaopbsEIrs1md5LJPZm1eicIQlQJ9Sk2rzUvx5iWmpKYCn8Z4LYnA0ppDnUTLcW5scD/R8Cf7q8VxtwIji2kdRbK7B9zFelholUeGuXFv0yk872eF6Ww+Bprf2RZVqvQFT+Xad+a8m0Yv+5ymK7JbS/0TboO0Rn294un3ImmI6NK69fUa0ENrUuk8lh54K6nA87EpYqMTAaSboSnILkSs/AIPvCc2YX+A2rYKUBVONUUe0bKXYfOISKdXo9S0OGTLUReBFc7+seX2ui4uMl5gUCCQo1oHnfuCTxusGxPhk8pA87zbWKEFYjAawswuTVLLnD0NI9mKMk3EodaXRCJeib05NJfay9mdiUdH+yBplcx3vNu1mNASgzDJnKT4gQ+jz/TrU0WRsiIAyU8Bp2oejANJ7Blttjd2cOmzjMGV4Xnb404Kir0GZ6hmtOnf+F2p7krlj61dvUVYSHhUxgOoo7EUiXSXYrAoYZmIdWAENlGcopQkZ5WHBBz578hF9z6WQnL64qiyeJQus1Wkwpk LB9xCtcy sysvW6YdgOZMDz7/6L2vzFGdUpt3uPwLfyIBo8E2OD5NGBL2+vrV1yRR85nPFHrkHyAj90fLCEXkIhXA9e3KdnAeN9PzBOAVRzkiprgG1fvtQY2LqHftcGAGwieygU7X1zqQOtXtkc/jtl1CBiLDLCdBCwIXT2ReUM40mXxffvzbrp2LVMD28XzDx7kaeQ0nuKriRK6bz35t3+1hJN27bDcFeJP8xwFKl28Tkk2QI956GR8t5A7rL/GnCW/QxfyV2hK+dNuve98FTwZqIJm7YNXoBRuhVygXSxZbfzkpNwBNwz5oP1jvOR4q4dZcjaHkbNKWkJCPd4+0poWuoHL5qFseXqxsMmUQy3zFuwviMeRQLgJp3JZPFQT4E4iQSDM9d/LnNgfNVbYPQtIw9POvFuY88+8GB9BP7nwJ4lxLYDB5NeiIUdXsCQG8OFIqd8xnLtN+h5GqIKzysedgwoBoQLIw8N04586/k4b403FQdMZPwTzTwAKbSjs7rm+ShyxGmENeImmwa0HBQfT5+uvG/wmj5cw== 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 v1 memory controller: memory.soft_limit_in_bytes 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. But it is better to use [READ|WRITE]_ONCE to prevent compiler from doing anything funky. The access of memcg->soft_limit is lockless, so it can be concurrently set at the same time as we are trying to read it. All occurrences of memcg->soft_limit are updated with [READ|WRITE]_ONCE. Signed-off-by: Yue Zhao --- mm/memcontrol.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 5b7062d0f5e0..13ec89c45389 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3728,7 +3728,7 @@ static u64 mem_cgroup_read_u64(struct cgroup_subsys_state *css, case RES_FAILCNT: return counter->failcnt; case RES_SOFT_LIMIT: - return (u64)memcg->soft_limit * PAGE_SIZE; + return (u64)READ_ONCE(memcg->soft_limit) * PAGE_SIZE; default: BUG(); } @@ -3870,7 +3870,7 @@ static ssize_t mem_cgroup_write(struct kernfs_open_file *of, if (IS_ENABLED(CONFIG_PREEMPT_RT)) { ret = -EOPNOTSUPP; } else { - memcg->soft_limit = nr_pages; + WRITE_ONCE(memcg->soft_limit, nr_pages); ret = 0; } break; @@ -5347,7 +5347,7 @@ mem_cgroup_css_alloc(struct cgroup_subsys_state *parent_css) return ERR_CAST(memcg); page_counter_set_high(&memcg->memory, PAGE_COUNTER_MAX); - memcg->soft_limit = PAGE_COUNTER_MAX; + WRITE_ONCE(memcg->soft_limit, PAGE_COUNTER_MAX); #if defined(CONFIG_MEMCG_KMEM) && defined(CONFIG_ZSWAP) memcg->zswap_max = PAGE_COUNTER_MAX; #endif @@ -5502,7 +5502,7 @@ static void mem_cgroup_css_reset(struct cgroup_subsys_state *css) page_counter_set_min(&memcg->memory, 0); page_counter_set_low(&memcg->memory, 0); page_counter_set_high(&memcg->memory, PAGE_COUNTER_MAX); - memcg->soft_limit = PAGE_COUNTER_MAX; + WRITE_ONCE(memcg->soft_limit, PAGE_COUNTER_MAX); page_counter_set_high(&memcg->swap, PAGE_COUNTER_MAX); memcg_wb_domain_size_changed(memcg); }