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