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 X-Spam-Level: X-Spam-Status: No, score=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5367AC4361B for ; Wed, 16 Dec 2020 18:47:00 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id C8E0B233FE for ; Wed, 16 Dec 2020 18:46:59 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C8E0B233FE Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 5F9AA8D0005; Wed, 16 Dec 2020 13:46:59 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 584F18D0002; Wed, 16 Dec 2020 13:46:59 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 386F88D0005; Wed, 16 Dec 2020 13:46:59 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0183.hostedemail.com [216.40.44.183]) by kanga.kvack.org (Postfix) with ESMTP id 1AC8B8D0002 for ; Wed, 16 Dec 2020 13:46:59 -0500 (EST) Received: from smtpin24.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id D56C0824999B for ; Wed, 16 Dec 2020 18:46:58 +0000 (UTC) X-FDA: 77600027316.24.grape07_54030402742e Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin24.hostedemail.com (Postfix) with ESMTP id B60C61A4A0 for ; Wed, 16 Dec 2020 18:46:58 +0000 (UTC) X-HE-Tag: grape07_54030402742e X-Filterd-Recvd-Size: 9227 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf14.hostedemail.com (Postfix) with ESMTP for ; Wed, 16 Dec 2020 18:46:58 +0000 (UTC) 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=RO/BuKa7UlTykAgrNcwGk1HeYTiXH3dtFW90nMZoh8o=; b=VRP6TyoyCleiTSotfMCR/lnRV3 06+f756XjVFFDC+VzfRfKkdx7BqU207EOf2VCd8ZL0Eq2Puq18LiMrsaqTYeisdcYEJjRBSPv3HB6 H0p75ynmpXFvVp005wmiPdz7ppv8rISiTO3p8gYawrljpyZWaIo1WwGAFZ15QG83FbE9/m0TZLUR/ PCTc4a8Y0BIIWfeB1fOcgro23h25YsnBz6pu0+CxsVubnnXujsXI2ejBhZNOGcDDUMieyhaH/3Vvq CUoQxj78uSvRxnbUChziLT2AodP/ikaDKdUodIRCjM146pinZ0VDEBIOlbDfxam9PTtBfRtjEp7Ov UBKBvsJg==; Received: from willy by casper.infradead.org with local (Exim 4.92.3 #3 (Red Hat Linux)) id 1kpbSd-00076n-Dp; Wed, 16 Dec 2020 18:23:39 +0000 From: "Matthew Wilcox (Oracle)" To: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org Cc: "Matthew Wilcox (Oracle)" , linux-kernel@vger.kernel.org Subject: [PATCH 09/25] mm: Convert __page_cache_alloc to return a folio Date: Wed, 16 Dec 2020 18:23:19 +0000 Message-Id: <20201216182335.27227-10-willy@infradead.org> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201216182335.27227-1-willy@infradead.org> References: <20201216182335.27227-1-willy@infradead.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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: Most of the users turn it back into a struct page pointer, but some can make use of it as a folio immediately. Signed-off-by: Matthew Wilcox (Oracle) --- fs/afs/dir.c | 2 +- fs/btrfs/compression.c | 4 ++-- fs/cachefiles/rdwr.c | 6 ++++-- fs/ceph/addr.c | 2 +- fs/ceph/file.c | 2 +- include/linux/pagemap.h | 8 ++++---- mm/filemap.c | 16 ++++++++-------- mm/readahead.c | 2 +- net/ceph/pagelist.c | 4 ++-- net/ceph/pagevec.c | 2 +- 10 files changed, 25 insertions(+), 23 deletions(-) diff --git a/fs/afs/dir.c b/fs/afs/dir.c index 9068d5578a26..52e9da468787 100644 --- a/fs/afs/dir.c +++ b/fs/afs/dir.c @@ -272,7 +272,7 @@ static struct afs_read *afs_read_dir(struct afs_vnode= *dvnode, struct key *key) afs_stat_v(dvnode, n_inval); =20 ret =3D -ENOMEM; - req->pages[i] =3D __page_cache_alloc(gfp); + req->pages[i] =3D &__page_cache_alloc(gfp, 0)->page; if (!req->pages[i]) goto error; ret =3D add_to_page_cache_lru(req->pages[i], diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c index 5ae3fa0386b7..3309a973b678 100644 --- a/fs/btrfs/compression.c +++ b/fs/btrfs/compression.c @@ -532,8 +532,8 @@ static noinline int add_ra_bio_pages(struct inode *in= ode, goto next; } =20 - page =3D __page_cache_alloc(mapping_gfp_constraint(mapping, - ~__GFP_FS)); + page =3D &__page_cache_alloc(mapping_gfp_constraint(mapping, + ~__GFP_FS), 0)->page; if (!page) break; =20 diff --git a/fs/cachefiles/rdwr.c b/fs/cachefiles/rdwr.c index 8bda092e60c5..268fbcac4afb 100644 --- a/fs/cachefiles/rdwr.c +++ b/fs/cachefiles/rdwr.c @@ -260,7 +260,7 @@ static int cachefiles_read_backing_file_one(struct ca= chefiles_object *object, goto backing_page_already_present; =20 if (!newpage) { - newpage =3D __page_cache_alloc(cachefiles_gfp); + newpage =3D &__page_cache_alloc(cachefiles_gfp, 0)->page; if (!newpage) goto nomem_monitor; } @@ -497,7 +497,9 @@ static int cachefiles_read_backing_file(struct cachef= iles_object *object, goto backing_page_already_present; =20 if (!newpage) { - newpage =3D __page_cache_alloc(cachefiles_gfp); + struct folio *folio; + folio =3D __page_cache_alloc(cachefiles_gfp, 0); + newpage =3D &folio->page; if (!newpage) goto nomem; } diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index 950552944436..5b2873b12904 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c @@ -1760,7 +1760,7 @@ int ceph_uninline_data(struct file *filp, struct pa= ge *locked_page) if (len > PAGE_SIZE) len =3D PAGE_SIZE; } else { - page =3D __page_cache_alloc(GFP_NOFS); + page =3D &__page_cache_alloc(GFP_NOFS, 0)->page; if (!page) { err =3D -ENOMEM; goto out; diff --git a/fs/ceph/file.c b/fs/ceph/file.c index 209535d5b8d3..f8e1482ea7c1 100644 --- a/fs/ceph/file.c +++ b/fs/ceph/file.c @@ -1587,7 +1587,7 @@ static ssize_t ceph_read_iter(struct kiocb *iocb, s= truct iov_iter *to) struct page *page =3D NULL; loff_t i_size; if (retry_op =3D=3D READ_INLINE) { - page =3D __page_cache_alloc(GFP_KERNEL); + page =3D &__page_cache_alloc(GFP_KERNEL, 0)->page; if (!page) return -ENOMEM; } diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index 5acebbb75d41..317f17e98412 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -282,17 +282,17 @@ static inline void *detach_page_private(struct page= *page) } =20 #ifdef CONFIG_NUMA -extern struct page *__page_cache_alloc(gfp_t gfp); +extern struct folio *__page_cache_alloc(gfp_t gfp, unsigned int order); #else -static inline struct page *__page_cache_alloc(gfp_t gfp) +static inline struct folio *__page_cache_alloc(gfp_t gfp, unsigned int o= rder) { - return alloc_pages(gfp, 0); + return alloc_folio(gfp, order); } #endif =20 static inline struct page *page_cache_alloc(struct address_space *x) { - return __page_cache_alloc(mapping_gfp_mask(x)); + return &__page_cache_alloc(mapping_gfp_mask(x), 0)->page; } =20 static inline gfp_t readahead_gfp_mask(struct address_space *x) diff --git a/mm/filemap.c b/mm/filemap.c index dd26b50e3676..6012e8a7bd6c 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -960,22 +960,22 @@ int add_to_page_cache_lru(struct page *page, struct= address_space *mapping, EXPORT_SYMBOL_GPL(add_to_page_cache_lru); =20 #ifdef CONFIG_NUMA -struct page *__page_cache_alloc(gfp_t gfp) +struct folio *__page_cache_alloc(gfp_t gfp, unsigned int order) { int n; - struct page *page; + struct folio *folio; =20 if (cpuset_do_page_mem_spread()) { unsigned int cpuset_mems_cookie; do { cpuset_mems_cookie =3D read_mems_allowed_begin(); n =3D cpuset_mem_spread_node(); - page =3D __alloc_pages_node(n, gfp, 0); - } while (!page && read_mems_allowed_retry(cpuset_mems_cookie)); + folio =3D __alloc_folio_node(n, gfp, order); + } while (!folio && read_mems_allowed_retry(cpuset_mems_cookie)); =20 - return page; + return folio; } - return alloc_pages(gfp, 0); + return alloc_folio(gfp, order); } EXPORT_SYMBOL(__page_cache_alloc); #endif @@ -1801,7 +1801,7 @@ struct page *pagecache_get_page(struct address_spac= e *mapping, pgoff_t index, if (fgp_flags & FGP_NOFS) gfp_mask &=3D ~__GFP_FS; =20 - page =3D __page_cache_alloc(gfp_mask); + page =3D &__page_cache_alloc(gfp_mask, 0)->page; if (!page) return NULL; =20 @@ -3192,7 +3192,7 @@ static struct page *do_read_cache_page(struct addre= ss_space *mapping, repeat: page =3D find_get_page(mapping, index); if (!page) { - page =3D __page_cache_alloc(gfp); + page =3D &__page_cache_alloc(gfp, 0)->page; if (!page) return ERR_PTR(-ENOMEM); err =3D add_to_page_cache_lru(page, mapping, index, gfp); diff --git a/mm/readahead.c b/mm/readahead.c index c5b0457415be..d7a5424e3d0d 100644 --- a/mm/readahead.c +++ b/mm/readahead.c @@ -213,7 +213,7 @@ void page_cache_ra_unbounded(struct readahead_control= *ractl, continue; } =20 - page =3D __page_cache_alloc(gfp_mask); + page =3D &__page_cache_alloc(gfp_mask, 0)->page; if (!page) break; if (mapping->a_ops->readpages) { diff --git a/net/ceph/pagelist.c b/net/ceph/pagelist.c index 65e34f78b05d..bde78f5eea33 100644 --- a/net/ceph/pagelist.c +++ b/net/ceph/pagelist.c @@ -56,7 +56,7 @@ static int ceph_pagelist_addpage(struct ceph_pagelist *= pl) struct page *page; =20 if (!pl->num_pages_free) { - page =3D __page_cache_alloc(GFP_NOFS); + page =3D &__page_cache_alloc(GFP_NOFS, 0)->page; } else { page =3D list_first_entry(&pl->free_list, struct page, lru); list_del(&page->lru); @@ -107,7 +107,7 @@ int ceph_pagelist_reserve(struct ceph_pagelist *pl, s= ize_t space) space =3D (space + PAGE_SIZE - 1) >> PAGE_SHIFT; /* conv to num pages= */ =20 while (space > pl->num_pages_free) { - struct page *page =3D __page_cache_alloc(GFP_NOFS); + struct page *page =3D &__page_cache_alloc(GFP_NOFS, 0)->page; if (!page) return -ENOMEM; list_add_tail(&page->lru, &pl->free_list); diff --git a/net/ceph/pagevec.c b/net/ceph/pagevec.c index 64305e7056a1..8e5f70b8fa10 100644 --- a/net/ceph/pagevec.c +++ b/net/ceph/pagevec.c @@ -45,7 +45,7 @@ struct page **ceph_alloc_page_vector(int num_pages, gfp= _t flags) if (!pages) return ERR_PTR(-ENOMEM); for (i =3D 0; i < num_pages; i++) { - pages[i] =3D __page_cache_alloc(flags); + pages[i] =3D &__page_cache_alloc(flags, 0)->page; if (pages[i] =3D=3D NULL) { ceph_release_page_vector(pages, i); return ERR_PTR(-ENOMEM); --=20 2.29.2