f2fs: skip unnecessary data writes during fsync
This patch intends to improve the fsync performance by skipping remaining the recovery information, only when there is no data that we should recover. Reviewed-by: Chao Yu <chao2.yu@samsung.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
Родитель
fff04f90c1
Коммит
6d99ba41a7
|
@ -133,6 +133,17 @@ int f2fs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
|
|||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* if there is no written data, don't waste time to write recovery info.
|
||||
*/
|
||||
if (!is_inode_flag_set(fi, FI_APPEND_WRITE) &&
|
||||
!exist_written_data(sbi, inode->i_ino, APPEND_INO)) {
|
||||
if (is_inode_flag_set(fi, FI_UPDATE_WRITE) ||
|
||||
exist_written_data(sbi, inode->i_ino, UPDATE_INO))
|
||||
goto flush_out;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* guarantee free sections for fsync */
|
||||
f2fs_balance_fs(sbi);
|
||||
|
||||
|
@ -188,6 +199,13 @@ int f2fs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
|
|||
ret = wait_on_node_pages_writeback(sbi, inode->i_ino);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
/* once recovery info is written, don't need to tack this */
|
||||
remove_dirty_inode(sbi, inode->i_ino, APPEND_INO);
|
||||
clear_inode_flag(fi, FI_APPEND_WRITE);
|
||||
flush_out:
|
||||
remove_dirty_inode(sbi, inode->i_ino, UPDATE_INO);
|
||||
clear_inode_flag(fi, FI_UPDATE_WRITE);
|
||||
ret = f2fs_issue_flush(F2FS_SB(inode->i_sb));
|
||||
}
|
||||
out:
|
||||
|
|
Загрузка…
Ссылка в новой задаче