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 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); } -- 2.17.1