On Fri, Feb 21, 2020 at 03:50:48AM -0800, Satya Tangirala wrote: > +/** > + * fscrypt_inode_uses_inline_crypto - test whether an inode uses inline > + * encryption > + * @inode: an inode > + * > + * Return: true if the inode requires file contents encryption and if the > + * encryption should be done in the block layer via blk-crypto rather > + * than in the filesystem layer. > + */ > +bool fscrypt_inode_uses_inline_crypto(const struct inode *inode) > +{ > + return IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode) && > + inode->i_crypt_info->ci_inlinecrypt; > +} > +EXPORT_SYMBOL_GPL(fscrypt_inode_uses_inline_crypto); > + > +/** > + * fscrypt_inode_uses_fs_layer_crypto - test whether an inode uses fs-layer > + * encryption > + * @inode: an inode > + * > + * Return: true if the inode requires file contents encryption and if the > + * encryption should be done in the filesystem layer rather than in the > + * block layer via blk-crypto. > + */ > +bool fscrypt_inode_uses_fs_layer_crypto(const struct inode *inode) > +{ > + return IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode) && > + !inode->i_crypt_info->ci_inlinecrypt; > +} > +EXPORT_SYMBOL_GPL(fscrypt_inode_uses_fs_layer_crypto); We should use the fscrypt_needs_contents_encryption() helper function which I added in v5.6. I.e.: diff --git a/fs/crypto/inline_crypt.c b/fs/crypto/inline_crypt.c index 72692366795aa9..36510802a3665a 100644 --- a/fs/crypto/inline_crypt.c +++ b/fs/crypto/inline_crypt.c @@ -32,7 +32,7 @@ void fscrypt_select_encryption_impl(struct fscrypt_info *ci) struct super_block *sb = inode->i_sb; /* The file must need contents encryption, not filenames encryption */ - if (!S_ISREG(inode->i_mode)) + if (!fscrypt_needs_contents_encryption(inode)) return; /* blk-crypto must implement the needed encryption algorithm */ @@ -148,7 +148,7 @@ void fscrypt_destroy_inline_crypt_key(struct fscrypt_prepared_key *prep_key) */ bool fscrypt_inode_uses_inline_crypto(const struct inode *inode) { - return IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode) && + return fscrypt_needs_contents_encryption(inode) && inode->i_crypt_info->ci_inlinecrypt; } EXPORT_SYMBOL_GPL(fscrypt_inode_uses_inline_crypto); @@ -164,7 +164,7 @@ EXPORT_SYMBOL_GPL(fscrypt_inode_uses_inline_crypto); */ bool fscrypt_inode_uses_fs_layer_crypto(const struct inode *inode) { - return IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode) && + return fscrypt_needs_contents_encryption(inode) && !inode->i_crypt_info->ci_inlinecrypt; } EXPORT_SYMBOL_GPL(fscrypt_inode_uses_fs_layer_crypto); diff --git a/include/linux/fscrypt.h b/include/linux/fscrypt.h index 2a84131ab270fd..1d9810eb88b113 100644 --- a/include/linux/fscrypt.h +++ b/include/linux/fscrypt.h @@ -528,7 +528,7 @@ static inline bool fscrypt_inode_uses_inline_crypto(const struct inode *inode) static inline bool fscrypt_inode_uses_fs_layer_crypto(const struct inode *inode) { - return IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode); + return fscrypt_needs_contents_encryption(inode); } static inline void fscrypt_set_bio_crypt_ctx(struct bio *bio,