diff options
| author | Eric Biggers <ebiggers@google.com> | 2019-08-04 19:35:44 -0700 | 
|---|---|---|
| committer | Eric Biggers <ebiggers@google.com> | 2019-08-12 19:05:22 -0700 | 
| commit | 59dc6a8e1f534cde6f7986f2fd278062e25336c0 (patch) | |
| tree | e4baead29dbb2a75c0ba3a14d7c2dd4f4ec40e16 /fs/crypto | |
| parent | 3b6df59bc4d242ac5847592de55d1ff327cd4549 (diff) | |
| download | linux-59dc6a8e1f534cde6f7986f2fd278062e25336c0.tar.bz2 | |
fscrypt: add ->ci_inode to fscrypt_info
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().
Reviewed-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Eric Biggers <ebiggers@google.com>
Diffstat (limited to 'fs/crypto')
| -rw-r--r-- | fs/crypto/fscrypt_private.h | 3 | ||||
| -rw-r--r-- | fs/crypto/keyinfo.c | 2 | 
2 files changed, 5 insertions, 0 deletions
diff --git a/fs/crypto/fscrypt_private.h b/fs/crypto/fscrypt_private.h index fae411b2f78d..d345a7d28df8 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 22345ddede11..2d45a86f09db 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;  |