From mboxrd@z Thu Jan 1 00:00:00 1970 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 7DF1DC46467 for ; Mon, 16 Jan 2023 19:29:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1FABD6B0071; Mon, 16 Jan 2023 14:29:51 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 1AABB6B0072; Mon, 16 Jan 2023 14:29:51 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 09A126B0073; Mon, 16 Jan 2023 14:29:51 -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 EF4C76B0071 for ; Mon, 16 Jan 2023 14:29:50 -0500 (EST) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id C2818160758 for ; Mon, 16 Jan 2023 19:29:50 +0000 (UTC) X-FDA: 80361652140.27.294F6DD Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf05.hostedemail.com (Postfix) with ESMTP id 33EFD10000E for ; Mon, 16 Jan 2023 19:29:48 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=NFRK3wSI; spf=none (imf05.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=1673897389; 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=HIIf2CZ9VabOIowEuMs4c7C4b5yQwgD1q3aDq8LJ+zg=; b=Ro8XxFhhdKLkE/OAX+EoLrFLRS2gGCuB+0BbGfgzJr4xOxvTscfFXindh02Lcqmgg/3Vri gd2XAFy7JKJY5XLXmDw+BPtApWf6gtxoZVSWMiV0meiST1Njz9bsIePgPexmgkKFGlyBeP KtpIAdKcnAeILrWCt0ZW4GImohgvmtY= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=NFRK3wSI; spf=none (imf05.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-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1673897389; a=rsa-sha256; cv=none; b=r4I9gwKL/2Jql22DPIViQYqXDuQCqWgArNgvAuHE4orvH/+C13Q5q/dMFEMY6pFdisLga+ SnXMxxoB0DPEmaAoDFD0oGtzc/uftmstEGPzUyS733esxFB8O3a+CyIym88x7wo+NugLC5 iaEA1SPJ6xvh68rETPD539X1qGCNAX0= 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=HIIf2CZ9VabOIowEuMs4c7C4b5yQwgD1q3aDq8LJ+zg=; b=NFRK3wSIxnaOh31GOQzequ6MGO PCVGY4k1M6lm2Guye4XZs99gBph5206gmZxazONHwucsSYYfnguVZIWUGWvCXqZJ+EC23EIRcIaRB hKYPFAw2o336JNMjyZGH87+PEiGGG1AFsqRETZq8CxXknCGqNWwdCfBqYxLFAWAeQLARL5jnYZvyF sinoK7tM4wE+KUVODVEXqDk3mT0VK3n5Hct5Rnoqy5AIEU3k5KqSVzSlLJO4tW+yJ98/iQ0+ayZew ty5t8Wp9cm5Oag3cRKvFdniXSaeg7NoAGgbfWpHu9KGXCiU/+BDN04JRbAMfBHmE5soFpPUcnFRyO bofXbLRg==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1pHVBA-0090YE-Ux; Mon, 16 Jan 2023 19:30:01 +0000 From: "Matthew Wilcox (Oracle)" To: Andrew Morton Cc: "Matthew Wilcox (Oracle)" , linux-mm@kvack.org Subject: [PATCH] rmap: Add folio parameter to __page_set_anon_rmap() Date: Mon, 16 Jan 2023 19:29:59 +0000 Message-Id: <20230116192959.2147032-1-willy@infradead.org> X-Mailer: git-send-email 2.37.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 33EFD10000E X-Rspam-User: X-Stat-Signature: y1btwkw3jgzuxxznpmqd9txpta5mn4d4 X-HE-Tag: 1673897388-58130 X-HE-Meta: U2FsdGVkX190QyWVGYhDO1lRPYt8gNZh0Fcy8HQCiWkUL2o5yKP8mqu5+i5qKEL4r58QS1+B6BzHSjhNb+HeqK/zqegV/cMpoR1kVN6Nh98Q4fuC2syDcBTH1VId1H2S39OUdur7BgCaRMDyv52zTRw2eRBH8cRLmnqb3e7kBysxm533DXyltrNcRPcU6O4xEruNxqB0ASnDucm68BH9tdP9lHRaQoYOaIZDDYOXGuoQ8/uXWYzR08WJE5VG1eJ49BKTlK+60RcHZPDGd9/tRDuJVqat1ai+3T/EQdw0o8EtvuQGrcwPwP5oLcea2B1rASzBDTitAnH8sdgFi7k9toFi0TRLs52YWp0XGdVW63tlmCC6uQurY6snqzHypxY9aTXPLd2LoxjcLZtTyP1denpd6amv43KhfNxhuGxl1Dv7vVOEQB+yb7YlM0WMw7WWMmMG4pTA43vJdw3d6L7o1U1RyeGh6FAWK/3+p+PYlTfe83lKl6CILF3In9FI4+sMPW5DxMcDpDOYf7MzUOKj5IlurAXLU6ezAG5FOTMuVTxct5pBGC1oKR0sOCgyEf45tRtJnY8Q1CSzmr4MDov+C6Wi0KlgHPMlEbMOIgUNUFHAL8kRrj7jUHbPCDvIRD/rC+Htvs6aI0CQJN2JZ4ftjroAkgFIyBRyrBHKq5BmE5c9P4zrldSh6hEZ6aEy/Mcfo42QZu29ic7IIJzrEo4N4PTpNW/qcKSf79ON798fXzQrvijnGqd/b1h4nInXaGSG/fNAe7WS3bwyaPgn3D5LFp0Ti7ZZ7vD+3bvyhfI5yK9kqSEVn/Q0+fdIlcM57GR99Nr4NksVFFY1LWPAy8vOsbqSL4E0H5OOsMSKEwSJaSeB8TVf2jg2hYpvJsrUw0SdIv/yTaBp04tgYer0o6AnNA6Cr0P2cUBcmU9kTANblD5sNKKL0O9htg== 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: Avoid the compound_head() call in PageAnon() by passing in the folio that all callers have. Also save me from wondering whether page->mapping can ever be overwritten on a tail page (I don't think it can, but I'm not 100% sure). Signed-off-by: Matthew Wilcox (Oracle) --- mm/rmap.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/mm/rmap.c b/mm/rmap.c index b26fbbcc9257..ab2246e6f20a 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -1131,19 +1131,20 @@ void page_move_anon_rmap(struct page *page, struct vm_area_struct *vma) /** * __page_set_anon_rmap - set up new anonymous rmap - * @page: Page or Hugepage to add to rmap + * @folio: Folio which contains page. + * @page: Page to add to rmap. * @vma: VM area to add page to. * @address: User virtual address of the mapping * @exclusive: the page is exclusively owned by the current process */ -static void __page_set_anon_rmap(struct page *page, +static void __page_set_anon_rmap(struct folio *folio, struct page *page, struct vm_area_struct *vma, unsigned long address, int exclusive) { struct anon_vma *anon_vma = vma->anon_vma; BUG_ON(!anon_vma); - if (PageAnon(page)) + if (folio_test_anon(folio)) goto out; /* @@ -1155,14 +1156,14 @@ static void __page_set_anon_rmap(struct page *page, anon_vma = anon_vma->root; /* - * page_idle does a lockless/optimistic rmap scan on page->mapping. + * page_idle does a lockless/optimistic rmap scan on folio->mapping. * Make sure the compiler doesn't split the stores of anon_vma and * the PAGE_MAPPING_ANON type identifier, otherwise the rmap code * could mistake the mapping for a struct address_space and crash. */ anon_vma = (void *) anon_vma + PAGE_MAPPING_ANON; - WRITE_ONCE(page->mapping, (struct address_space *) anon_vma); - page->index = linear_page_index(vma, address); + WRITE_ONCE(folio->mapping, (struct address_space *) anon_vma); + folio->index = linear_page_index(vma, address); out: if (exclusive) SetPageAnonExclusive(page); @@ -1254,7 +1255,7 @@ void page_add_anon_rmap(struct page *page, struct vm_area_struct *vma, if (likely(!folio_test_ksm(folio))) { /* address might be in next vma when migration races vma_adjust */ if (first) - __page_set_anon_rmap(page, vma, address, + __page_set_anon_rmap(folio, page, vma, address, !!(flags & RMAP_EXCLUSIVE)); else __page_check_anon_rmap(page, vma, address); @@ -1297,7 +1298,7 @@ void folio_add_new_anon_rmap(struct folio *folio, struct vm_area_struct *vma, } __lruvec_stat_mod_folio(folio, NR_ANON_MAPPED, nr); - __page_set_anon_rmap(&folio->page, vma, address, 1); + __page_set_anon_rmap(folio, &folio->page, vma, address, 1); } /** @@ -2542,7 +2543,7 @@ void hugepage_add_anon_rmap(struct page *page, struct vm_area_struct *vma, VM_BUG_ON_PAGE(!first && (flags & RMAP_EXCLUSIVE), page); VM_BUG_ON_PAGE(!first && PageAnonExclusive(page), page); if (first) - __page_set_anon_rmap(page, vma, address, + __page_set_anon_rmap(folio, page, vma, address, !!(flags & RMAP_EXCLUSIVE)); } @@ -2555,6 +2556,6 @@ void hugepage_add_new_anon_rmap(struct page *page, /* increment count (starts at -1) */ atomic_set(&folio->_entire_mapcount, 0); folio_clear_hugetlb_restore_reserve(folio); - __page_set_anon_rmap(page, vma, address, 1); + __page_set_anon_rmap(folio, page, vma, address, 1); } #endif /* CONFIG_HUGETLB_PAGE */ -- 2.35.1