On Mon, Apr 10, 2023 at 03:39:56PM -0400, Sweet Tea Dorminy wrote: > @@ -231,14 +221,39 @@ static int setup_per_mode_enc_key(struct fscrypt_info *ci, > memzero_explicit(mode_key, mode->keysize); > if (err) > goto out_unlock; > -done_unlock: > - ci->ci_enc_key = *prep_key; > - err = 0; > + > out_unlock: The 'if (err)' block above is no longer needed. > +static int find_mode_prepared_key(struct fscrypt_info *ci, > + struct fscrypt_master_key *mk, > + struct fscrypt_prepared_key *keys, > + u8 hkdf_context, bool include_fs_uuid) > +{ > + struct fscrypt_mode *mode = ci->ci_mode; > + const u8 mode_num = mode - fscrypt_modes; > + struct fscrypt_prepared_key *prep_key; > + int err; > + > + if (WARN_ON_ONCE(mode_num > FSCRYPT_MODE_MAX)) > + return -EINVAL; > + > + prep_key = &keys[mode_num]; > + if (fscrypt_is_key_prepared(prep_key, ci)) { > + ci->ci_enc_key = *prep_key; > + return 0; > + } > + err = setup_new_mode_prepared_key(mk, prep_key, ci, hkdf_context, > + include_fs_uuid); > + if (err) > + return err; > + > + ci->ci_enc_key = *prep_key; > + return 0; > +} It actually should be find_or_create_mode_prepared_key(), right? It's confusing to have a function that just says "find" actually create the thing it is looking for. But, with how long these function names would get, maybe we should just stick with setup_mode_prepared_key()? Note that it has the same semantics (find or create) as fscrypt_setup_ino_hash_key(), which this patchset doesn't change. - Eric