mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-12-08 04:09:37 +00:00
Fix netfs_page_mkwrite() to check that folio->mapping is valid once it has
taken the folio lock (as filemap_page_mkwrite() does). Without this,
generic/247 occasionally oopses with something like the following:
BUG: kernel NULL pointer dereference, address: 0000000000000000
#PF: supervisor read access in kernel mode
#PF: error_code(0x0000) - not-present page
RIP: 0010:trace_event_raw_event_netfs_folio+0x61/0xc0
...
Call Trace:
<TASK>
? __die_body+0x1a/0x60
? page_fault_oops+0x6e/0xa0
? exc_page_fault+0xc2/0xe0
? asm_exc_page_fault+0x22/0x30
? trace_event_raw_event_netfs_folio+0x61/0xc0
trace_netfs_folio+0x39/0x40
netfs_page_mkwrite+0x14c/0x1d0
do_page_mkwrite+0x50/0x90
do_pte_missing+0x184/0x200
__handle_mm_fault+0x42d/0x500
handle_mm_fault+0x121/0x1f0
do_user_addr_fault+0x23e/0x3c0
exc_page_fault+0xc2/0xe0
asm_exc_page_fault+0x22/0x30
This is due to the invalidate_inode_pages2_range() issued at the end of the
DIO write interfering with the mmap'd writes.
Fixes:
|
||
|---|---|---|
| .. | ||
| buffered_read.c | ||
| buffered_write.c | ||
| direct_read.c | ||
| direct_write.c | ||
| fscache_cache.c | ||
| fscache_cookie.c | ||
| fscache_internal.h | ||
| fscache_io.c | ||
| fscache_main.c | ||
| fscache_proc.c | ||
| fscache_stats.c | ||
| fscache_volume.c | ||
| internal.h | ||
| io.c | ||
| iterator.c | ||
| Kconfig | ||
| locking.c | ||
| main.c | ||
| Makefile | ||
| misc.c | ||
| objects.c | ||
| stats.c | ||
| write_collect.c | ||
| write_issue.c | ||