From patchwork Sat Mar 15 17:49:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shakeel Butt X-Patchwork-Id: 14018166 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 A75ADC28B2F for ; Sat, 15 Mar 2025 17:49:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 30FBD280005; Sat, 15 Mar 2025 13:49:52 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 29700280001; Sat, 15 Mar 2025 13:49:52 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 111B7280005; Sat, 15 Mar 2025 13:49:52 -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 E364E280001 for ; Sat, 15 Mar 2025 13:49:51 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 57927C1E7D for ; Sat, 15 Mar 2025 17:49:53 +0000 (UTC) X-FDA: 83224523466.23.032B1AB Received: from out-189.mta0.migadu.com (out-189.mta0.migadu.com [91.218.175.189]) by imf02.hostedemail.com (Postfix) with ESMTP id A2DA080006 for ; Sat, 15 Mar 2025 17:49:51 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=EsH21tpo; spf=pass (imf02.hostedemail.com: domain of shakeel.butt@linux.dev designates 91.218.175.189 as permitted sender) smtp.mailfrom=shakeel.butt@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742060991; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=D9SGS5ZGVTJYUs7bi8rBcO4GG6XSRL+h8cbbja/hnd4=; b=gwvLOL0LKs4bl6jmAOex//YhlAw8EnXBZt12MpEtxJ200Z9W1Uqn8GCSUKRunbF+dKY/uK vx6aKz4m1BdaYNS6UHdv0O7fC9jV5TwrAUDMTIc4kleXWp0j/g4w5wjA0tLK7DJHgkx2WY E688V4Ic3cEyhYwAO1XaxUyc6E5UJ+4= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742060991; a=rsa-sha256; cv=none; b=X4qlRSSnYKiunzxSuu+73zqbrPEVjJCBvi1wiR/mLCplY1eu7zzlYOk+6CVb6nPKZKTEsj WgLMhO30zh+aGR4TPFrLyL6NfWXYu8D11ScPguPHKzq14RAcZJiPu3KR/ToODn1nrrL1AX Lfhi6iRfaPjXIpzfv8o+5JymlibSwL0= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=EsH21tpo; spf=pass (imf02.hostedemail.com: domain of shakeel.butt@linux.dev designates 91.218.175.189 as permitted sender) smtp.mailfrom=shakeel.butt@linux.dev; dmarc=pass (policy=none) header.from=linux.dev X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1742060990; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=D9SGS5ZGVTJYUs7bi8rBcO4GG6XSRL+h8cbbja/hnd4=; b=EsH21tpoGivxemQBYrsxMd+ru7bHcE8LYPnGChI+hOtYbRl8sO0Czs0Q7Br3PmMb9k9bpa gce6M48m5W+CSQy02N7oSlHbmeiv0YDYjFi2vfK6zdqUHBTGYUDd4M1RiDkREBX83mGRH4 YD4a7IZYjimlw7tBXcpiVnolqcmcIyI= From: Shakeel Butt To: Andrew Morton Cc: Johannes Weiner , Michal Hocko , Roman Gushchin , Muchun Song , Vlastimil Babka , Sebastian Andrzej Siewior , linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, Meta kernel team Subject: [PATCH 3/9] memcg: introduce memcg_uncharge Date: Sat, 15 Mar 2025 10:49:24 -0700 Message-ID: <20250315174930.1769599-4-shakeel.butt@linux.dev> In-Reply-To: <20250315174930.1769599-1-shakeel.butt@linux.dev> References: <20250315174930.1769599-1-shakeel.butt@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: A2DA080006 X-Stat-Signature: 74btm3oar3xjahqxphto9dfba8ixyrcq X-HE-Tag: 1742060991-866007 X-HE-Meta: U2FsdGVkX18ooYvSt/jpSNdvrX81qC4v38sFytfcdr4Sv9GwSs8KT/qGbhdv0yWQUMRA4lmqNSbybISz8ntMkaqs0rhA7JXMPz4voiEpgKHdCtHxN3GV9HPcLjMoAvptEzPL9jBMn2RNZya0NzOIhTj9LMRc5EoGpahE2311vZ2m/5CtHDNe4Pd8DuWaPwKkHDhTqmLGmjjFtWVssf9IKqxPKe8+Wa8fd8N6Hqq7Wzbu/6ADU7awKisY0bj30MWKk1STQxJxjimTDJNs2U0hYlPYuoUYtmUM7QAVa+lteMtb2eVd8jrgNjkpdZE1wFkNRuKvt5UbhlMx0T+0IbkVKVSLFJBHKfpqzG14puuADaGvMjQtY/eRhCEPa794kz1VLm2tAZXuzuN/05lnjv0k3XeswnfP+TOeoTFiss7vqf2+RXzw+/qA/cXYIDHtiSgv644qZJ+MCy4uwCZWG0KtTXc0OtILY25HaOba8RIbsyVPYKOuRE+eva6GYDD3+vd1b4wGq707grN/JVFWe61v8j2JKohX9GcvOJNgDv4nfFg9B78pmcaTitueP/4ZswHG4wVlfcZmxWe5L8qfAcQOhXXA4vK/+AcX8MD6s13ddDFt8V2X9vzwiP0F6GHNI3TTtQVxDmwuxSbYH/+qMearnp6Dx+DzHMmiLHzihorRc0ty3CN3Jn+CChXBzVGXFxAu70XiMc6Oymh78MUf94sOv7iW+ArIYCKDU1ZyYzvNrphEto6N5n1QNaR9YOWBGFEQP9ZEZZ4zS2qFHI6+DUEroHQw6BmUtkxGFS6W9cZFcrsUAKtChvianW6ltctJ/aevcTRVkO+A0pbeORFNTFGKioRmXd7CVXd8+p5kOFiS3n/Sz/rfzgcc59hMtXNttCIyujb/TmkmCMOwwRKllQ3L9CJ1FaKNitVMmuAVmO8CdS8mzDA/LYvCWWS42nY80vuuLglbvcZl7R+ncaOWhj2 RNTthS3P 3Z+pDURWm8mx1H9Wu+FwivslZeiTQz79hzK0sayA5MlJUfPkdGi+hDeC4air4eqkcY3G7WvqjpH1LDjHDm59rnCzgZXRt2/z/E4a3nDAyXIx5H+Ztd8lvZiDKy3gHquS6WrwvDfAOiLxiMOn+w0o0w5ku50TdMFq+MyujJysRQd8h/OIblU4Zi2ZG/efcnC0hW3D6zHhnlshvtoWqDqEqMqlJIrVUXaDJWOZL 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: List-Subscribe: List-Unsubscribe: At multiple places in memcontrol.c, the memory and memsw page counters are being uncharged. This is error-prone. Let's move the functionality to a newly introduced memcg_uncharge and call it from all those places. Signed-off-by: Shakeel Butt Acked-by: Vlastimil Babka --- mm/memcontrol.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 28cb75b5bc66..b54e3a1d23bd 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1816,6 +1816,13 @@ static bool consume_stock(struct mem_cgroup *memcg, unsigned int nr_pages, return ret; } +static void memcg_uncharge(struct mem_cgroup *memcg, unsigned int nr_pages) +{ + page_counter_uncharge(&memcg->memory, nr_pages); + if (do_memsw_account()) + page_counter_uncharge(&memcg->memsw, nr_pages); +} + /* * Returns stocks cached in percpu and reset cached information. */ @@ -1828,10 +1835,7 @@ static void drain_stock(struct memcg_stock_pcp *stock) return; if (stock_pages) { - page_counter_uncharge(&old->memory, stock_pages); - if (do_memsw_account()) - page_counter_uncharge(&old->memsw, stock_pages); - + memcg_uncharge(old, stock_pages); WRITE_ONCE(stock->nr_pages, 0); } @@ -1893,9 +1897,7 @@ static void refill_stock(struct mem_cgroup *memcg, unsigned int nr_pages) * In case of unlikely failure to lock percpu stock_lock * uncharge memcg directly. */ - page_counter_uncharge(&memcg->memory, nr_pages); - if (do_memsw_account()) - page_counter_uncharge(&memcg->memsw, nr_pages); + memcg_uncharge(memcg, nr_pages); return; } __refill_stock(memcg, nr_pages); @@ -2855,12 +2857,8 @@ static struct obj_cgroup *drain_obj_stock(struct memcg_stock_pcp *stock) mod_memcg_state(memcg, MEMCG_KMEM, -nr_pages); memcg1_account_kmem(memcg, -nr_pages); - if (!mem_cgroup_is_root(memcg)) { - page_counter_uncharge(&memcg->memory, nr_pages); - if (do_memsw_account()) - page_counter_uncharge(&memcg->memsw, - nr_pages); - } + if (!mem_cgroup_is_root(memcg)) + memcg_uncharge(memcg, nr_pages); css_put(&memcg->css); } @@ -4689,9 +4687,7 @@ static inline void uncharge_gather_clear(struct uncharge_gather *ug) static void uncharge_batch(const struct uncharge_gather *ug) { if (ug->nr_memory) { - page_counter_uncharge(&ug->memcg->memory, ug->nr_memory); - if (do_memsw_account()) - page_counter_uncharge(&ug->memcg->memsw, ug->nr_memory); + memcg_uncharge(ug->memcg, ug->nr_memory); if (ug->nr_kmem) { mod_memcg_state(ug->memcg, MEMCG_KMEM, -ug->nr_kmem); memcg1_account_kmem(ug->memcg, -ug->nr_kmem);