For btrfs extent encryption, prepared keys need to be asynchronously freed after the fscrypt_info is freed. This set of various rearrangements of key setup turns the prepared key member of the info into a pointer so this is possible. Patchset is built on kdave/misc-next as per base commit and needs a tiny fixup to apply to fscrypt/for-next. It passes ext4/f2fs tests for me. [1] https://lore.kernel.org/linux-fscrypt/cover.1681837335.git.sweettea-kernel@xxxxxxxxxx/ Changelog: v6: - Reword 'make infos have a pointer to prepared keys' to elaborate on why it is a useful change. Sweet Tea Dorminy (8): fscrypt: move inline crypt decision to info setup fscrypt: split and rename setup_file_encryption_key() fscrypt: split 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: move all the shared mode key setup deeper fscrypt: make infos have a pointer to prepared keys fscrypt: make prepared keys record their type fs/crypto/crypto.c | 2 +- fs/crypto/fname.c | 4 +- fs/crypto/fscrypt_private.h | 33 +++- fs/crypto/inline_crypt.c | 4 +- fs/crypto/keysetup.c | 357 +++++++++++++++++++++++------------- fs/crypto/keysetup_v1.c | 9 +- 6 files changed, 265 insertions(+), 144 deletions(-) base-commit: 54d2161835d828a9663f548f61d1d9c3d3482122 -- 2.41.0