• Zhikang Zhang's avatar
    f2fs: avoid sleeping under spin_lock · 207093ca
    Zhikang Zhang authored
    [ Upstream commit b430f726 ]
    
    In the call trace below, we might sleep in function dput().
    
    So in order to avoid sleeping under spin_lock, we remove f2fs_mark_inode_dirty_sync
    from __try_update_largest_extent && __drop_largest_extent.
    
    BUG: sleeping function called from invalid context at fs/dcache.c:796
    Call trace:
    	dump_backtrace+0x0/0x3f4
    	show_stack+0x24/0x30
    	dump_stack+0xe0/0x138
    	___might_sleep+0x2a8/0x2c8
    	__might_sleep+0x78/0x10c
    	dput+0x7c/0x750
    	block_dump___mark_inode_dirty+0x120/0x17c
    	__mark_inode_dirty+0x344/0x11f0
    	f2fs_mark_inode_dirty_sync+0x40/0x50
    	__insert_extent_tree+0x2e0/0x2f4
    	f2fs_update_extent_tree_range+0xcf4/0xde8
    	f2fs_update_extent_cache+0x114/0x12c
    	f2fs_update_data_blkaddr+0x40/0x50
    	write_data_page+0x150/0x314
    	do_write_data_page+0x648/0x2318
    	__write_data_page+0xdb4/0x1640
    	f2fs_write_cache_pages+0x768/0xafc
    	__f2fs_write_data_pages+0x590/0x1218
    	f2fs_write_data_pages+0x64/0x74
    	do_writepages+0x74/0xe4
    	__writeback_single_inode+0xdc/0x15f0
    	writeback_sb_inodes+0x574/0xc98
    	__writeback_inodes_wb+0x190/0x204
    	wb_writeback+0x730/0xf14
    	wb_check_old_data_flush+0x1bc/0x1c8
    	wb_workfn+0x554/0xf74
    	process_one_work+0x440/0x118c
    	worker_thread+0xac/0x974
    	kthread+0x1a0/0x1c8
    	ret_from_fork+0x10/0x1c
    Signed-off-by: default avatarZhikang Zhang <zhangzhikang1@huawei.com>
    Reviewed-by: default avatarChao Yu <yuchao0@huawei.com>
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    207093ca
extent_cache.c 19.5 KB