[roll] Roll fuchsia [fxfs] Don't fail store flush on Crypt errors

If flushing an object store fails due to an error from its Crypt
instance, lock the store and re-do the flush.  This ensures that
flushing (and therefore journal compactions) can succeed despite errors
from Crypt.  This is necessary because the Crypt component is untrusted
and runs in a separate process, and if that process crashes, we don't
want Fxfs to be unable to flush the store.

This fixes an issue where the filesystem can become stuck as read-only
when a user volume's Crypt instance becomes unresponsive: if the Crypt
instance is unresponsive (e.g. because the component crashed), when the
journal is compacted, the store will be flushed, and flushing might fail
because the Crypt instance is unresponsive.  When compaction fails, we
fuse the journal shut as read-only.

To accommodate locking a "live" store, I to plumb a lock callback
through from the platform layer to ObjectStore, via the StoreOwner
trait.  This is necessary because a store cannot be locked while in use,
so the connections from the volume must first be severed by unmounting
the volume.  See StoreOwner::force_lock in object_store.rs.

Original-Fixed: 399171573
Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/1215204
Original-Revision: 61d573669f49e3d609287069b2f9ec50fc8bfc2c
GitOrigin-RevId: 7cb864e60180c11c229ac1f7c0a751828e26e971
Change-Id: Ibe437725c691e41db439d1db46834cf0c576b00d
1 file changed
tree: 9f0059718b62d7357288cd7c4a726da29dc11185
  1. ctf/
  2. git-hooks/
  3. infra/
  4. third_party/
  5. cts
  6. firmware
  7. flower
  8. jiri.lock
  9. MILESTONE
  10. minimal
  11. prebuilts
  12. README.md
  13. stem
  14. test_durations
  15. toolchain
README.md

Integration

This repository contains Fuchsia's Global Integration manifest files.

Making changes

All changes should be made to the internal version of this repository. Our infrastructure automatically updates this version when the internal one changes.

Currently all changes must be made by a Google employee. Non-Google employees wishing to make a change can ask for assistance in one of the communication channels documented at get involved.

Obtaining the source

First install Jiri.

Next run:

$ jiri init
$ jiri import minimal https://fuchsia.googlesource.com/integration
$ jiri update

Third party

Third party projects should have their own subdirectory in ./third_party.