@@ -537,7 +537,7 @@ struct fscrypt_master_key {
* A structural ref only guarantees that the struct continues to exist.
*
* There is one active ref associated with ->mk_secret being present,
- * and one active ref for each inode in ->mk_decrypted_inodes.
+ * and one active ref for each inode in ->mk_active_infos.
*
* There is one structural ref associated with the active refcount being
* nonzero. Finding a key in the keyring also takes a structural ref,
@@ -551,7 +551,7 @@ struct fscrypt_master_key {
/*
* The secret key material. After FS_IOC_REMOVE_ENCRYPTION_KEY is
* executed, this is wiped and no new inodes can be unlocked with this
- * key; however, there may still be inodes in ->mk_decrypted_inodes
+ * key; however, there may still be inodes in ->mk_active_infos
* which could not be evicted. As long as some inodes still remain,
* FS_IOC_REMOVE_ENCRYPTION_KEY can be retried, or
* FS_IOC_ADD_ENCRYPTION_KEY can add the secret again.
@@ -587,11 +587,11 @@ struct fscrypt_master_key {
struct key *mk_users;
/*
- * List of inodes that were unlocked using this key. This allows the
- * inodes to be evicted efficiently if the key is removed.
+ * List of infos that were unlocked using this key. This allows the
+ * owning objects to be evicted efficiently if the key is removed.
*/
- struct list_head mk_decrypted_inodes;
- spinlock_t mk_decrypted_inodes_lock;
+ struct list_head mk_active_infos;
+ spinlock_t mk_active_infos_lock;
/*
* Per-mode encryption keys for the various types of encryption policies
@@ -99,10 +99,10 @@ void fscrypt_put_master_key_activeref(struct fscrypt_master_key *mk)
/*
* ->mk_active_refs == 0 implies that ->mk_secret is not present and
- * that ->mk_decrypted_inodes is empty.
+ * that ->mk_active_infos is empty.
*/
WARN_ON(is_master_key_secret_present(&mk->mk_secret));
- WARN_ON(!list_empty(&mk->mk_decrypted_inodes));
+ WARN_ON(!list_empty(&mk->mk_active_infos));
for (i = 0; i <= FSCRYPT_MODE_MAX; i++) {
fscrypt_destroy_prepared_key(
@@ -429,8 +429,8 @@ static int add_new_master_key(struct super_block *sb,
refcount_set(&mk->mk_struct_refs, 1);
mk->mk_spec = *mk_spec;
- INIT_LIST_HEAD(&mk->mk_decrypted_inodes);
- spin_lock_init(&mk->mk_decrypted_inodes_lock);
+ INIT_LIST_HEAD(&mk->mk_active_infos);
+ spin_lock_init(&mk->mk_active_infos_lock);
if (mk_spec->type == FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER) {
err = allocate_master_key_users_keyring(mk);
@@ -882,9 +882,9 @@ static void evict_dentries_for_decrypted_objects(struct fscrypt_master_key *mk)
struct inode *inode;
struct inode *toput_inode = NULL;
- spin_lock(&mk->mk_decrypted_inodes_lock);
+ spin_lock(&mk->mk_active_infos_lock);
- list_for_each_entry(ci, &mk->mk_decrypted_inodes, ci_master_key_link) {
+ list_for_each_entry(ci, &mk->mk_active_infos, ci_master_key_link) {
inode = ci->ci_inode;
spin_lock(&inode->i_lock);
if (inode->i_state & (I_FREEING | I_WILL_FREE | I_NEW)) {
@@ -893,16 +893,16 @@ static void evict_dentries_for_decrypted_objects(struct fscrypt_master_key *mk)
}
__iget(inode);
spin_unlock(&inode->i_lock);
- spin_unlock(&mk->mk_decrypted_inodes_lock);
+ spin_unlock(&mk->mk_active_infos_lock);
shrink_dcache_inode(inode);
iput(toput_inode);
toput_inode = inode;
- spin_lock(&mk->mk_decrypted_inodes_lock);
+ spin_lock(&mk->mk_active_infos_lock);
}
- spin_unlock(&mk->mk_decrypted_inodes_lock);
+ spin_unlock(&mk->mk_active_infos_lock);
iput(toput_inode);
}
@@ -914,25 +914,25 @@ static int check_for_busy_inodes(struct super_block *sb,
unsigned long ino;
char ino_str[50] = "";
- spin_lock(&mk->mk_decrypted_inodes_lock);
+ spin_lock(&mk->mk_active_infos_lock);
- list_for_each(pos, &mk->mk_decrypted_inodes)
+ list_for_each(pos, &mk->mk_active_infos)
busy_count++;
if (busy_count == 0) {
- spin_unlock(&mk->mk_decrypted_inodes_lock);
+ spin_unlock(&mk->mk_active_infos_lock);
return 0;
}
{
/* select an example file to show for debugging purposes */
struct inode *inode =
- list_first_entry(&mk->mk_decrypted_inodes,
+ list_first_entry(&mk->mk_active_infos,
struct fscrypt_info,
ci_master_key_link)->ci_inode;
ino = inode->i_ino;
}
- spin_unlock(&mk->mk_decrypted_inodes_lock);
+ spin_unlock(&mk->mk_active_infos_lock);
/* If the inode is currently being created, ino may still be 0. */
if (ino)
@@ -954,7 +954,7 @@ static int try_to_lock_encrypted_files(struct super_block *sb,
/*
* An inode can't be evicted while it is dirty or has dirty pages.
- * Thus, we first have to clean the inodes in ->mk_decrypted_inodes.
+ * Thus, we first have to clean the inodes in ->mk_active_infos.
*
* Just do it the easy way: call sync_filesystem(). It's overkill, but
* it works, and it's more important to minimize the amount of caches we
@@ -414,7 +414,7 @@ static bool fscrypt_valid_master_key_size(const struct fscrypt_master_key *mk,
*
* If the master key is found in the filesystem-level keyring, then it is
* returned in *mk_ret with its semaphore read-locked. This is needed to ensure
- * that only one task links the fscrypt_info into ->mk_decrypted_inodes (as
+ * that only one task links the fscrypt_info into ->mk_active_infos (as
* multiple tasks may race to create an fscrypt_info for the same inode), and to
* synchronize the master key being removed with a new inode starting to use it.
*/
@@ -504,9 +504,9 @@ static void put_crypt_info(struct fscrypt_info *ci)
* inode from a master key struct that already had its secret
* removed, then complete the full removal of the struct.
*/
- spin_lock(&mk->mk_decrypted_inodes_lock);
+ spin_lock(&mk->mk_active_infos_lock);
list_del(&ci->ci_master_key_link);
- spin_unlock(&mk->mk_decrypted_inodes_lock);
+ spin_unlock(&mk->mk_active_infos_lock);
fscrypt_put_master_key_activeref(mk);
}
memzero_explicit(ci, sizeof(*ci));
@@ -538,9 +538,9 @@ static bool fscrypt_set_inode_info(struct inode *inode,
if (mk) {
ci->ci_master_key = mk;
refcount_inc(&mk->mk_active_refs);
- spin_lock(&mk->mk_decrypted_inodes_lock);
- list_add(&ci->ci_master_key_link, &mk->mk_decrypted_inodes);
- spin_unlock(&mk->mk_decrypted_inodes_lock);
+ spin_lock(&mk->mk_active_infos_lock);
+ list_add(&ci->ci_master_key_link, &mk->mk_active_infos);
+ spin_unlock(&mk->mk_active_infos_lock);
}
return true;
}
With the advent of extent-owned infos, we will need to track both inodes and extents in each master key, in order to appropriately notify filesystems that an extent needs to forget its fscrypt_info. Thus, it no longer makes sense for the list of these objects to be called 'decrypted inodes'. This change renames mk_decrypted_inodes{,_lock} to mk_active_infos{,_lock} since the list tracks active fscrypt_info objects of any provenance. Signed-off-by: Sweet Tea Dorminy <sweettea-kernel@dorminy.me> --- fs/crypto/fscrypt_private.h | 12 ++++++------ fs/crypto/keyring.c | 30 +++++++++++++++--------------- fs/crypto/keysetup.c | 12 ++++++------ 3 files changed, 27 insertions(+), 27 deletions(-)