shmem folio changes have broken linux-next

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Matthew,

Our CI is reporting an oops during boot on linux-next (next-20240806) on arm64. Bisect tells me that it is due to your commit cdc4ad36a871b ("fs: Convert aops->write_begin to take a folio"), but there is no link to a mail thread on the patch and I can't find it in lore.

Anyway, I believe the issue is that you are doing this in shmem_write_begin():

  if (folio_test_has_hwpoisoned(folio)) {

But folio could be small and I think that function is only safe for large folios? (AFAICT it is unconditionally looking at the flags in the second page?).

Elsewhere in the file, this pattern is used:

  if (folio_test_hwpoison(folio) ||
      (folio_test_large(folio) && folio_test_has_hwpoisoned(folio))) {


Here is the oops (pretty much as soon as we get into user space):

[    0.623253] page: refcount:3 mapcount:0 mapping:00000000eebcb8cf index:0x0 pfn:0x18cc07
[    0.624212] memcg:ffff000142023000
[    0.624617] aops:shmem_aops ino:800 dentry name:"memfd:snapd-env-generator"
[    0.625444] flags: 0xbfffe0000040005(locked|referenced|swapbacked|node=0|zone=2|lastcpupid=0x1ffff)
[    0.626532] raw: 0bfffe0000040005 0000000000000000 dead000000000122 ffff000181dd0ac0
[    0.627442] raw: 0000000000000000 0000000000000000 00000003ffffffff ffff000142023000
[    0.628331] page dumped because: VM_BUG_ON_PAGE(n > 0 && !((__builtin_constant_p(PG_head) && __builtin_constant_p((uintptr_t)(&page->flags) != (uintptr_t)((void *)0)) && (uintptr_t)(&page->flags) != (uintptr_t)((void *)0) && __builtin_constant_p(*(const unsigned long *)(&page->flags))) ? const_test_bit(PG_head, &page->flags) : generic_test_bit(PG_head, &page->flags)))
[    0.632106] ------------[ cut here ]------------
[    0.632630] kernel BUG at include/linux/page-flags.h:308!
[    0.633269] Internal error: Oops - BUG: 00000000f2000800 [#1] PREEMPT SMP
[    0.634046] Modules linked in:
[    0.634412] CPU: 2 UID: 0 PID: 109 Comm: snapd-env-gener Not tainted 6.10.0-12082-gcdc4ad36a871 #11
[    0.635523] Hardware name: linux,dummy-virt (DT)
[    0.636117] pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[    0.636994] pc : const_folio_flags+0x60/0x70
[    0.637520] lr : const_folio_flags+0x60/0x70
[    0.638066] sp : ffff80008389bbf0
[    0.638487] x29: ffff80008389bbf0 x28: ffffba16d28a6540 x27: 000000000000004c
[    0.639383] x26: ffff000181b4c500 x25: 0000000000000000 x24: 0000000000000000
[    0.640252] x23: 0000000000200000 x22: ffff80008389bd60 x21: fffffdffc53301c0
[    0.641278] x20: ffff80008389bcc8 x19: 0000000000000000 x18: ffffffffffffffff
[    0.642162] x17: 3130303066666666 x16: 2066666666666666 x15: 0720072007200729
[    0.643048] x14: 0729072907730767 x13: 0720072007200729 x12: 0729072907730767
[    0.643916] x11: 0720072007200720 x10: ffffba16d43ef600 x9 : ffffba16d1532b3c
[    0.644808] x8 : 00000000ffffefff x7 : ffffba16d43ef600 x6 : 0000000000000000
[    0.645680] x5 : 80000000fffff000 x4 : 0000000000000fff x3 : 0000000000000000
[    0.646569] x2 : 0000000000000000 x1 : ffff000181e39180 x0 : 0000000000000166
[    0.647443] Call trace:
[    0.647753]  const_folio_flags+0x60/0x70
[    0.648247]  shmem_write_begin+0xa4/0x170
[    0.648755]  generic_perform_write+0xd8/0x2d0
[    0.649294]  shmem_file_write_iter+0xa8/0xb8
[    0.649835]  vfs_write+0x2b8/0x370
[    0.650259]  ksys_write+0x70/0x108
[    0.650676]  __arm64_sys_write+0x24/0x38
[    0.651141]  invoke_syscall+0x50/0x120
[    0.651606]  el0_svc_common+0x44/0xf8
[    0.652051]  do_el0_svc+0x28/0x40
[    0.652447]  el0_svc+0x34/0xe0
[    0.652821]  el0t_64_sync_handler+0x13c/0x158
[    0.653346]  el0t_64_sync+0x190/0x198
[    0.653810] Code: 54ffff21 b000dd41 912c0021 94009c7b (d4210000) 
[    0.654579] ---[ end trace 0000000000000000 ]---
[    0.655157] note: snapd-env-gener[109] exited with irqs disabled
[    0.655932] note: snapd-env-gener[109] exited with preempt_count 1
[    0.656724] ------------[ cut here ]------------
[    0.656788] systemd[108]: /usr/lib/systemd/system-environment-generators/snapd-env-generator terminated by signal SEGV.
[    0.657281] WARNING: CPU: 2 PID: 0 at kernel/context_tracking.c:128 ct_kernel_exit.constprop.0+0x100/0x118
[    0.659817] Modules linked in:
[    0.660194] CPU: 2 UID: 0 PID: 0 Comm: swapper/2 Tainted: G      D            6.10.0-12082-gcdc4ad36a871 #11
[    0.661435] Tainted: [D]=DIE
[    0.661796] Hardware name: linux,dummy-virt (DT)
[    0.662351] pstate: 204003c5 (nzCv DAIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[    0.663209] pc : ct_kernel_exit.constprop.0+0x100/0x118
[    0.663860] lr : ct_idle_enter+0x10/0x20
[    0.664357] sp : ffff8000801bbdc0
[    0.664776] x29: ffff8000801bbdc0 x28: 0000000000000000 x27: 0000000000000000
[    0.665655] x26: 0000000000000000 x25: ffff0001420b0000 x24: 0000000000000000
[    0.666533] x23: 0000000000000000 x22: ffffba16d4369dd0 x21: ffffba16d380ccf0
[    0.667398] x20: ffffba16d4369c70 x19: ffff00017ffc8fe8 x18: 0000000000000001
[    0.668291] x17: 0000000000000000 x16: 1fffe000284881a1 x15: 0000ffff9eccdfff
[    0.669171] x14: ffff80008389b758 x13: 0000000000000000 x12: ffffba16d2e5e880
[    0.670073] x11: 0000008bef90e7c6 x10: 0000000000000ad0 x9 : ffffba16d158cbf8
[    0.670965] x8 : ffff0001420b0b30 x7 : ffff45eaac7bf000 x6 : 00000000ffffffff
[    0.671871] x5 : 4000000000000002 x4 : ffff45eaac7bf000 x3 : ffff8000801bbdc0
[    0.672750] x2 : ffffba16d3809fe8 x1 : ffffba16d3809fe8 x0 : 4000000000000000
[    0.673636] Call trace:
[    0.673949]  ct_kernel_exit.constprop.0+0x100/0x118
[    0.674543]  ct_idle_enter+0x10/0x20
[    0.675009]  default_idle_call+0x24/0x148
[    0.675487]  do_idle+0x20c/0x270
[    0.675879]  cpu_startup_entry+0x40/0x50
[    0.676347]  secondary_start_kernel+0x138/0x160
[    0.676899]  __secondary_switched+0xb8/0xc0
[    0.677412] ---[ end trace 0000000000000000 ]---


And here is the bisect log:

# bad: [1e391b34f6aa043c7afa40a2103163a0ef06d179] Add linux-next specific files for 20240806
git bisect bad 1e391b34f6aa043c7afa40a2103163a0ef06d179
# good: [de9c2c66ad8e787abec7c9d7eff4f8c3cdd28aed] Linux 6.11-rc2
git bisect good de9c2c66ad8e787abec7c9d7eff4f8c3cdd28aed
# bad: [01c2d56f2c52e8af01dfd91af1fe9affc76c4c9e] Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git
git bisect bad 01c2d56f2c52e8af01dfd91af1fe9affc76c4c9e
# good: [3610638e967f32f02c56c7cc8f7d6a815972f8c2] Merge branch 'for-linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/sudeep.holla/linux.git
git bisect good 3610638e967f32f02c56c7cc8f7d6a815972f8c2
# bad: [1b3d9c66aa0d64054a8f9fa1c14db3ee78156a50] Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux.git
git bisect bad 1b3d9c66aa0d64054a8f9fa1c14db3ee78156a50
# bad: [1b3d9c66aa0d64054a8f9fa1c14db3ee78156a50] Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux.git
git bisect bad 1b3d9c66aa0d64054a8f9fa1c14db3ee78156a50
# bad: [1b3d9c66aa0d64054a8f9fa1c14db3ee78156a50] Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux.git
git bisect bad 1b3d9c66aa0d64054a8f9fa1c14db3ee78156a50
# bad: [d15fe7f84765bc7905e3128bfbce964e5b77164e] Merge branch 'vfs.all' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git
git bisect bad d15fe7f84765bc7905e3128bfbce964e5b77164e
# bad: [dc811e7b74eb4e5ae5fae7ef9e2e88c518bd9499] Merge branch 'work.write.end'
git bisect bad dc811e7b74eb4e5ae5fae7ef9e2e88c518bd9499
# bad: [c1dbed4c3c12f54037bd418b5c46a3a10d507cb5] Merge branch 'write-end' of git://git.infradead.org/users/willy/pagecache
git bisect bad c1dbed4c3c12f54037bd418b5c46a3a10d507cb5
# good: [753b3c028d7ee9a47b13bb4ee70a34a70b647cec] minixfs: Convert minix_delete_entry() to work on a folio
git bisect good 753b3c028d7ee9a47b13bb4ee70a34a70b647cec
# good: [ef2c557265b13f52f845655f7df1f8a9fc44ed72] f2fs: Convert f2fs_write_end() to use a folio
git bisect good ef2c557265b13f52f845655f7df1f8a9fc44ed72
# good: [4fc11ea804155651591518a011494598086a6a27] orangefs: Convert orangefs_write_end() to use a folio
git bisect good 4fc11ea804155651591518a011494598086a6a27
# good: [300dd0fa8e20eca38c251fbe4b0b373f4b53c1b4] fs: Convert aops->write_end to take a folio
git bisect good 300dd0fa8e20eca38c251fbe4b0b373f4b53c1b4
# bad: [d5dd3891b9ec273f12c5d0e147d365956fc24b8f] ocfs2: Convert ocfs2_write_zero_page to use a folio
git bisect bad d5dd3891b9ec273f12c5d0e147d365956fc24b8f
# bad: [cdc4ad36a871b7ac43fcc6b2891058d332ce60ce] fs: Convert aops->write_begin to take a folio
git bisect bad cdc4ad36a871b7ac43fcc6b2891058d332ce60ce
# first bad commit: [cdc4ad36a871b7ac43fcc6b2891058d332ce60ce] fs: Convert aops->write_begin to take a folio


Thanks,
Ryan




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux