| From: Kefeng Wang <wangkefeng.wang@huawei.com> |
| Subject: tmpfs: don't enable large folios if not supported |
| Date: Thu, 17 Oct 2024 22:17:42 +0800 |
| |
| tmpfs can support large folios, but there are some configurable options |
| (mount options and runtime deny/force) to enable/disable large folio |
| allocation, so there is a performance issue when performing writes without |
| large folios. The issue is similar to commit 4e527d5841e2 ("iomap: fault |
| in smaller chunks for non-large folio mappings"). |
| |
| Since 'deny' is for emergencies and 'force' is for testing, performance |
| issues should not be a problem in real production environments, so don't |
| call mapping_set_large_folios() in __shmem_get_inode() when large folio is |
| disabled with mount huge=never option (default policy). |
| |
| Link: https://lkml.kernel.org/r/20241017141742.1169404-1-wangkefeng.wang@huawei.com |
| Fixes: 9aac777aaf94 ("filemap: Convert generic_perform_write() to support large folios") |
| Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> |
| Cc: Alexander Viro <viro@zeniv.linux.org.uk> |
| Cc: Baolin Wang <baolin.wang@linux.alibaba.com> |
| Cc: Christian Brauner <brauner@kernel.org> |
| Cc: David Hildenbrand <david@redhat.com> |
| Cc: Hugh Dickins <hughd@google.com> |
| Cc: Jan Kara <jack@suse.cz> |
| Cc: Matthew Wilcox <willy@infradead.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| mm/shmem.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| --- a/mm/shmem.c~tmpfs-dont-enable-large-folios-if-not-supported |
| +++ a/mm/shmem.c |
| @@ -2842,7 +2842,10 @@ static struct inode *__shmem_get_inode(s |
| cache_no_acl(inode); |
| if (sbinfo->noswap) |
| mapping_set_unevictable(inode->i_mapping); |
| - mapping_set_large_folios(inode->i_mapping); |
| + |
| + /* Don't consider 'deny' for emergencies and 'force' for testing */ |
| + if (sbinfo->huge) |
| + mapping_set_large_folios(inode->i_mapping); |
| |
| switch (mode & S_IFMT) { |
| default: |
| _ |