Message ID | 20190726224141.14044-5-ebiggers@kernel.org (mailing list archive) |
---|---|
State | Not Applicable |
Delegated to: | Herbert Xu |
Headers | show |
Series | fscrypt: key management improvements | expand |
On Fri, Jul 26, 2019 at 03:41:29PM -0700, Eric Biggers wrote: > From: Eric Biggers <ebiggers@google.com> > > Add an inode back-pointer to 'struct fscrypt_info', such that > inode->i_crypt_info->ci_inode == inode. > > This will be useful for: > > 1. Evicting the inodes when a fscrypt key is removed, since we'll track > the inodes using a given key by linking their fscrypt_infos together, > rather than the inodes directly. This avoids bloating 'struct inode' > with a new list_head. > > 2. Simplifying the per-file key setup, since the inode pointer won't > have to be passed around everywhere just in case something goes wrong > and it's needed for fscrypt_warn(). > > Signed-off-by: Eric Biggers <ebiggers@google.com> Looks good, feel free to add: Reviewed-by: Theodore Ts'o <tytso@mit.edu>
diff --git a/fs/crypto/fscrypt_private.h b/fs/crypto/fscrypt_private.h index fae411b2f78dc..d345a7d28df8c 100644 --- a/fs/crypto/fscrypt_private.h +++ b/fs/crypto/fscrypt_private.h @@ -73,6 +73,9 @@ struct fscrypt_info { */ struct fscrypt_mode *ci_mode; + /* Back-pointer to the inode */ + struct inode *ci_inode; + /* * If non-NULL, then this inode uses a master key directly rather than a * derived key, and ci_ctfm will equal ci_master_key->mk_ctfm. diff --git a/fs/crypto/keyinfo.c b/fs/crypto/keyinfo.c index 22345ddede119..2d45a86f09db2 100644 --- a/fs/crypto/keyinfo.c +++ b/fs/crypto/keyinfo.c @@ -556,6 +556,8 @@ int fscrypt_get_encryption_info(struct inode *inode) if (!crypt_info) return -ENOMEM; + crypt_info->ci_inode = inode; + crypt_info->ci_flags = ctx.flags; crypt_info->ci_data_mode = ctx.contents_encryption_mode; crypt_info->ci_filename_mode = ctx.filenames_encryption_mode;