fscrypt: add functions for direct I/O support
authorEric Biggers <ebiggers@google.com>
Fri, 28 Jan 2022 23:39:36 +0000 (15:39 -0800)
committerEric Biggers <ebiggers@google.com>
Tue, 8 Feb 2022 19:02:04 +0000 (11:02 -0800)
commitc6c89783eba05a5e159b07cfd8c68d841cc5de42
treed7915b13f5a4567d3b197b21d59966b3f430a0db
parentdfd42facf1e4ada021b939b4e19c935dcdd55566
fscrypt: add functions for direct I/O support

Encrypted files traditionally haven't supported DIO, due to the need to
encrypt/decrypt the data.  However, when the encryption is implemented
using inline encryption (blk-crypto) instead of the traditional
filesystem-layer encryption, it is straightforward to support DIO.

In preparation for supporting this, add the following functions:

- fscrypt_dio_supported() checks whether a DIO request is supported as
  far as encryption is concerned.  Encrypted files will only support DIO
  when inline encryption is used and the I/O request is properly
  aligned; this function checks these preconditions.

- fscrypt_limit_io_blocks() limits the length of a bio to avoid crossing
  a place in the file that a bio with an encryption context cannot
  cross due to a DUN discontiguity.  This function is needed by
  filesystems that use the iomap DIO implementation (which operates
  directly on logical ranges, so it won't use fscrypt_mergeable_bio())
  and that support FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32.

Co-developed-by: Satya Tangirala <satyat@google.com>
Signed-off-by: Satya Tangirala <satyat@google.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20220128233940.79464-2-ebiggers@kernel.org
Signed-off-by: Eric Biggers <ebiggers@google.com>
fs/crypto/crypto.c
fs/crypto/inline_crypt.c
include/linux/fscrypt.h