[f2fs] Correct syncing node blocks

It modifies NodeMgr::SyncInodePage() to mark vnodes as dirty
instead of writting out them. NodeMgr::SyncInodePage() is
to synchronize in-memory vnode page and vnode object. Currently,
we have vnode cache but not page cache, and thus it is enough to set
the vnode as dirty. It also corrects a bug in NodeMgr::NewNodePage()
that used hot node segments to log warm/cold node blocks.

Test: fx test f2fs-unittest f2fs-fs-tests f2fs-slow-fs-tests

Change-Id: Ibb22b47f080981769c7c3c123c2c4b906f822768
Reviewed-on: https://fuchsia-review.googlesource.com/c/third_party/f2fs/+/562941
Reviewed-by: Brett Wilson <brettw@google.com>
1 file changed
tree: 90d9307cd730aa149f25a277d368e603648c3429
  2. BUILD.gn
  6. README.md
  7. bcache.cc
  8. bcache.h
  9. checkpoint.cc
  10. data.cc
  11. dir.cc
  12. dir.h
  13. dir_hash.cc
  14. f2fs.cc
  15. f2fs.h
  16. f2fs_internal.h
  17. f2fs_layout.h
  18. f2fs_lib.h
  19. f2fs_types.h
  20. file.cc
  21. file.h
  22. fsck.cc
  23. fsck.h
  24. gc.cc
  25. inline.cc
  26. mkfs.cc
  27. mkfs.h
  28. mount.cc
  29. mount.h
  30. namei.cc
  31. namestring.h
  32. node.cc
  33. node.h
  34. patches/
  35. recovery.cc
  36. segment.cc
  37. segment.h
  38. super.cc
  39. test/
  40. test_files/
  41. third_party/
  42. tools/
  43. vnode.cc
  44. vnode.h
  45. vnode_cache.cc
  46. vnode_cache.h

What is F2FS?

F2FS is the most commonly used log-structured file system in Linux. It supports flash-friendly features such as adaptive logging, multi-head logging, fsync acceleration, and node address translation. For more information see: https://www.usenix.org/conference/fast15/technical-sessions/presentation/lee

Major Release

1st release (Apr-06-2021)

  • Features: mkfs, mount/umount, read, write, rmdir, mkdir, rename, fsync, lseek, link, unlink
  • Remarks
  • Fuchsia base code ; Thu Mar 11 08:53:24 2021 Prashanth Swaminathan,76a08ad1474 [speak] Migrate to new component templates
  • There is no cache. Every request is handled as a synchronous operation.
  • fsync() triggers checkpointing
  • lock granularity: file operation
  • LFS is used for block allocation by default, and IPU is forced when the number of free sections is below 50%.
  • no background/foreground gc
  • disable the roll-forward recovery
  • 6 active logs
  • disable the ext-identify feature
  • block allocation: LFS, IPU
  • fsck do nothing, but it returns true
  • no discard

2nd release (May-28-2021)

  • Features: truncate, ssr, fsync, recovery
  • Remarks
  • Fuchsia base code ; Thu May 20 07:25:45 2021 Yilong Li, 02c0dfff0fdb
  • support the roll-forward recovery and file level fsync()
  • block allocation: LFS, IPU, SSR
  • truncate

3rd release (June-25-2021)

  • Features: fsck, mount option, mkfs option
  • all fs-tests and large-fs-tests passed
  • Remarks
  • fsck (base: 7f35b548d4b)
  • support the ext-identify feature
  • support discard

4th release (July-30-2021)

  • Features: vnode cache, inline dentry
  • unit test coverage

5th release (August-27-2021)

  • Features: dentry cache
  • Landing
  • Linux compatibility test coverage

6th release (September-30-2021 ~)

  • Features: gc, node cache, pager support, mmap, wb, readahead, ... (as new fuchsia features coming)
  • stress test coverage
  • performance test

How to build

$ fx set core.x64 --with-base //bundles:tools --with-base //bundles:tests --with-base third_party/f2fs
(see third_party/f2fs/test_files/README.md for test)