[fxfs] Add transaction locks

 + Add support for transaction locks to guard against things such as
   trying to write to the same object at the same time.

 + Add support for associated objects which allow in-memory changes to
   cached values to be made when the mutation is applied.  This is
   currently used to update the cached size for an object.

 + Also adds support for handling dropped transactions which need to
   roll back changes, e.g. reserved allocations need to be unreserved if
   a transaction fails.

 + This changes creation of new transactions so that an error can be
   returned which will mean that we can stop accepting new transactions
   if the journaling system fails somehow.

Some additional work will need to follow to address locks required for
reads.

Change-Id: Iee70938a6b0b39615661693ae4ab1cbb936e845a
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/509939
Commit-Queue: Chris Suter <csuter@google.com>
Reviewed-by: James Sullivan <jfsulliv@google.com>
18 files changed
tree: c3a18bb7ac3845f2ebeb43f442f17a1faf19dc32
  1. .clang-format
  2. .clang-tidy
  3. .git-blame-ignore-revs
  4. .gitattributes
  5. .gitignore
  6. .gn
  7. .style.yapf
  8. AUTHORS
  9. BUILD.gn
  10. CODE_OF_CONDUCT.md
  11. CONTRIBUTING.md
  12. LICENSE
  13. OWNERS
  14. PATENTS
  15. README.md
  16. boards/
  17. build/
  18. buildtools/
  19. bundles/
  20. docs/
  21. examples/
  22. garnet/
  23. products/
  24. rustfmt.toml
  25. scripts/
  26. sdk/
  27. src/
  28. third_party/
  29. tools/
  30. zircon/
README.md

Fuchsia

Pink + Purple == Fuchsia (a new operating system)

What is Fuchsia?

Fuchsia is a modular, capability-based operating system. Fuchsia runs on modern 64-bit Intel and ARM processors.

Fuchsia is an open source project with a code of conduct that we expect everyone who interacts with the project to respect.

Read more about Fuchsia's principles.

How can I build and run Fuchsia?

See Getting Started.

Where can I learn more about Fuchsia?

See fuchsia.dev.