• Matthew Wilcox (Oracle)'s avatar
    filemap: Don't release a locked folio · 6bf74cdd
    Matthew Wilcox (Oracle) authored
    We must hold a reference over the call to filemap_release_folio(),
    otherwise the page cache will put the last reference to the folio
    before we unlock it, leading to splats like this:
    
     BUG: Bad page state in process u8:5  pfn:1ab1f4
     page:ffffea0006ac7d00 refcount:0 mapcount:0 mapping:0000000000000000 index:0x28b1de pfn:0x1ab1f4
     flags: 0x17ff80000040001(locked|reclaim|node=0|zone=2|lastcpupid=0xfff)
     raw: 017ff80000040001 dead000000000100 dead000000000122 0000000000000000
     raw: 000000000028b1de 0000000000000000 00000000ffffffff 0000000000000000
     page dumped because: PAGE_FLAGS_CHECK_AT_FREE flag(s) set
    
    It's an error path, so it doesn't see much testing.
    Reported-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Fixes: a42634a6 ("readahead: Use a folio in read_pages()")
    Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
    6bf74cdd
readahead.c 25.2 KB