Merge tag 'rproc-v5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/andersson...
[linux-2.6-microblaze.git] / fs / kernfs / mount.c
index 9dc7e7a..f2f909d 100644 (file)
@@ -255,9 +255,9 @@ static int kernfs_fill_super(struct super_block *sb, struct kernfs_fs_context *k
        sb->s_shrink.seeks = 0;
 
        /* get root inode, initialize and unlock it */
-       mutex_lock(&kernfs_mutex);
+       down_read(&kernfs_rwsem);
        inode = kernfs_get_inode(sb, info->root->kn);
-       mutex_unlock(&kernfs_mutex);
+       up_read(&kernfs_rwsem);
        if (!inode) {
                pr_debug("kernfs: could not get root inode\n");
                return -ENOMEM;
@@ -344,9 +344,9 @@ int kernfs_get_tree(struct fs_context *fc)
                }
                sb->s_flags |= SB_ACTIVE;
 
-               mutex_lock(&kernfs_mutex);
+               down_write(&kernfs_rwsem);
                list_add(&info->node, &info->root->supers);
-               mutex_unlock(&kernfs_mutex);
+               up_write(&kernfs_rwsem);
        }
 
        fc->root = dget(sb->s_root);
@@ -372,9 +372,9 @@ void kernfs_kill_sb(struct super_block *sb)
 {
        struct kernfs_super_info *info = kernfs_info(sb);
 
-       mutex_lock(&kernfs_mutex);
+       down_write(&kernfs_rwsem);
        list_del(&info->node);
-       mutex_unlock(&kernfs_mutex);
+       up_write(&kernfs_rwsem);
 
        /*
         * Remove the superblock from fs_supers/s_instances