On 07/20, Satya Tangirala wrote: > From: Eric Biggers <ebiggers@xxxxxxxxxx> > > Wire up ext4 with fscrypt direct I/O support. direct I/O with fscrypt is > only supported through blk-crypto (i.e. CONFIG_BLK_INLINE_ENCRYPTION must > have been enabled, the 'inlinecrypt' mount option must have been specified, > and either hardware inline encryption support must be present or > CONFIG_BLK_INLINE_ENCYRPTION_FALLBACK must have been enabled). Further, > direct I/O on encrypted files is only supported when I/O is aligned > to the filesystem block size (which is *not* necessarily the same as the > block device's block size). > > Signed-off-by: Eric Biggers <ebiggers@xxxxxxxxxx> > Co-developed-by: Satya Tangirala <satyat@xxxxxxxxxx> > Signed-off-by: Satya Tangirala <satyat@xxxxxxxxxx> Reviewed-by: Jaegeuk Kim <jaegeuk@xxxxxxxxxx> > --- > fs/ext4/file.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/fs/ext4/file.c b/fs/ext4/file.c > index 2a01e31a032c..d534f72675d9 100644 > --- a/fs/ext4/file.c > +++ b/fs/ext4/file.c > @@ -36,9 +36,11 @@ > #include "acl.h" > #include "truncate.h" > > -static bool ext4_dio_supported(struct inode *inode) > +static bool ext4_dio_supported(struct kiocb *iocb, struct iov_iter *iter) > { > - if (IS_ENABLED(CONFIG_FS_ENCRYPTION) && IS_ENCRYPTED(inode)) > + struct inode *inode = file_inode(iocb->ki_filp); > + > + if (!fscrypt_dio_supported(iocb, iter)) > return false; > if (fsverity_active(inode)) > return false; > @@ -61,7 +63,7 @@ static ssize_t ext4_dio_read_iter(struct kiocb *iocb, struct iov_iter *to) > inode_lock_shared(inode); > } > > - if (!ext4_dio_supported(inode)) { > + if (!ext4_dio_supported(iocb, to)) { > inode_unlock_shared(inode); > /* > * Fallback to buffered I/O if the operation being performed on > @@ -490,7 +492,7 @@ static ssize_t ext4_dio_write_iter(struct kiocb *iocb, struct iov_iter *from) > } > > /* Fallback to buffered I/O if the inode does not support direct I/O. */ > - if (!ext4_dio_supported(inode)) { > + if (!ext4_dio_supported(iocb, from)) { > if (ilock_shared) > inode_unlock_shared(inode); > else > -- > 2.28.0.rc0.105.gf9edc3c819-goog