Replace all remaining calls to mutex_lock() and mutex_unlock() in
fs/crypto/ with lock guards.  No functional change.

Signed-off-by: Eric Biggers <[email protected]>
---

This is intended to be taken through the fscrypt tree for 7.3

 fs/crypto/crypto.c   | 13 ++++---------
 fs/crypto/keyring.c  |  3 +--
 fs/crypto/keysetup.c | 23 +++++++++++------------
 3 files changed, 16 insertions(+), 23 deletions(-)

diff --git a/fs/crypto/crypto.c b/fs/crypto/crypto.c
index 570a2231c945..10097a3251f5 100644
--- a/fs/crypto/crypto.c
+++ b/fs/crypto/crypto.c
@@ -321,35 +321,30 @@ EXPORT_SYMBOL(fscrypt_decrypt_block_inplace);
  *
  * Return: 0 on success; -errno on failure
  */
 int fscrypt_initialize(struct super_block *sb)
 {
-       int err = 0;
        mempool_t *pool;
 
        /* pairs with smp_store_release() below */
        if (likely(smp_load_acquire(&fscrypt_bounce_page_pool)))
                return 0;
 
        /* No need to allocate a bounce page pool if this FS won't use it. */
        if (!sb->s_cop->needs_bounce_pages)
                return 0;
 
-       mutex_lock(&fscrypt_init_mutex);
+       guard(mutex)(&fscrypt_init_mutex);
        if (fscrypt_bounce_page_pool)
-               goto out_unlock;
+               return 0;
 
-       err = -ENOMEM;
        pool = mempool_create_page_pool(num_prealloc_crypto_pages, 0);
        if (!pool)
-               goto out_unlock;
+               return -ENOMEM;
        /* pairs with smp_load_acquire() above */
        smp_store_release(&fscrypt_bounce_page_pool, pool);
-       err = 0;
-out_unlock:
-       mutex_unlock(&fscrypt_init_mutex);
-       return err;
+       return 0;
 }
 
 void fscrypt_msg(const struct inode *inode, const char *level,
                 const char *fmt, ...)
 {
diff --git a/fs/crypto/keyring.c b/fs/crypto/keyring.c
index 5fe0d985a58d..6ce6b436c34f 100644
--- a/fs/crypto/keyring.c
+++ b/fs/crypto/keyring.c
@@ -523,11 +523,11 @@ static int do_add_master_key(struct super_block *sb,
 {
        static DEFINE_MUTEX(fscrypt_add_key_mutex);
        struct fscrypt_master_key *mk;
        int err;
 
-       mutex_lock(&fscrypt_add_key_mutex); /* serialize find + link */
+       guard(mutex)(&fscrypt_add_key_mutex); /* serialize find + link */
 
        mk = fscrypt_find_master_key(sb, mk_spec);
        if (!mk) {
                /* Didn't find the key in ->s_master_keys.  Add it. */
                err = allocate_filesystem_keyring(sb);
@@ -550,11 +550,10 @@ static int do_add_master_key(struct super_block *sb,
                         */
                        err = add_new_master_key(sb, secret, mk_spec);
                }
                fscrypt_put_master_key(mk);
        }
-       mutex_unlock(&fscrypt_add_key_mutex);
        return err;
 }
 
 static int add_master_key(struct super_block *sb,
                          struct fscrypt_master_key_secret *secret,
diff --git a/fs/crypto/keysetup.c b/fs/crypto/keysetup.c
index f905f9f94bdd..281b5a8b0bcd 100644
--- a/fs/crypto/keysetup.c
+++ b/fs/crypto/keysetup.c
@@ -347,22 +347,21 @@ static int fscrypt_setup_iv_ino_lblk_32_key(struct 
fscrypt_inode_info *ci,
        if (err)
                return err;
 
        /* pairs with smp_store_release() below */
        if (!smp_load_acquire(&mk->mk_ino_hash_key_initialized)) {
-
-               mutex_lock(&fscrypt_mode_key_setup_mutex);
-
-               if (mk->mk_ino_hash_key_initialized)
-                       goto unlock;
-
-               fscrypt_derive_siphash_key(mk, HKDF_CONTEXT_INODE_HASH_KEY,
-                                          NULL, 0, &mk->mk_ino_hash_key);
-               /* pairs with smp_load_acquire() above */
-               smp_store_release(&mk->mk_ino_hash_key_initialized, true);
-unlock:
-               mutex_unlock(&fscrypt_mode_key_setup_mutex);
+               guard(mutex)(&fscrypt_mode_key_setup_mutex);
+
+               if (!mk->mk_ino_hash_key_initialized) {
+                       fscrypt_derive_siphash_key(mk,
+                                                  HKDF_CONTEXT_INODE_HASH_KEY,
+                                                  NULL, 0,
+                                                  &mk->mk_ino_hash_key);
+                       /* pairs with smp_load_acquire() above */
+                       smp_store_release(&mk->mk_ino_hash_key_initialized,
+                                         true);
+               }
        }
 
        /*
         * New inodes may not have an inode number assigned yet.
         * Hashing their inode number is delayed until later.

base-commit: 83f1454877cc292b88baf13c829c16ce6937d120
prerequisite-patch-id: 319d2891e88c7df1ebb5ebf434d18b68f770399f
-- 
2.55.0.rc0.738.g0c8ab3ebcc-goog


Reply via email to