[roll] Roll fuchsia [block] Rationalize FUA/barriers

There were several issues and inconsistencies with how the PRE_BARRIER
and FORCE_ACCESS write flags were handled in the new block server:
- Barriers were simulated when unavailable, but FUA was not.
- Barriers were handled by stripping the PRE_BARRIER flag and calling
  `async_interface::Interface::barrier` to attach the barrier to the
  next request.  This is not very compatible with barriers for the CQHCI
  driver, where barriers are issued by a flag on a request, rather than
  a separate request.  Arguably this is the more common scenario, and
  avoids confusion around which request the barrier is associated with.
- There was no FUA_SUPPORT bit in fuchsia.hardware.block.Flag.

Fix these issues and rationalize the handling of FUA/barriers as
follows:

- Adds a BARRIER_SUPPORT bit, like FUA_SUPPORT.
- Clarifies the behaviour of PRE_BARRIER in a grouped request.
  It is vastly simpler to implement PRE_BARRIER simulation if we do
  *not* guarantee that a PRE_BARRIER request within a group will be
  sequenced with all other requests in the same group, because the
  entire batch is "in-flight" (only one response is expected by the
  client).  Clients must put PRE_BARRIER requests in a separate group,
  and submit this group after all prior requests they care about have
  been responded to.
- The block server library will simply forward the
  PRE_BARRER/FORCE_ACCESS flag to implementations, unless the
  implementation advertises that it does not support the relevant
  feature.
- If the implementation doesn't support the relevant feature, the
  block_server library will simulate barriers and FUA by a pre- and
  post-flush, respectively.  We rely on the existing ActiveRequest
  mechanism to ensure that these are logically all part of the same
  client request.
- Remove the (now defunct) barrier simulation in sdmmc-block-device.

To test this, I plumbed through the ability to set DeviceFlags on the
ramdisk C++ server.

Original-Fixed: 409872119
Multiply: block_server_integration_component.cm
Multiply: ramdisk-test.cm
Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/1439555
Original-Revision: 4dbe935ca2e702046fc2f68dbcfe5589f62cf11d
GitOrigin-RevId: e2a46b9e3128095f4ed45f517d911ccbe7fe31e6
Change-Id: I04770fe54996a06e8f88e36f7eb021385d51cd5d
1 file changed
tree: b42a0b39a66c2de263eb4e6256356aaf1befd37a
  1. ctf/
  2. git-hooks/
  3. infra/
  4. third_party/
  5. flower
  6. jiri.lock
  7. MILESTONE
  8. minimal
  9. prebuilts
  10. README.md
  11. stem
  12. test_durations
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.