On 3/23/19 10:06 PM, Matthew Wilcox wrote: > Thanks for testing. Kirill suggests this would be a better fix: > > diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h > index 41858a3744b4..9718393ae45b 100644 > --- a/include/linux/pagemap.h > +++ b/include/linux/pagemap.h > @@ -334,10 +334,12 @@ static inline struct page *grab_cache_page_nowait(struct address_space *mapping, > > static inline struct page *find_subpage(struct page *page, pgoff_t offset) > { > + unsigned long index = page_index(page); > + > VM_BUG_ON_PAGE(PageTail(page), page); > - VM_BUG_ON_PAGE(page->index > offset, page); > - VM_BUG_ON_PAGE(page->index + compound_nr(page) <= offset, page); > - return page - page->index + offset; > + VM_BUG_ON_PAGE(index > offset, page); > + VM_BUG_ON_PAGE(index + compound_nr(page) <= offset, page); > + return page - index + offset; > } > > struct page *find_get_entry(struct address_space *mapping, pgoff_t offset); This is not even compiled. If "s/compound_nr/compound_order/", it failed to boot here, [ 56.843236] Unpacking initramfs... [ 56.881979] page:ffff7fe022eb19c0 count:3 mapcount:0 mapping:38ff80080099c008 index:0x0 [ 56.890007] ramfs_aops [ 56.890011] name:"lvm.conf" [ 56.892465] flags: 0x17fffffa400000c(uptodate|dirty) [ 56.900318] raw: 017fffffa400000c dead000000000100 dead000000000200 38ff80080099c008 [ 56.908066] raw: 0000000000000000 0000000000000000 00000003ffffffff 7bff8008203bcc80 [ 56.915812] page dumped because: VM_BUG_ON_PAGE(index + compound_order(page) <= offset) [ 56.923818] page->mem_cgroup:7bff8008203bcc80 [ 56.928180] page allocated via order 0, migratetype Unmovable, gfp_mask 0x100cc2(GFP_HIGHUSER) [ 56.936800] prep_new_page+0x4e0/0x5e0 [ 56.940556] get_page_from_freelist+0x4cf4/0x50e0 [ 56.945265] __alloc_pages_nodemask+0x738/0x38b8 [ 56.949888] alloc_page_interleave+0x34/0x2f0 [ 56.954249] alloc_pages_current+0xc0/0x150 [ 56.958439] __page_cache_alloc+0x70/0x2f4 [ 56.962541] pagecache_get_page+0x5e4/0xaf0 [ 56.966729] grab_cache_page_write_begin+0x6c/0x98 [ 56.971526] simple_write_begin+0x40/0x308 [ 56.975627] generic_perform_write+0x1d4/0x4e0 [ 56.980076] __generic_file_write_iter+0x294/0x504 [ 56.984872] generic_file_write_iter+0x354/0x594 [ 56.989496] __vfs_write+0x72c/0x8a0 [ 56.993076] vfs_write+0x1ec/0x424 [ 56.996481] ksys_write+0xbc/0x190 [ 56.999890] xwrite+0x38/0x84 [ 57.002869] ------------[ cut here ]------------ [ 57.007478] kernel BUG at ./include/linux/pagemap.h:342! [ 57.012801] Internal error: Oops - BUG: 0 [#1] SMP [ 57.017584] Modules linked in: [ 57.020636] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 5.1.0-rc1-mm1+ #7 [ 57.027239] Hardware name: HPE Apollo 70 /C01_APACHE_MB , BIOS L50_5.13_1.0.6 07/10/2018 [ 57.037057] pstate: 60400009 (nZCv daif +PAN -UAO) [ 57.041839] pc : find_get_entry+0x948/0x950 [ 57.046013] lr : find_get_entry+0x940/0x950 [ 57.050185] sp : 10ff80082600f420 [ 57.053489] x29: 10ff80082600f4d0 x28: efff100000000000 [ 57.058792] x27: ffff7fe022eb19c8 x26: 0000000000000010 [ 57.064095] x25: 0000000000000035 x24: 0000000000000003 [ 57.069397] x23: 00000000000000ff x22: 10ff80082600f460 [ 57.074700] x21: ffff7fe022eb19c0 x20: 35ff800825f9a050 [ 57.080002] x19: 0000000000000000 x18: 0000000000000000 [ 57.085304] x17: 0000000000000000 x16: 000000000000000a [ 57.090606] x15: 35ff800825f9a0b8 x14: 0000000000000000 [ 57.095908] x13: ffff800825f9a050 x12: 00000000ffffffff [ 57.101210] x11: 0000000000000003 x10: 00000000000000ff [ 57.106512] x9 : e071b95619aca700 x8 : e071b95619aca700 [ 57.111814] x7 : 0000000000000000 x6 : ffff1000102d01f4 [ 57.117116] x5 : 0000000000000000 x4 : 0000000000000080 [ 57.122418] x3 : ffff1000102b84c8 x2 : 0000000000000000 [ 57.127720] x1 : 0000000000000004 x0 : ffff100013316b10 [ 57.133024] Process swapper/0 (pid: 1, stack limit = 0x(____ptrval____)) [ 57.139715] Call trace: [ 57.142153] find_get_entry+0x948/0x950 [ 57.145979] pagecache_get_page+0x68/0xaf0 [ 57.150066] grab_cache_page_write_begin+0x6c/0x98 [ 57.154847] simple_write_begin+0x40/0x308 [ 57.158934] generic_perform_write+0x1d4/0x4e0 [ 57.163368] __generic_file_write_iter+0x294/0x504 [ 57.168150] generic_file_write_iter+0x354/0x594 [ 57.172757] __vfs_write+0x72c/0x8a0 [ 57.176323] vfs_write+0x1ec/0x424 [ 57.179715] ksys_write+0xbc/0x190 [ 57.183107] xwrite+0x38/0x84 [ 57.186066] do_copy+0x110/0x898 [ 57.189284] write_buffer+0x148/0x1cc [ 57.192937] flush_buffer+0x94/0x240 [ 57.196505] __gunzip+0x738/0x8f0 [ 57.199810] gunzip+0x18/0x20 [ 57.202768] unpack_to_rootfs+0x358/0x968 [ 57.206769] populate_rootfs+0x120/0x198 [ 57.210684] do_one_initcall+0x544/0xd00 [ 57.214597] do_initcall_level+0x660/0x814 [ 57.218684] do_basic_setup+0x38/0x50 [ 57.222337] kernel_init_freeable+0x25c/0x444 [ 57.226686] kernel_init+0x1c/0x548 [ 57.230165] ret_from_fork+0x10/0x18 [ 57.233733] Code: aa1503e0 94034d79 b0016fe0 912c4000 (d4210000) [ 57.240055] ---[ end trace d7c5c3c62a7fa743 ]--- [ 57.244664] Kernel panic - not syncing: Fatal exception [ 57.249997] SMP: stopping secondary CPUs [ 57.254417] ---[ end Kernel panic - not syncing: Fatal exception ]---