From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=95.215.58.148 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793393686; b=hor7VJSOAxQBa4onf0MT4Lfcs2uXCJgcJ8c/FQfXigWaQug9qlEZVOqFCF9XPUUJcUKm yA+83pQGjncQydIaQ46JEDAsU32oXuwKP/iGwDdUF74fg/mn9IbvDV+P413RJJG8wLsWI ibUpZBPUHuiahI/7yR3tPclvZnROQZ6Q9D5b9/kRKrkup3GlFIseiDrOLTk++ERJbqUCZ /xVA9tV4uxaMHwq7PSfzYQhRsua30GrCc4+WTEGb774h4dWTvzdR6vXUoHRYKrbNFDqVW kZvExkcsxBevh8w2kkMjBu5QOoRdsn8P7uipPA84k2CXxnpqOD8KXf4dtpSWupEa2zw== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793393686; h=DMARC-Filter:X-Envelope-To:DKIM-Signature:X-Envelope-To:Received: X-Mizu-Trace-ID:X-Migadu-Flow:From:To:Cc:Subject:Date:Message-ID: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; bh=3LOOMBiRudcRqqourx6yGwP6bpaJtTp0XqlHxDY1cLk=; b=VwXU2OJj8oFXxZmV8lPrJssgTLxjaWJbadwv5XYMSMM4X/3+mHC5NoC9hnzgwEeNr02O kwB94Bufwm2XHR5Gg4HVjyfdlquw0zXQNzGkFl+W4NDBWYcic/LZWzHUlnsfBStqkARos 9wTjh3SgCTpgZGjvkZbzi+cWUtAb0t97RuuQxoUyQEruFEVbacQIMJRpDhtlSQlh30yUY m4OuN4vmhXNTd6n4/twkLC4Sekxt3wXZpEuDSQEMsac42WseaaBmg0ZloT2I4fe9D8Ujg aifGQ+tSUzQYaiyUB4nATvrqPy51Fp8mexJDBk798/Q+bXb+UOy7Pv++I90j7pUi8+A== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass header.d=linux.dev header.i=@linux.dev header.a=rsa-sha256 header.s=key1 header.b=HLnG1BJU; arc=none smtp.remote-ip=95.215.58.148 Received: from mta1.migadu.com (out-148.mta1.migadu.com [95.215.58.148]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 39DA2606A32A for ; Fri, 30 Oct 2026 20:54:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 39DA2606A32A Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key, unprotected) header.d=linux.dev header.i=@linux.dev header.a=rsa-sha256 header.s=key1 header.b=HLnG1BJU X-Envelope-To: linux-kernel@vger.kernel.org DKIM-Signature: a=rsa-sha256; bh=xZeayaJ9A4XXrBIo9cgThSGbAkjlrpMHtlIOd0m03/A=; c=simple/simple; d=linux.dev; h=from:to:subject:date:message-id:mime-version:content-type; s=key1; t=1793393684; v=1; x=1793998484; b=HLnG1BJURJTLZ1LncN0Z2qcRAyII+KMaZKF4L2tHQhNjHHsajh5PT+R8AE7AC6lxsPg+p2rc 0HFhcpowfb4uvaN5VdumBpcMt36rtEOist1HkbpArNpG74ib1SXKxeoTWnHv70jKJvdF2hIXl4b L9yLEmgpw4sc7t6nGWZE/ZF8= X-Envelope-To: linux-kernel@vger.kernel.org Received: by smtp.migadu.com with ESMTPS id 07d861093bbb3087; Fri, 30 Oct 2026 20:54:44 +0000 X-Mizu-Trace-ID: 07d861093bbb3087 X-Migadu-Flow: FLOW_OUT From: Shakeel Butt To: Andrew Morton Cc: Johannes Weiner , Michal Hocko , Roman Gushchin , Muchun Song , Tejun Heo , Harry Yoo , Meta kernel team , cgroups@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Michal Hocko Subject: [PATCH v2 4/5] memcg: use high_work for remote charges Date: Fri, 30 Oct 2026 13:54:15 -0700 Message-ID: <20261030205418.341214-5-shakeel.butt@linux.dev> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20261030205418.341214-1-shakeel.butt@linux.dev> References: <20261030205418.341214-1-shakeel.butt@linux.dev> X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Some charges go to a cgroup outside the current mm's cgroup and its ancestors. The high handler uses current->mm, so it cannot handle these overages. Filesystem notifications and remote page faults can take this path. Use mm_match_cgroup() before checking the high limits. If it does not match, use high_work instead of recording task overage or doing synchronous reclaim and throttling. Charges to the current mm's cgroup or one of its ancestors keep their current handling. Tasks without an mm also use the worker. Like kernel threads, remote chargers skip memory.swap.high throttling and its high-event reporting, and a fast allocator can outrun the worker. The memory.max and memory.swap.max checks stay the same. Suggested-by: Tejun Heo Signed-off-by: Shakeel Butt Acked-by: Michal Hocko --- mm/memcontrol.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 42bdaaacafb7..e8d9c001b6ce 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2708,7 +2708,8 @@ static void memcg_enforce_high(struct mem_cgroup *memcg, unsigned int nr_pages, gfp_t gfp_mask) { bool allow_spinning = gfpflags_allow_spinning(gfp_mask); - bool use_worker = !in_task() || (current->flags & PF_KTHREAD); + bool use_worker = !in_task() || (current->flags & PF_KTHREAD) || + !current->mm || !mm_match_cgroup(current->mm, memcg); /* * If the hierarchy is above the normal consumption range, schedule @@ -2731,6 +2732,7 @@ static void memcg_enforce_high(struct mem_cgroup *memcg, unsigned int nr_pages, * Don't make an unrelated interrupted task handle this charge. * Kernel threads may be working for other tasks, so let a worker * reclaim instead. + * Remote charges need reclaim from their charged hierarchy. */ if (use_worker) { if (mem_high) { @@ -2759,7 +2761,7 @@ static void memcg_enforce_high(struct mem_cgroup *memcg, unsigned int nr_pages, } } while ((memcg = parent_mem_cgroup(memcg))); - /* Interrupts and kernel threads stop here. */ + /* Interrupts, kernel threads, and remote chargers stop here. */ if (use_worker) return; -- 2.53.0-Meta