From patchwork Mon Mar 10 23:09:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shakeel Butt X-Patchwork-Id: 14010854 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 031BFC28B30 for ; Mon, 10 Mar 2025 23:10:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 77E19280002; Mon, 10 Mar 2025 19:10:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 72EEE280001; Mon, 10 Mar 2025 19:10:07 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5F6F5280002; Mon, 10 Mar 2025 19:10:07 -0400 (EDT) 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 43793280001 for ; Mon, 10 Mar 2025 19:10:07 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id DCEC5B90CC for ; Mon, 10 Mar 2025 23:10:08 +0000 (UTC) X-FDA: 83207186496.17.39445AA Received: from out-173.mta0.migadu.com (out-173.mta0.migadu.com [91.218.175.173]) by imf29.hostedemail.com (Postfix) with ESMTP id 26017120008 for ; Mon, 10 Mar 2025 23:10:06 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=nvWTMrbr; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf29.hostedemail.com: domain of shakeel.butt@linux.dev designates 91.218.175.173 as permitted sender) smtp.mailfrom=shakeel.butt@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741648207; a=rsa-sha256; cv=none; b=nEaCoSiWNkkcBqtTeFiSl7PtnKjL6MBeE5bJ0Z0ES56E2Td9qLzPBexypZxbzzwSk9S8fe CO4ptg2lkmMrZ+RY1+ex/9HDO4Un+GMgFP56NHCK9wxkRz54FAc2+uFOvWEzzISb/M2dTZ Ucb7FuQDdI/lCFLIF4d1RLbg+xyIENw= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=nvWTMrbr; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf29.hostedemail.com: domain of shakeel.butt@linux.dev designates 91.218.175.173 as permitted sender) smtp.mailfrom=shakeel.butt@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741648207; 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:references:dkim-signature; bh=G/HCAo/u+1dwdadYxdqNt5UgFUYiXAtMaH9rWhYyOUw=; b=FuD/EFI+UyC+DRFfqKREVn4VC+RurgLkCmvP6HbXNmfOygoA+WzOegTedVvkz5QVYbUcZM 0Yb4/DW+K+chsmwT9fHk4I0ypHhSC72R8LGtzSCFfR8WaSEPSMUnYiMqu+I6sbxHwckF87 jwMClKGHblfZ3obMF2NedP7uw1Xa01c= 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=1741648204; 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; bh=G/HCAo/u+1dwdadYxdqNt5UgFUYiXAtMaH9rWhYyOUw=; b=nvWTMrbrSy3vyrHVRQjNOsw5HFvNCWN5XnIBGK9DKyMeWP1Tupy2DYJRgPjF5UPUL2806b LcdTNMCkBHDbnGwmzwAGZ46EqnY75LZS5JGO30XpyYCZ9eHmWi+ZzDo3b/zgw6IeEgjaVp EeF6ma+K94mkBgWcKZ2wFvw9uMG6Ta8= From: Shakeel Butt To: Andrew Morton Cc: Johannes Weiner , Michal Hocko , Roman Gushchin , Muchun Song , linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, Meta kernel team , stable@vger.kernel.org Subject: [PATCH] memcg: drain obj stock on cpu hotplug teardown Date: Mon, 10 Mar 2025 16:09:34 -0700 Message-ID: <20250310230934.2913113-1-shakeel.butt@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspamd-Queue-Id: 26017120008 X-Rspamd-Server: rspam11 X-Stat-Signature: 5no1xwer16f9ixd7hqknf8cqy7x5rtsq X-Rspam-User: X-HE-Tag: 1741648206-197924 X-HE-Meta: U2FsdGVkX1/+ihpRu1JqMAV+jryGORBveS9puEsy7kq73ILvu1GS4FR0xHdx8Pf3htBTWBagudfD0NkPlfPKhQ02H/yK7qTKXoY7Eyjtxwmpj3R5DRIptOf+1Ki0pc1yX3iOcy1FIchgbMp1+D5YT+Ur9hWvqVzQLoszQ0RQY0hhzGkbzoK2bK1LLVzfhQF5+r1VTMxa8YyZAFdurICgRfD1XJo9rBdjm+xFK/xX1vpBogY3jIFRECYokRa4GCH7/54lNOaoMvhqrbN0wyix+5IJhmPOJxEGLCKBrJFDnvxFMyrpl9FR3KKxR7aFijzMrYfJD4HdrJegNVa1KWf0FfCvr8DDhYwfD7b6XgJk/B5xFGyys+cXGUKFtfYBAEcsZwmiqk/XJW+aTIPUjb8jUhIlVUH0YSxgQRsatu24Q9nM3/vDAdaA3nPZYAolDl7n9/JKq50pQxBXQyIr+UrfFxhnsm8gFQ66GMo/glwYu/SFIcRi6JML3cyuyv7KF3L1wdaharztQdp5ub3SGB5OAV+9aAJorUv3696ysGw2+Nc/6lmjKffH2YehmryqfRT1NwysMaf1Tal4v2AG8hV4emz7N5/EM5QgwS9umZYrnxIU8rlysRcVS507QImNTJBOEcbyN7JfXn2Gqeu9gcvQGhbeC/wursi0Mrko3Mu3kTGQ2Um8UCIp17PM6qoidF71zExzJR+MMKzqAZ2PopYNTBpQSCn2z+pOB32m25Uh7BwtHNKimE9qqHsZdKUS6JV6IfHt4s+WL/qzZOhdELRO7NhoRgHySv44zS1csPBDkAvJRnChliMGDD7yIuWPx/cgZjcSbVyD7ljsKMYDTUnQhzQ2EJDIE/KIux/SB5z7Y/5hJQgi1XgF5DuuVevAOtNA8ey6A+n2y5Htj9OqZTaqjji8PLnWgj2BCsxlppUIgZrbNXwNbi9b3CSXFzE8kiFIijoXli9GgRX1kk3Gr1C blF8vRyd njdzuLXbqYynlfyk0UhtxFJgfkWa4Kmm4SBLAFenzaZzyF+3Rwh9saqIUXEF4bPO97vx/dPswy9qhr5dCOi4HeKnf9qOdXoli3gPL6xJov2u2nbXDKF/QlAzsr1Pps+5amxEeDGRd6gTdsX3oSPU4SJlvQZTr/i/2fxpFDLECAG6AtnZGpJkVaWQlZEKO/sEOUH4a 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: Currently on cpu hotplug teardown, only memcg stock is drained but we need to drain the obj stock as well otherwise we will miss the stats accumulated on the target cpu as well as the nr_bytes cached. The stats include MEMCG_KMEM, NR_SLAB_RECLAIMABLE_B & NR_SLAB_UNRECLAIMABLE_B. In addition we are leaking reference to struct obj_cgroup object. Fixes: bf4f059954dc ("mm: memcg/slab: obj_cgroup API") Signed-off-by: Shakeel Butt Cc: Reviewed-by: Roman Gushchin Acked-by: Johannes Weiner --- mm/memcontrol.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 4de6acb9b8ec..59dcaf6a3519 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1921,9 +1921,18 @@ void drain_all_stock(struct mem_cgroup *root_memcg) static int memcg_hotplug_cpu_dead(unsigned int cpu) { struct memcg_stock_pcp *stock; + struct obj_cgroup *old; + unsigned long flags; stock = &per_cpu(memcg_stock, cpu); + + /* drain_obj_stock requires stock_lock */ + local_lock_irqsave(&memcg_stock.stock_lock, flags); + old = drain_obj_stock(stock); + local_unlock_irqrestore(&memcg_stock.stock_lock, flags); + drain_stock(stock); + obj_cgroup_put(old); return 0; }