Gavin Shan
06b5a69c27
mm/filemap: skip to create PMD-sized page cache if needed
...
commit 3390916aca7af1893ed2ebcdfee1d6fdb65bb058 upstream.
On ARM64, HPAGE_PMD_ORDER is 13 when the base page size is 64KB. The
PMD-sized page cache can't be supported by xarray as the following error
messages indicate.
------------[ cut here ]------------
WARNING: CPU: 35 PID: 7484 at lib/xarray.c:1025 xas_split_alloc+0xf8/0x128
Modules linked in: nft_fib_inet nft_fib_ipv4 nft_fib_ipv6 nft_fib \
nft_reject_inet nf_reject_ipv4 nf_reject_ipv6 nft_reject nft_ct \
nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 \
ip_set rfkill nf_tables nfnetlink vfat fat virtio_balloon drm \
fuse xfs libcrc32c crct10dif_ce ghash_ce sha2_ce sha256_arm64 \
sha1_ce virtio_net net_failover virtio_console virtio_blk failover \
dimlib virtio_mmio
CPU: 35 PID: 7484 Comm: test Kdump: loaded Tainted: G W 6.10.0-rc5-gavin+ #9
Hardware name: QEMU KVM Virtual Machine, BIOS edk2-20240524-1.el9 05/24/2024
pstate: 83400005 (Nzcv daif +PAN -UAO +TCO +DIT -SSBS BTYPE=--)
pc : xas_split_alloc+0xf8/0x128
lr : split_huge_page_to_list_to_order+0x1c4/0x720
sp : ffff800087a4f6c0
x29: ffff800087a4f6c0 x28: ffff800087a4f720 x27: 000000001fffffff
x26: 0000000000000c40 x25: 000000000000000d x24: ffff00010625b858
x23: ffff800087a4f720 x22: ffffffdfc0780000 x21: 0000000000000000
x20: 0000000000000000 x19: ffffffdfc0780000 x18: 000000001ff40000
x17: 00000000ffffffff x16: 0000018000000000 x15: 51ec004000000000
x14: 0000e00000000000 x13: 0000000000002000 x12: 0000000000000020
x11: 51ec000000000000 x10: 51ece1c0ffff8000 x9 : ffffbeb961a44d28
x8 : 0000000000000003 x7 : ffffffdfc0456420 x6 : ffff0000e1aa6eb8
x5 : 20bf08b4fe778fca x4 : ffffffdfc0456420 x3 : 0000000000000c40
x2 : 000000000000000d x1 : 000000000000000c x0 : 0000000000000000
Call trace:
xas_split_alloc+0xf8/0x128
split_huge_page_to_list_to_order+0x1c4/0x720
truncate_inode_partial_folio+0xdc/0x160
truncate_inode_pages_range+0x1b4/0x4a8
truncate_pagecache_range+0x84/0xa0
xfs_flush_unmap_range+0x70/0x90 [xfs]
xfs_file_fallocate+0xfc/0x4d8 [xfs]
vfs_fallocate+0x124/0x2e8
ksys_fallocate+0x4c/0xa0
__arm64_sys_fallocate+0x24/0x38
invoke_syscall.constprop.0+0x7c/0xd8
do_el0_svc+0xb4/0xd0
el0_svc+0x44/0x1d8
el0t_64_sync_handler+0x134/0x150
el0t_64_sync+0x17c/0x180
Fix it by skipping to allocate PMD-sized page cache when its size is
larger than MAX_PAGECACHE_ORDER. For this specific case, we will fall to
regular path where the readahead window is determined by BDI's sysfs file
(read_ahead_kb).
Link: https://lkml.kernel.org/r/20240627003953.1262512-4-gshan@redhat.com
Fixes: 4687fdbb805a ("mm/filemap: Support VM_HUGEPAGE for file mappings")
Signed-off-by: Gavin Shan <gshan@redhat.com>
Suggested-by: David Hildenbrand <david@redhat.com>
Acked-by: David Hildenbrand <david@redhat.com>
Cc: Darrick J. Wong <djwong@kernel.org>
Cc: Don Dutile <ddutile@redhat.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: William Kucharski <william.kucharski@oracle.com>
Cc: Zhenyu Zhang <zhenyzha@redhat.com>
Cc: <stable@vger.kernel.org> [5.18+]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-07-18 13:21:20 +02:00
..
2024-06-12 11:12:52 +02:00
2024-04-03 15:28:20 +02:00
2023-09-08 12:16:52 -07:00
2024-06-16 13:47:41 +02:00
2024-02-23 09:25:16 +01:00
2023-03-28 16:20:06 -07:00
2024-06-16 13:47:42 +02:00
2024-05-02 16:32:41 +02:00
2023-06-09 16:25:23 -07:00
2024-03-06 14:48:41 +00:00
2023-06-09 16:25:31 -07:00
2023-04-05 19:42:38 -07:00
2023-06-09 16:25:17 -07:00
2023-06-09 16:25:56 -07:00
2023-06-23 16:59:31 -07:00
2023-06-09 16:25:23 -07:00
2024-07-18 13:21:20 +02:00
2023-07-24 18:04:30 -04:00
2023-06-23 16:58:19 -07:00
2024-05-02 16:32:40 +02:00
2023-06-19 16:19:25 -07:00
2023-08-21 13:07:20 -07:00
2024-06-16 13:47:40 +02:00
2023-02-13 15:54:27 -08:00
2023-08-18 10:12:14 -07:00
2024-06-16 13:47:42 +02:00
2023-08-21 13:37:46 -07:00
2024-05-02 16:32:40 +02:00
2023-08-18 10:12:36 -07:00
2023-08-29 14:25:26 -07:00
2023-05-29 16:14:28 +01:00
2023-08-29 14:25:26 -07:00
2023-09-02 15:17:34 -07:00
2024-06-16 13:47:41 +02:00
2023-04-12 17:36:23 -07:00
2024-05-02 16:32:40 +02:00
2023-08-29 14:25:26 -07:00
2023-08-24 16:20:30 -07:00
2024-03-01 13:35:06 +01:00
2024-03-01 13:35:00 +01:00
2023-09-05 11:11:52 -07:00
2024-01-20 11:51:49 +01:00
2024-06-21 14:38:46 +02:00
2023-08-18 10:12:38 -07:00
2024-04-10 16:36:03 +02:00
2023-11-20 11:58:51 +01:00
2023-02-09 16:51:46 -08:00
2024-04-03 15:28:33 +02:00
2023-08-31 12:20:12 -07:00
2024-03-15 10:48:14 -04:00
2023-08-21 13:07:20 -07:00
2023-08-21 14:26:20 -07:00
2024-01-31 16:18:56 -08:00
2024-04-03 15:28:40 +02:00
2023-08-24 16:20:30 -07:00
2023-08-18 10:12:41 -07:00
2023-08-31 12:20:12 -07:00
2023-09-16 15:23:31 -07:00
2023-08-31 12:20:12 -07:00
2023-08-21 13:37:44 -07:00
2024-07-05 09:34:05 +02:00
2023-08-18 10:12:31 -07:00
2023-01-18 17:12:52 -08:00
2023-08-21 13:37:27 -07:00
2023-08-18 10:12:39 -07:00
2023-08-21 13:37:27 -07:00
2023-08-21 13:37:30 -07:00
2024-05-02 16:32:41 +02:00
2024-06-27 13:49:13 +02:00
2023-08-18 10:12:13 -07:00
2024-07-11 12:49:16 +02:00
2023-09-02 08:39:21 -07:00
2023-06-19 16:19:29 -07:00
2024-02-16 19:10:52 +01:00
2024-06-16 13:47:40 +02:00
2023-06-09 16:25:25 -07:00
2023-06-19 16:19:24 -07:00
2024-05-17 12:02:36 +02:00
2023-09-29 17:20:47 -07:00
2023-08-21 13:38:02 -07:00
2024-04-03 15:28:54 +02:00
2024-04-27 17:11:42 +02:00
2024-05-02 16:32:41 +02:00
2023-06-19 13:19:34 -07:00
2023-04-05 19:42:46 -07:00
2023-10-11 15:24:49 +02:00
2023-07-18 10:07:47 +02:00
2023-07-18 10:07:47 +02:00
2023-07-14 09:57:21 +02:00
2023-08-18 10:12:53 -07:00
2024-01-31 16:18:56 -08:00
2023-08-24 16:20:28 -07:00
2023-06-23 16:59:30 -07:00
2024-03-01 13:35:00 +01:00
2024-04-03 15:28:27 +02:00
2023-08-29 14:25:26 -07:00
2023-04-12 17:36:23 -07:00
2024-06-12 11:11:33 +02:00
2023-11-28 17:20:08 +00:00
2024-07-18 13:21:20 +02:00
2023-08-16 12:21:32 +01:00
2024-04-03 15:28:44 +02:00
2024-05-02 16:32:41 +02:00
2024-06-16 13:47:31 +02:00
2023-08-21 13:37:51 -07:00
2023-06-19 16:19:27 -07:00
2023-06-19 16:19:27 -07:00
2023-08-21 14:26:20 -07:00
2024-03-01 13:35:10 +01:00