Disable SPLICE_WRITE in FUSE to workaround kernel bug

SPLICE_WRITE seems to cause linux kernel cache corruption with
passthrough enabled.

It is still under investigation, but while running
ScopedStorageDeviceTest#testAccessMediaLocationInvalidation, we notice
test flakes of about 1/20 for the following reason:
1. App without ACCESS_MEDIA_LOCATION permission reads redacted bytes
via FUSE cache
2. App with ACCESS_MEDIA_LOCATION permission reads non-redacted bytes
via passthrough cache
(2) fails because bytes from (1) sneak into the passthrough cache??

To workaround, we disable splice for write when passthrough is
enabled.

This shouldn't have any performance regression if comparing
passthrough devices to no-passthrough devices for the following
reasons:
1. No-op for no-passthrough devices
2. Passthrough devices
  a. Files not requiring redaction use passthrough which bypasses
     FUSE_READ entirely
  b. Files requiring redaction are still faster than no-passthrough
     devices that use direct_io

Bug: 191724755
Test: atest --rerun-until-failure 50 -d
ScopedStorageDeviceTest#testAccessMediaLocationInvalidation

Change-Id: I276dda82af9f3fe2304defb2e57391d5bf8163d1
1 file changed