As per [1], extent-based encryption needs to split allocating and preparing crypto_skciphers, since extent infos will be loaded at IO time and crypto_skciphers cannot be allocated at IO time. This changeset undertakes to split the existing code to clearly distinguish preparation and allocation of fscrypt_prepared_keys, wrapping crypto_skciphers. Elegance of code is in the eye of the beholder, but I've tried a decent variety of arrangements here and this seems like the clearest result to me; happy to adjust as desired, and more changesets coming soon, this just seemed like the clearest cutoff point for preliminaries without being pure refactoring. Patchset should apply cleanly to fscrypt/for-next, and pass ext4/f2fs tests (kvm-xfstests is not currently succesfully setting up ubifs volumes for me). [1] https://lore.kernel.org/linux-btrfs/Y7NQ1CvPyJiGRe00@sol.localdomain/ Sweet Tea Dorminy (10): fscrypt: split and rename setup_file_encryption_key() fscrypt: split and rename setup_per_mode_enc_key() fscrypt: move dirhash key setup away from IO key setup fscrypt: reduce special-casing of IV_INO_LBLK_32 fscrypt: make infos have a pointer to prepared keys fscrypt: move all the shared mode key setup deeper fscrypt: make ci->ci_direct_key a bool not a pointer fscrypt: make prepared keys record their type. fscrypt: explicitly track prepared parts of key fscrypt: split key alloc and preparation fs/crypto/crypto.c | 2 +- fs/crypto/fname.c | 4 +- fs/crypto/fscrypt_private.h | 73 +++++-- fs/crypto/inline_crypt.c | 30 +-- fs/crypto/keysetup.c | 379 ++++++++++++++++++++++++------------ fs/crypto/keysetup_v1.c | 13 +- 6 files changed, 336 insertions(+), 165 deletions(-) -- 2.40.0