diff options
author | Eric Biggers <ebiggers@google.com> | 2019-08-05 04:35:44 +0200 |
---|---|---|
committer | Eric Biggers <ebiggers@google.com> | 2019-08-13 04:05:22 +0200 |
commit | 59dc6a8e1f534cde6f7986f2fd278062e25336c0 (patch) | |
tree | e4baead29dbb2a75c0ba3a14d7c2dd4f4ec40e16 /fs/crypto | |
parent | fscrypt: use FSCRYPT_* definitions, not FS_* (diff) | |
download | linux-59dc6a8e1f534cde6f7986f2fd278062e25336c0.tar.xz linux-59dc6a8e1f534cde6f7986f2fd278062e25336c0.zip |
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; |