Commit cdaa1b19 authored by Eric Biggers's avatar Eric Biggers
Browse files

fscrypt: update documentation for direct I/O support

Now that direct I/O is supported on encrypted files in some cases,
document what these cases are.

Link: https://lore.kernel.org/r/20220128233940.79464-6-ebiggers@kernel.org


Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
parent 8a2c77bc
Loading
Loading
Loading
Loading
+23 −2
Original line number Diff line number Diff line
@@ -1047,8 +1047,8 @@ astute users may notice some differences in behavior:
  may be used to overwrite the source files but isn't guaranteed to be
  effective on all filesystems and storage devices.

- Direct I/O is not supported on encrypted files.  Attempts to use
  direct I/O on such files will fall back to buffered I/O.
- Direct I/O is supported on encrypted files only under some
  circumstances.  For details, see `Direct I/O support`_.

- The fallocate operations FALLOC_FL_COLLAPSE_RANGE and
  FALLOC_FL_INSERT_RANGE are not supported on encrypted files and will
@@ -1179,6 +1179,27 @@ Inline encryption doesn't affect the ciphertext or other aspects of
the on-disk format, so users may freely switch back and forth between
using "inlinecrypt" and not using "inlinecrypt".

Direct I/O support
==================

For direct I/O on an encrypted file to work, the following conditions
must be met (in addition to the conditions for direct I/O on an
unencrypted file):

* The file must be using inline encryption.  Usually this means that
  the filesystem must be mounted with ``-o inlinecrypt`` and inline
  encryption hardware must be present.  However, a software fallback
  is also available.  For details, see `Inline encryption support`_.

* The I/O request must be fully aligned to the filesystem block size.
  This means that the file position the I/O is targeting, the lengths
  of all I/O segments, and the memory addresses of all I/O buffers
  must be multiples of this value.  Note that the filesystem block
  size may be greater than the logical block size of the block device.

If either of the above conditions is not met, then direct I/O on the
encrypted file will fall back to buffered I/O.

Implementation details
======================