From mboxrd@z Thu Jan 1 00:00:00 1970 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); -- 2.17.1