As this code confused Linus [1], pass the super_block as an argument to
fscrypt_put_master_key_activeref().  This removes the need to have the
back-pointer ->mk_sb, so remove that.
[1] https://lore.kernel.org/linux-fscrypt/CAHk-=wgud4Bc_um+htgfagYpZAnOoCb3NUoW67hc9LhOKsMtJg@mail.gmail.com
Signed-off-by: Eric Biggers <ebiggers@google.com>
Link: https://lore.kernel.org/r/20221110082942.351615-1-ebiggers@kernel.org
 
 struct fscrypt_master_key {
 
        /*
-        * Back-pointer to the super_block of the filesystem to which this
-        * master key has been added.  Only valid if ->mk_active_refs > 0.
-        */
-       struct super_block                      *mk_sb;
-
-       /*
-        * Link in ->mk_sb->s_master_keys->key_hashtable.
+        * Link in ->s_master_keys->key_hashtable.
         * Only valid if ->mk_active_refs > 0.
         */
        struct hlist_node                       mk_node;
        /*
         * Active and structural reference counts.  An active ref guarantees
         * that the struct continues to exist, continues to be in the keyring
-        * ->mk_sb->s_master_keys, and that any embedded subkeys (e.g.
+        * ->s_master_keys, and that any embedded subkeys (e.g.
         * ->mk_direct_keys) that have been prepared continue to exist.
         * A structural ref only guarantees that the struct continues to exist.
         *
 
 void fscrypt_put_master_key(struct fscrypt_master_key *mk);
 
-void fscrypt_put_master_key_activeref(struct fscrypt_master_key *mk);
+void fscrypt_put_master_key_activeref(struct super_block *sb,
+                                     struct fscrypt_master_key *mk);
 
 struct fscrypt_master_key *
 fscrypt_find_master_key(struct super_block *sb,
 
        call_rcu(&mk->mk_rcu_head, fscrypt_free_master_key);
 }
 
-void fscrypt_put_master_key_activeref(struct fscrypt_master_key *mk)
+void fscrypt_put_master_key_activeref(struct super_block *sb,
+                                     struct fscrypt_master_key *mk)
 {
-       struct super_block *sb = mk->mk_sb;
-       struct fscrypt_keyring *keyring = sb->s_master_keys;
        size_t i;
 
        if (!refcount_dec_and_test(&mk->mk_active_refs))
         * destroying any subkeys embedded in it.
         */
 
-       spin_lock(&keyring->lock);
+       spin_lock(&sb->s_master_keys->lock);
        hlist_del_rcu(&mk->mk_node);
-       spin_unlock(&keyring->lock);
+       spin_unlock(&sb->s_master_keys->lock);
 
        /*
         * ->mk_active_refs == 0 implies that ->mk_secret is not present and
                        WARN_ON(refcount_read(&mk->mk_struct_refs) != 1);
                        WARN_ON(!is_master_key_secret_present(&mk->mk_secret));
                        wipe_master_key_secret(&mk->mk_secret);
-                       fscrypt_put_master_key_activeref(mk);
+                       fscrypt_put_master_key_activeref(sb, mk);
                }
        }
        kfree_sensitive(keyring);
        if (!mk)
                return -ENOMEM;
 
-       mk->mk_sb = sb;
        init_rwsem(&mk->mk_sem);
        refcount_set(&mk->mk_struct_refs, 1);
        mk->mk_spec = *mk_spec;
        err = -ENOKEY;
        if (is_master_key_secret_present(&mk->mk_secret)) {
                wipe_master_key_secret(&mk->mk_secret);
-               fscrypt_put_master_key_activeref(mk);
+               fscrypt_put_master_key_activeref(sb, mk);
                err = 0;
        }
        inodes_remain = refcount_read(&mk->mk_active_refs) > 0;
 
                spin_lock(&mk->mk_decrypted_inodes_lock);
                list_del(&ci->ci_master_key_link);
                spin_unlock(&mk->mk_decrypted_inodes_lock);
-               fscrypt_put_master_key_activeref(mk);
+               fscrypt_put_master_key_activeref(ci->ci_inode->i_sb, mk);
        }
        memzero_explicit(ci, sizeof(*ci));
        kmem_cache_free(fscrypt_info_cachep, ci);