• Chao Yu's avatar
    f2fs: fix to drop meta/node pages during umount · a8933b6b
    Chao Yu authored
    As reported in bugzilla:
    
    https://bugzilla.kernel.org/show_bug.cgi?id=204193
    
    A null pointer dereference bug is triggered in f2fs under kernel-5.1.3.
    
     kasan_report.cold+0x5/0x32
     f2fs_write_end_io+0x215/0x650
     bio_endio+0x26e/0x320
     blk_update_request+0x209/0x5d0
     blk_mq_end_request+0x2e/0x230
     lo_complete_rq+0x12c/0x190
     blk_done_softirq+0x14a/0x1a0
     __do_softirq+0x119/0x3e5
     irq_exit+0x94/0xe0
     call_function_single_interrupt+0xf/0x20
    
    During umount, we will access NULL sbi->node_inode pointer in
    f2fs_write_end_io():
    
    	f2fs_bug_on(sbi, page->mapping == NODE_MAPPING(sbi) &&
    				page->index != nid_of_node(page));
    
    The reason is if disable_checkpoint mount option is on, meta dirty
    pages can remain during umount, and then be flushed by iput() of
    meta_inode, however node_inode has been iput()ed before
    meta_inode's iput().
    
    Since checkpoint is disabled, all meta/node datas are useless and
    should be dropped in next mount, so in umount, let's adjust
    drop_inode() to give a hint to iput_final() to drop all those dirty
    datas correctly.
    Signed-off-by: default avatarChao Yu <yuchao0@huawei.com>
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    a8933b6b
super.c 94.2 KB