From patchwork Tue Feb 27 18:05:09 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthew Wilcox X-Patchwork-Id: 13574254 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 6796CC5478C for ; Tue, 27 Feb 2024 18:05:39 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E686E6B011D; Tue, 27 Feb 2024 13:05:38 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E18526B011E; Tue, 27 Feb 2024 13:05:38 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CDFD46B0120; Tue, 27 Feb 2024 13:05:38 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id BCD066B011D for ; Tue, 27 Feb 2024 13:05:38 -0500 (EST) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 8D8B114062A for ; Tue, 27 Feb 2024 18:05:38 +0000 (UTC) X-FDA: 81838361556.19.2F4AD8B Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf24.hostedemail.com (Postfix) with ESMTP id 50B18180034 for ; Tue, 27 Feb 2024 18:05:35 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=owfEygAE; dmarc=none; spf=none (imf24.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1709057135; 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=KrIjq/ePaUaM0cPb48gB2ehE+Eqj59aqoAiCANeBsVk=; b=hUdzveLF1sZCTdVTjTqfV3M1KF4qrTPv0Pattpmuhd7tjzM2jU90Ty1V5BU84G8iP0ZPRV UTK73f5rL4jsTkygIA+S6Ga57do/EFNKpLyAv5gHwe0HPkG86FgdswBqZSv1e8Zug+MQxa aqZR6jT/jWPYqd2Oc1XsbAPB/vS65RA= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=owfEygAE; dmarc=none; spf=none (imf24.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1709057135; a=rsa-sha256; cv=none; b=qsM0vLoY9IxCb9X7+lbSZ+rNHIDBn3JKohK/DM7AMXfZP4LEVc1nt5RK569uehB9wUUAIm 5WkCt7XpM92ct/bCkGEYvJqsDNknxuXSLETEhG+Oi2gt4Yaj/6cjD0aWYTLkyGQtyT28ya laIHAZcEYCw0x09DRU9rYh+ukteE4nw= 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: Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:In-Reply-To:References; bh=KrIjq/ePaUaM0cPb48gB2ehE+Eqj59aqoAiCANeBsVk=; b=owfEygAE3I0ZvtX+hClVqbex+6 HZYuGE6wEFeXHk6rc8Dvoc6jVmFWKHrkqW/+z+EfjEpXMQHA2RyKHSMEwengTng901H/DipJvVbZQ xwPC5PlLcj70cx7BSDGoMTVk8VNMeX4yjmjQZesOJkXJF+xP1gNBpkYCUCl0We9l3c4TpRTsMWBYe X83KCG9JhUwHk+xWVxmgfmx5lVRWnwc+AEmOSKvFFxg1p2HpnqC8zMO0HspU954bauOjXxa/Anlis +9Hm1rh74ZCX06bZt11FzUzWPv4Uql7Xsn6eeZZNMNRRKj3oSx07pmC5PFrbpR44IliudNKSjYPvt WK+1+1/w==; Received: from willy by casper.infradead.org with local (Exim 4.97.1 #2 (Red Hat Linux)) id 1rf1pd-000000031fY-32B2; Tue, 27 Feb 2024 18:05:33 +0000 From: "Matthew Wilcox (Oracle)" To: Andrew Morton , linux-mm@kvack.org Cc: "Matthew Wilcox (Oracle)" Subject: [PATCH] mm: Use folio more widely in __split_huge_page Date: Tue, 27 Feb 2024 18:05:09 +0000 Message-ID: <20240227180532.721365-1-willy@infradead.org> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-Rspamd-Queue-Id: 50B18180034 X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: 1cqe98nc6ghb3ghjshuwuii14u9pk4yf X-HE-Tag: 1709057135-275387 X-HE-Meta: U2FsdGVkX18Iw5w0qGLIQ29QKxgBoHnltP88spY9m4MvbKOVx/4k3uxc2iM0K6DqiR/3YQXxY5ZOfEa2rvGyMxAKVyXzA14LewxOd25KV8e4nlXObA3b15PzT3qZUUvcAUPAqmQcY/rnFdLURNWhqHwnh3Z8JJUxWWgfzWOKr7smrSlz4pWjEOehxFBzYW1M+LvtZsCimCAfDDoA6KXVTiAHZqF9DUaZJY042w00KK2AEV+H5tfgVTLUoLDseu87DfwAjbOky0ssCbQZZFfkpQVmrgI1H4dWKu/L3NMFrhQ76GY6lhwLeGf9ZRxq0xuN2ZuDkFiflWQM5hiF6XXKvoB5E2g4aagLt/SEyviMiTTWcbaflcY7wU4qEs4ChLcBKdIlypQ34OV6oe+5B4iO2NCKVhLucT34V+zkP4r3k2VzgL0dyX3zRzE6VseqyW28pPBfi82nHLPP59pHZOPagfziWEYLKsjFS3xiF8GTLEVYdFjIbVq6YA12/6Yz7GqU9hW0YGWsJfTollj71KKa9PJmvmaEqvvC6cXWXzVSkjYIDrs93joO0XUj8CghHpG4vTdho8AsDoQnkq/EU1Cg6DcsMdCFwDUpb4uPrZHE0RC+BK+cPcpHYk785b/nF5liVZ3SGV1bzNElQ0+Xo5h+OHnd44pX4iO9DYN39Hin/GrKGMztkLPYQopK9qFS+ONeM0zvXYnAxSmH7ZFUDnR6tLnPIY/T8zQxcESS0iqg2B4GsFEsz3EBp84FGta9i61qrAaHGVI9d2fmxFz8XB/e5xd5gDqFD4/ZG/4YjdZpP4di1BgvkInkbnemruj24zxA0kTLQIM1rlg/WOpRv5UhQrR0Ftjb5Grzef+E46U8lQAzudnndIebEyABgxvz9bYVZmHuP+yx8WpvulAGIt2jPBQYbkVwZ/SL 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 already have a folio; use it instead of the head page where reasonable. Saves a couple of calls to compound_head() and elimimnates a few references to page->mapping. Signed-off-by: Matthew Wilcox (Oracle) Reviewed-by: Sidhartha Kumar --- mm/huge_memory.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 28341a5067fb..aeb6671f7c44 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -2884,7 +2884,7 @@ static void __split_huge_page(struct page *page, struct list_head *list, struct lruvec *lruvec; struct address_space *swap_cache = NULL; unsigned long offset = 0; - unsigned int nr = thp_nr_pages(head); + unsigned int nr = folio_nr_pages(folio); int i, nr_dropped = 0; /* complete memcg works before add pages to LRU */ @@ -2907,7 +2907,7 @@ static void __split_huge_page(struct page *page, struct list_head *list, if (head[i].index >= end) { struct folio *tail = page_folio(head + i); - if (shmem_mapping(head->mapping)) + if (shmem_mapping(folio->mapping)) nr_dropped++; else if (folio_test_clear_dirty(tail)) folio_account_cleaned(tail, @@ -2915,7 +2915,7 @@ static void __split_huge_page(struct page *page, struct list_head *list, __filemap_remove_folio(tail, NULL); folio_put(tail); } else if (!PageAnon(page)) { - __xa_store(&head->mapping->i_pages, head[i].index, + __xa_store(&folio->mapping->i_pages, head[i].index, head + i, 0); } else if (swap_cache) { __xa_store(&swap_cache->i_pages, offset + i, @@ -2930,23 +2930,23 @@ static void __split_huge_page(struct page *page, struct list_head *list, split_page_owner(head, nr); /* See comment in __split_huge_page_tail() */ - if (PageAnon(head)) { + if (folio_test_anon(folio)) { /* Additional pin to swap cache */ - if (PageSwapCache(head)) { - page_ref_add(head, 2); + if (folio_test_swapcache(folio)) { + folio_ref_add(folio, 2); xa_unlock(&swap_cache->i_pages); } else { - page_ref_inc(head); + folio_ref_inc(folio); } } else { /* Additional pin to page cache */ - page_ref_add(head, 2); - xa_unlock(&head->mapping->i_pages); + folio_ref_add(folio, 2); + xa_unlock(&folio->mapping->i_pages); } local_irq_enable(); if (nr_dropped) - shmem_uncharge(head->mapping->host, nr_dropped); + shmem_uncharge(folio->mapping->host, nr_dropped); remap_page(folio, nr); if (folio_test_swapcache(folio)) @@ -2954,9 +2954,10 @@ static void __split_huge_page(struct page *page, struct list_head *list, for (i = 0; i < nr; i++) { struct page *subpage = head + i; + struct folio *new_folio = page_folio(subpage); if (subpage == page) continue; - unlock_page(subpage); + folio_unlock(new_folio); /* * Subpages may be freed if there wasn't any mapping