Received: by 2002:a05:6a10:d5a5:0:0:0:0 with SMTP id gn37csp1545376pxb; Fri, 1 Oct 2021 13:04:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyQvmd2fZA/3BSZvLyNksZGkssb/7UX3rHQAgrpvcRkJYBiT03EFq4NMcIzkIjEy57wuCs1 X-Received: by 2002:a17:906:1fc1:: with SMTP id e1mr8353901ejt.515.1633118663552; Fri, 01 Oct 2021 13:04:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633118663; cv=none; d=google.com; s=arc-20160816; b=WSN5i8d4o4OUgq3erpFbHx2goxBZBJJbbQ0tmNdnlOgKsrX3+E7/Aa6E38RzGj2p0Z yjmlgqh3/oroGn/6jGEb3dzWr2pHccQgDErYyW1yp8IeMu18sSdnI5PCHsw6z0TNiw1Z rVlveRPfA++CIlA9+wOGazfF69LHCR/Mo5E0nBoeeCavXFxqxwi6k9dIxxX/l+OHg+gJ ewxmUFYo9w3vWqbDZMQw+f5bwWc5B3RL3xDhXEhN/fYCfMexjjGFg7EdxuowICllny/0 JoMqsHLtiXUx5DMIzjEJhidmz+YZF5aJ6wF0aFuLIaswVfH8AQaht0/jP1x3EpjS1r+v XSAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from:dkim-signature; bh=sFCP5YMQVpSD6yFGcGrxnQTLJHGtWuJlEliBV/TO+yU=; b=XpIupSt34Qo5P07V3udTA/pmZh0f6LgYgrVWYLrYN0y8DHcgZKRu9yi0316nKyMerW 1lIqX2gf6i5sydgNzAODANImud6cin/qj44Y0mtWtbAP7gv9q0iWPOCWlECPfoXbDX6G jStGrivBY1OiyE5rZdC2Li8twEWkQI8ZgrBBILqYIIzf77CZYiYjxwRIFZQdK18MDDXZ brdsSsvEb71ULcdIYpKnsWM4VLPwHdPffs3x8imbwbAfie7ntqbTo/Y3Dt9FVFkTFevJ 6rK6ywl3ee2Y1Xdy/DgI4KmJ3s9ShLyKH4T6QrAe1QtUK55fdgWseN8fnoWRTJ1nzX8D g6Yg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=AKCyPD1V; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s7si10211633ejd.294.2021.10.01.13.03.58; Fri, 01 Oct 2021 13:04:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=AKCyPD1V; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1355598AbhJATMD (ORCPT + 99 others); Fri, 1 Oct 2021 15:12:03 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:43352 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1355640AbhJATMC (ORCPT ); Fri, 1 Oct 2021 15:12:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1633115417; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:in-reply-to:in-reply-to:references:references; bh=sFCP5YMQVpSD6yFGcGrxnQTLJHGtWuJlEliBV/TO+yU=; b=AKCyPD1VdJHPZK3bsmwPHUhCOd6YQ+oo77eHOuq4wQJf41w4Az6EjkUxbZ6w7KpPVIOY4V chHboZUSMGOPB2rZJR0HeMr+O0r0VG2+PRdHAtJ8zz1cqzzcpC3CNcV3yaUsELE/1HdtCu 4GNmizsYQ1GrrIy+DR6NVKGLx11DZaw= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-327-_OTOcvk9PryE4TMuHiT51w-1; Fri, 01 Oct 2021 15:10:16 -0400 X-MC-Unique: _OTOcvk9PryE4TMuHiT51w-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C3C5E107B0EF; Fri, 1 Oct 2021 19:10:14 +0000 (UTC) Received: from llong.com (unknown [10.22.33.73]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8003960BD8; Fri, 1 Oct 2021 19:10:12 +0000 (UTC) From: Waiman Long To: Johannes Weiner , Michal Hocko , Vladimir Davydov , Andrew Morton , Vlastimil Babka , Roman Gushchin Cc: linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-mm@kvack.org, Shakeel Butt , Muchun Song , Waiman Long Subject: [PATCH 1/3] mm, memcg: Don't put offlined memcg into local stock Date: Fri, 1 Oct 2021 15:09:36 -0400 Message-Id: <20211001190938.14050-2-longman@redhat.com> In-Reply-To: <20211001190938.14050-1-longman@redhat.com> References: <20211001190938.14050-1-longman@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When freeing a page associated with an offlined memcg, refill_stock() will put it into local stock delaying its demise until another memcg comes in to take its place in the stock. To avoid that, we now check for offlined memcg and go directly in this case to the slowpath for the uncharge via the repurposed cancel_charge() function. Signed-off-by: Waiman Long --- mm/memcontrol.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 4b32896d87a2..4568363062c1 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2167,6 +2167,8 @@ static bool consume_stock(struct mem_cgroup *memcg, unsigned int nr_pages) return ret; } +static void cancel_charge(struct mem_cgroup *memcg, unsigned int nr_pages); + /* * Returns stocks cached in percpu and reset cached information. */ @@ -2178,9 +2180,7 @@ static void drain_stock(struct memcg_stock_pcp *stock) return; if (stock->nr_pages) { - page_counter_uncharge(&old->memory, stock->nr_pages); - if (do_memsw_account()) - page_counter_uncharge(&old->memsw, stock->nr_pages); + cancel_charge(old, stock->nr_pages); stock->nr_pages = 0; } @@ -2219,6 +2219,14 @@ static void refill_stock(struct mem_cgroup *memcg, unsigned int nr_pages) struct memcg_stock_pcp *stock; unsigned long flags; + /* + * An offlined memcg shouldn't be put into stock. + */ + if (unlikely(memcg->kmem_state != KMEM_ONLINE)) { + cancel_charge(memcg, nr_pages); + return; + } + local_irq_save(flags); stock = this_cpu_ptr(&memcg_stock); @@ -2732,7 +2740,6 @@ static inline int try_charge(struct mem_cgroup *memcg, gfp_t gfp_mask, return try_charge_memcg(memcg, gfp_mask, nr_pages); } -#if defined(CONFIG_MEMCG_KMEM) || defined(CONFIG_MMU) static void cancel_charge(struct mem_cgroup *memcg, unsigned int nr_pages) { if (mem_cgroup_is_root(memcg)) @@ -2742,7 +2749,6 @@ static void cancel_charge(struct mem_cgroup *memcg, unsigned int nr_pages) if (do_memsw_account()) page_counter_uncharge(&memcg->memsw, nr_pages); } -#endif static void commit_charge(struct folio *folio, struct mem_cgroup *memcg) { -- 2.18.1