diff options
author | David Howells <dhowells@redhat.com> | 2023-09-29 21:11:31 +0200 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2023-12-28 10:45:23 +0100 |
commit | e2e2e83924b1fe4c28bf5617db90e893755e9cbd (patch) | |
tree | 4442e8fbe8ebdb7d8949d10cad9cac910124acaf /fs | |
parent | netfs: Make netfs_read_folio() handle streaming-write pages (diff) | |
download | linux-e2e2e83924b1fe4c28bf5617db90e893755e9cbd.tar.xz linux-e2e2e83924b1fe4c28bf5617db90e893755e9cbd.zip |
netfs: Allocate multipage folios in the writepath
Allocate a multipage folio when copying data into the pagecache if possible
if there's sufficient data to warrant it.
Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
cc: linux-cachefs@redhat.com
cc: linux-fsdevel@vger.kernel.org
cc: linux-mm@kvack.org
Diffstat (limited to 'fs')
-rw-r--r-- | fs/netfs/buffered_write.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/netfs/buffered_write.c b/fs/netfs/buffered_write.c index 6e7f06d9962d..b76688e98f81 100644 --- a/fs/netfs/buffered_write.c +++ b/fs/netfs/buffered_write.c @@ -84,14 +84,19 @@ static enum netfs_how_to_modify netfs_how_to_modify(struct netfs_inode *ctx, } /* - * Grab a folio for writing and lock it. + * Grab a folio for writing and lock it. Attempt to allocate as large a folio + * as possible to hold as much of the remaining length as possible in one go. */ static struct folio *netfs_grab_folio_for_write(struct address_space *mapping, loff_t pos, size_t part) { pgoff_t index = pos / PAGE_SIZE; + fgf_t fgp_flags = FGP_WRITEBEGIN; - return __filemap_get_folio(mapping, index, FGP_WRITEBEGIN, + if (mapping_large_folio_support(mapping)) + fgp_flags |= fgf_set_order(pos % PAGE_SIZE + part); + + return __filemap_get_folio(mapping, index, fgp_flags, mapping_gfp_mask(mapping)); } |