efivarfs: Move efivarfs list into superblock s_fs_info
[linux-2.6-microblaze.git] / fs / efivarfs / super.c
index f954b1f..cee325b 100644 (file)
@@ -19,8 +19,6 @@
 
 #include "internal.h"
 
-LIST_HEAD(efivarfs_list);
-
 static void efivarfs_evict_inode(struct inode *inode)
 {
        clear_inode(inode);
@@ -167,7 +165,8 @@ static struct dentry *efivarfs_alloc_dentry(struct dentry *parent, char *name)
 }
 
 static int efivarfs_callback(efi_char16_t *name16, efi_guid_t vendor,
-                            unsigned long name_size, void *data)
+                            unsigned long name_size, void *data,
+                            struct list_head *list)
 {
        struct super_block *sb = (struct super_block *)data;
        struct efivar_entry *entry;
@@ -222,7 +221,7 @@ static int efivarfs_callback(efi_char16_t *name16, efi_guid_t vendor,
        }
 
        __efivar_entry_get(entry, NULL, &size, NULL);
-       __efivar_entry_add(entry, &efivarfs_list);
+       __efivar_entry_add(entry, list);
 
        /* copied by the above to local storage in the dentry. */
        kfree(name);
@@ -292,6 +291,7 @@ static int efivarfs_parse_param(struct fs_context *fc, struct fs_parameter *para
 
 static int efivarfs_fill_super(struct super_block *sb, struct fs_context *fc)
 {
+       struct efivarfs_fs_info *sfi = sb->s_fs_info;
        struct inode *inode = NULL;
        struct dentry *root;
        int err;
@@ -317,11 +317,10 @@ static int efivarfs_fill_super(struct super_block *sb, struct fs_context *fc)
        if (!root)
                return -ENOMEM;
 
-       INIT_LIST_HEAD(&efivarfs_list);
-
-       err = efivar_init(efivarfs_callback, (void *)sb, true, &efivarfs_list);
+       err = efivar_init(efivarfs_callback, (void *)sb, true,
+                         &sfi->efivarfs_list);
        if (err)
-               efivar_entry_iter(efivarfs_destroy, &efivarfs_list, NULL);
+               efivar_entry_iter(efivarfs_destroy, &sfi->efivarfs_list, NULL);
 
        return err;
 }
@@ -358,6 +357,8 @@ static int efivarfs_init_fs_context(struct fs_context *fc)
        if (!sfi)
                return -ENOMEM;
 
+       INIT_LIST_HEAD(&sfi->efivarfs_list);
+
        sfi->mount_opts.uid = GLOBAL_ROOT_UID;
        sfi->mount_opts.gid = GLOBAL_ROOT_GID;
 
@@ -373,7 +374,7 @@ static void efivarfs_kill_sb(struct super_block *sb)
        kill_litter_super(sb);
 
        /* Remove all entries and destroy */
-       efivar_entry_iter(efivarfs_destroy, &efivarfs_list, NULL);
+       efivar_entry_iter(efivarfs_destroy, &sfi->efivarfs_list, NULL);
        kfree(sfi);
 }