提交 51455b19 编写于 作者: C Changman Lee 提交者: Jaegeuk Kim

f2fs: cleanup path to need cp at fsync

Added some commentaries for code readability and cleaned up if-statement
clearly.
Signed-off-by: NChangman Lee <cm224.lee@samsung.com>
Signed-off-by: NJaegeuk Kim <jaegeuk@kernel.org>
上级 9c7bb702
...@@ -149,6 +149,26 @@ static bool need_inode_page_update(struct f2fs_sb_info *sbi, nid_t ino) ...@@ -149,6 +149,26 @@ static bool need_inode_page_update(struct f2fs_sb_info *sbi, nid_t ino)
return ret; return ret;
} }
static void try_to_fix_pino(struct inode *inode)
{
struct f2fs_inode_info *fi = F2FS_I(inode);
nid_t pino;
down_write(&fi->i_sem);
fi->xattr_ver = 0;
if (file_wrong_pino(inode) && inode->i_nlink == 1 &&
get_parent_ino(inode, &pino)) {
fi->i_pino = pino;
file_got_pino(inode);
up_write(&fi->i_sem);
mark_inode_dirty_sync(inode);
f2fs_write_inode(inode, NULL);
} else {
up_write(&fi->i_sem);
}
}
int f2fs_sync_file(struct file *file, loff_t start, loff_t end, int datasync) int f2fs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
{ {
struct inode *inode = file->f_mapping->host; struct inode *inode = file->f_mapping->host;
...@@ -213,49 +233,36 @@ int f2fs_sync_file(struct file *file, loff_t start, loff_t end, int datasync) ...@@ -213,49 +233,36 @@ int f2fs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
up_read(&fi->i_sem); up_read(&fi->i_sem);
if (need_cp) { if (need_cp) {
nid_t pino;
/* all the dirty node pages should be flushed for POR */ /* all the dirty node pages should be flushed for POR */
ret = f2fs_sync_fs(inode->i_sb, 1); ret = f2fs_sync_fs(inode->i_sb, 1);
down_write(&fi->i_sem); /*
fi->xattr_ver = 0; * We've secured consistency through sync_fs. Following pino
if (file_wrong_pino(inode) && inode->i_nlink == 1 && * will be used only for fsynced inodes after checkpoint.
get_parent_ino(inode, &pino)) { */
fi->i_pino = pino; try_to_fix_pino(inode);
file_got_pino(inode); goto out;
up_write(&fi->i_sem); }
mark_inode_dirty_sync(inode);
ret = f2fs_write_inode(inode, NULL);
if (ret)
goto out;
} else {
up_write(&fi->i_sem);
}
} else {
sync_nodes: sync_nodes:
sync_node_pages(sbi, ino, &wbc); sync_node_pages(sbi, ino, &wbc);
if (need_inode_block_update(sbi, ino)) {
mark_inode_dirty_sync(inode);
ret = f2fs_write_inode(inode, NULL);
if (ret)
goto out;
goto sync_nodes;
}
ret = wait_on_node_pages_writeback(sbi, ino); if (need_inode_block_update(sbi, ino)) {
if (ret) mark_inode_dirty_sync(inode);
goto out; f2fs_write_inode(inode, NULL);
goto sync_nodes;
}
/* once recovery info is written, don't need to tack this */ ret = wait_on_node_pages_writeback(sbi, ino);
remove_dirty_inode(sbi, ino, APPEND_INO); if (ret)
clear_inode_flag(fi, FI_APPEND_WRITE); goto out;
/* once recovery info is written, don't need to tack this */
remove_dirty_inode(sbi, ino, APPEND_INO);
clear_inode_flag(fi, FI_APPEND_WRITE);
flush_out: flush_out:
remove_dirty_inode(sbi, ino, UPDATE_INO); remove_dirty_inode(sbi, ino, UPDATE_INO);
clear_inode_flag(fi, FI_UPDATE_WRITE); clear_inode_flag(fi, FI_UPDATE_WRITE);
ret = f2fs_issue_flush(sbi); ret = f2fs_issue_flush(sbi);
}
out: out:
trace_f2fs_sync_file_exit(inode, need_cp, datasync, ret); trace_f2fs_sync_file_exit(inode, need_cp, datasync, ret);
return ret; return ret;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册