kernel:linux3.17
fs: f2fs初始版本
1.前言
本文主要记录f2fs fsync的流程。
2.总体流程
do_fsync
fget(fd)
vfs_fsync(file, file->f_path.dentry, datasync)
fop->fsync(file, dentry, datasync)
f2fs_sync_file
filemap_write_and_wait_range
元数据相关操作
3.详细流程
3.1 filemap_write_and_wait_range
filemap_write_and_wait_range(mapping, start, end)
do_writepages(mapping, &wbc)
mapping->a_ops->writepages(mapping, wbc)
generic_writepages(mapping, wbc)
write_cache_pages(mapping, wbc, __writepage, mapping)
可参考<<场景:write>>的3.1 generic_file_direct_write 一节
3.2 元数据相关操作
f2fs_write_inode(inode, NULL)
f2fs_sync_fs(inode->i_sb, 1)
-
f2fs_write_inode:用inode信息更新对应的node block page(通过inode->ino可以拿到对应的node block page)
-
f2fs_sync_fs:如果需要执行checkpoint操作则执行f2fs_sync_fs,它将会调用write_checkpoint执行checkpoint.