From patchwork Fri Mar 14 13:36:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthew Wilcox X-Patchwork-Id: 14016921 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 4CD5CC282EC for ; Fri, 14 Mar 2025 13:36:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1B322280007; Fri, 14 Mar 2025 09:36:30 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 13B37280006; Fri, 14 Mar 2025 09:36:30 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EFA08280007; Fri, 14 Mar 2025 09:36:29 -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 CF79D280001 for ; Fri, 14 Mar 2025 09:36:29 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id E5A0C1CB53E for ; Fri, 14 Mar 2025 13:36:30 +0000 (UTC) X-FDA: 83220256140.05.E5942D3 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf02.hostedemail.com (Postfix) with ESMTP id 06BE680011 for ; Fri, 14 Mar 2025 13:36:28 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b="El7l/uRH"; spf=none (imf02.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741959389; 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=7XRLfLaf7AZTLwc7u9jX6hFHrAGcQJ5uMAqzQ/rm20U=; b=p2PMoR8SLN6b6F6GCbY9sOzNWeACDUheWeORO982vVarZPb2UQSmcA0LFWN++erLNWcz1u GXa36efvBuyf0fHFVFxLzdmzl2szdFqybF+LuEmOwSgC1PGps+gzLDuVa6GMwICJh1GyWh SVPcCsU+M3F3juxEtU66QjGPGGL9aDA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741959389; a=rsa-sha256; cv=none; b=X76b52+EAPSEb/pEMT3iCRqqF0wUVsQmu3lBCnXTsS5gibY46YWVbqXktLptCWGb9g/sqi mt8MMN+iPG7HIuVHHHAm5djpsmkmG2rOT9w1AvBXsOBLhXr7zIXStRXi5RIT6kx9qY638V 04UaFc6UARmrFZ6erUlGSO9P87Lw5QM= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b="El7l/uRH"; spf=none (imf02.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=7XRLfLaf7AZTLwc7u9jX6hFHrAGcQJ5uMAqzQ/rm20U=; b=El7l/uRHe8zPK2wBhNXt9f/eLC eVRCKYvP4ngIWcHnbt19T/gicLL7N6toE5O8XtjBfGGxQPB8yZwLrvYdP28AKlZ2mkclGFirrOcWR Hwlv3E6tbn3QMHeZIY1JKjZhR4BVqioOVAXaQZXT8gQjdMYtExSAQISlgX2NTYFkSn2/wRhVOe5Xb joY+8amX/cW60tPnpsrRNYGrtps0gOvHnNdHmFJvZZFaVRGgYJPzAj7/gM/CeA1Q+NyIPxieoqUHz KNWNxT5k03vmnIHiN7To09OIKeO6ktutU1mxYDXfgPEdNDMuqUKQU95PVvoOd73nIHpX72P5MuGnh TLL08kqg==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tt5D6-00000000ZyC-3ANV; Fri, 14 Mar 2025 13:36:24 +0000 From: "Matthew Wilcox (Oracle)" To: Andrew Morton Cc: "Matthew Wilcox (Oracle)" , linux-mm@kvack.org, Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Zi Yan , David Hildenbrand Subject: [PATCH v2 3/5] mm: Remove references to folio in split_page_memcg() Date: Fri, 14 Mar 2025 13:36:13 +0000 Message-ID: <20250314133617.138071-4-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250314133617.138071-1-willy@infradead.org> References: <20250314133617.138071-1-willy@infradead.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: 06BE680011 X-Stat-Signature: yqp8ifyjpyntsuaxyckdtcoduq854an8 X-HE-Tag: 1741959388-682117 X-HE-Meta: U2FsdGVkX18IKGbA5Yq1q+wAxSoAA1yoTF8qQcs8iBt9zD8oSuCe/cKfFmmLDUc8lLt49GCURZF22Lde6fuWcAHlCIVq+C4jGVaAEs3RFQYeK7uUtc3/3GjjwNLdKMJAbq51orFzlEvaGYFvjJFv2GYBVHQ83NFI/CvnKbvGTHvkkL2qXETkLayi1JpII6AyHZ8JrTHi0g3lV178qUJx+XJQrjupRjIOJH5/J5p+XBzLbRthCee99MZOzOo74GQOJJ0QFepxdSxfj9veTgaL/u+A2yMivViJzd/zOqSbXga9NKBFYCpkdt5AqYPfHWABo/07ApuhQIdQdivTds95s7vwluJLeiYypqh7c/CKlnpNnkyYYN+Ejr/WCSlEsqdVaPaLiDHGjFq7+5OllqyNVx0ObFNLGpmqLUXXpIP7Dr0xSVlLVbSkTlJilrP9H1AIEnQ8OuPfjQMSFhudVQgLXfee+pLBF+ijls5MW+x5U9Z9omuxcBvbwGKtrkJ88IIZZcGVBRuT/ciXiII0P5PN5JXX+3yJbhhv/Sug02i+ocHmI0o9F2qPQLkRnbKv4wAPlNf37gx9uayySf8mnGD5YCvNlMwQ3fHciKhS+7lfBuI+WYzR1nzG9RO1eRWLi7vKcPfOaLVmMINenAXXGsce8LNLZTAVXukCBCm95asmAKOSRtO6DSlamBPD4FJYvdLTPqJkR3vsPnnFaPlvkc3f321jZnJR2QidgzJbV3ZItMRpUNvUoTBtK6MWXnXM4FDRsRkbVL4VYDzj6X3Z684Jxi9pgE/jKK7N2uSEG/5wrFFOCk3TnC7W9JtXRotyKFSRh85sUZsFNui2rcgSVj4Pge4TTM+hpuMbwf2PNECn0R2lSon4f/waKGCF3cwztvG1Vv4eVSorvSj+bo0IOxFUqFNib+aEA1cMbrWkp2nfFbRBoRpRkfObN/l/JObD8KWFFPfxwQeZhqOHhgEl+oN unCXirF1 /1DGnfBSH8JUY5daXvaM5JGK9vOBj3ZUllzGD8h1+cgqjsz6C0otUSkXBOqRo51AJ+QyPcgvRPG1Srz7zkYNOGGKD7hqYTSMnNG2kc8U9lWTcolvIQGHh30iq3WY/HFpfM15Uz6eo0YM4r8Ki8RPCvw9BWI1cvB9vwj3S430V7Mf/Pj0vBhC6otpY2Ys3eplB8y3bdazs2/gWb5aex+q13RNPkoexjYX5qFvxT1EwWg0/5MRA6VbPoVDGQpdDsQnZYHkLtJlC5rD01mc+maoI7sE6VXd+/TzIbYIkRTVmYcJqwwX8XLpgPTS4zJS5zf6IL15r4QuX5WQ+uF6AUBcAeAUXJlCfdhZA1FXm 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: We know that the passed in page is not part of a folio (it's a plain page allocated with GFP_ACCOUNT), so we should get rid of the misleading references to folios. Introduce page_objcg() and page_set_objcg() helpers to make things more clear. Signed-off-by: Matthew Wilcox (Oracle) Acked-by: Johannes Weiner Acked-by: Shakeel Butt --- mm/memcontrol.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 862bb0d5c0f2..9e9027dda78c 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2697,6 +2697,23 @@ static int obj_cgroup_charge_pages(struct obj_cgroup *objcg, gfp_t gfp, return ret; } +static struct obj_cgroup *page_objcg(const struct page *page) +{ + unsigned long memcg_data = page->memcg_data; + + if (mem_cgroup_disabled() || !memcg_data) + return NULL; + + VM_BUG_ON_PAGE((memcg_data & OBJEXTS_FLAGS_MASK) != MEMCG_DATA_KMEM, + page); + return (struct obj_cgroup *)(memcg_data - MEMCG_DATA_KMEM); +} + +static void page_set_objcg(struct page *page, const struct obj_cgroup *objcg) +{ + page->memcg_data = (unsigned long)objcg | MEMCG_DATA_KMEM; +} + /** * __memcg_kmem_charge_page: charge a kmem page to the current memory cgroup * @page: page to charge @@ -2715,8 +2732,7 @@ int __memcg_kmem_charge_page(struct page *page, gfp_t gfp, int order) ret = obj_cgroup_charge_pages(objcg, gfp, 1 << order); if (!ret) { obj_cgroup_get(objcg); - page->memcg_data = (unsigned long)objcg | - MEMCG_DATA_KMEM; + page_set_objcg(page, objcg); return 0; } } @@ -3089,18 +3105,18 @@ void __memcg_slab_free_hook(struct kmem_cache *s, struct slab *slab, * The objcg is only set on the first page, so transfer it to all the * other pages. */ -void split_page_memcg(struct page *first, unsigned order) +void split_page_memcg(struct page *page, unsigned order) { - struct folio *folio = page_folio(first); + struct obj_cgroup *objcg = page_objcg(page); unsigned int i, nr = 1 << order; - if (mem_cgroup_disabled() || !folio_memcg_charged(folio)) + if (!objcg) return; for (i = 1; i < nr; i++) - folio_page(folio, i)->memcg_data = folio->memcg_data; + page_set_objcg(&page[i], objcg); - obj_cgroup_get_many(__folio_objcg(folio), nr - 1); + obj_cgroup_get_many(objcg, nr - 1); } void folio_split_memcg_refs(struct folio *folio, unsigned old_order,