[PATCH 0/6] shmem: high order folios support in write path

From: Daniel Gomez
Date: Fri Sep 15 2023 - 05:53:19 EST


This series add support for high order folios in shmem write
path.

This is a continuation of the shmem work from Luis here [1]
following Matthew Wilcox's suggestion [2] regarding the path to take
for the folio allocation order calculation.

[1] RFC v2 add support for blocksize > PAGE_SIZE
https://lore.kernel.org/all/ZHBowMEDfyrAAOWH@xxxxxxxxxxxxxxxxxxxxxx/T/#md3e93ab46ce2ad9254e1eb54ffe71211988b5632
[2] https://lore.kernel.org/all/ZHD9zmIeNXICDaRJ@xxxxxxxxxxxxxxxxxxxx/

Patches have been tested and sent from next-230911. They do apply
cleanly to the latest next-230914.

fsx and fstests has been performed on tmpfs with noswap with the
following results:
- fsx: 2d test, 21,5B
- fstests: Same result as baseline for next-230911 [3][4][5]

[3] Baseline next-230911 failures are: generic/080 generic/126
generic/193 generic/633 generic/689
[4] fstests logs baseline: https://gitlab.com/-/snippets/3598621
[5] fstests logs patches: https://gitlab.com/-/snippets/3598628

There are at least 2 cases/topics to handle that I'd appreciate
feedback.
1. With the new strategy, you might end up with a folio order matching
HPAGE_PMD_ORDER. However, we won't respect the 'huge' flag anymore if
THP is enabled.
2. When the above (1.) occurs, the code skips the huge path, so
xa_find with hindex is skipped.

Daniel

Daniel Gomez (5):
filemap: make the folio order calculation shareable
shmem: drop BLOCKS_PER_PAGE macro
shmem: add order parameter support to shmem_alloc_folio
shmem: add file length in shmem_get_folio path
shmem: add large folios support to the write path

Luis Chamberlain (1):
shmem: account for large order folios

fs/iomap/buffered-io.c | 6 ++-
include/linux/pagemap.h | 42 ++++++++++++++++---
include/linux/shmem_fs.h | 2 +-
mm/filemap.c | 8 ----
mm/khugepaged.c | 2 +-
mm/shmem.c | 91 +++++++++++++++++++++++++---------------
6 files changed, 100 insertions(+), 51 deletions(-)

--
2.39.2