static int efivarfs_create(struct mnt_idmap *idmap, struct inode *dir,
                           struct dentry *dentry, umode_t mode, bool excl)
 {
-       struct efivarfs_fs_info *info = dir->i_sb->s_fs_info;
        struct inode *inode = NULL;
        struct efivar_entry *var;
        int namelen, i = 0, err = 0;
 
        err = guid_parse(dentry->d_name.name + namelen + 1, &vendor);
        if (err)
-               goto out;
-       if (guid_equal(&vendor, &LINUX_EFI_RANDOM_SEED_TABLE_GUID)) {
-               err = -EPERM;
-               goto out;
-       }
+               return err;
+       if (guid_equal(&vendor, &LINUX_EFI_RANDOM_SEED_TABLE_GUID))
+               return -EPERM;
 
        if (efivar_variable_is_removable(vendor,
                                         dentry->d_name.name, namelen))
                is_removable = true;
 
        inode = efivarfs_get_inode(dir->i_sb, dir, mode, 0, is_removable);
-       if (!inode) {
-               err = -ENOMEM;
-               goto out;
-       }
+       if (!inode)
+               return -ENOMEM;
        var = efivar_entry(inode);
 
        var->var.VendorGuid = vendor;
 
        inode->i_private = var;
 
-       err = efivar_entry_add(var, &info->efivarfs_list);
-       if (err)
-               goto out;
-
        d_instantiate(dentry, inode);
        dget(dentry);
-out:
-       if (err && inode)
-               iput(inode);
 
-       return err;
+       return 0;
 }
 
 static int efivarfs_unlink(struct inode *dir, struct dentry *dentry)
 
 #ifndef EFIVAR_FS_INTERNAL_H
 #define EFIVAR_FS_INTERNAL_H
 
-#include <linux/list.h>
 #include <linux/efi.h>
 
 struct efivarfs_mount_opts {
 
 struct efivarfs_fs_info {
        struct efivarfs_mount_opts mount_opts;
-       struct list_head efivarfs_list;
        struct super_block *sb;
        struct notifier_block nb;
 };
 
 struct efivar_entry {
        struct efi_variable var;
-       struct list_head list;
        struct inode vfs_inode;
 };
 
        return container_of(inode, struct efivar_entry, vfs_inode);
 }
 
-int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *,
-                           struct list_head *),
-               void *data, struct list_head *head);
+int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *),
+               void *data);
 
-int efivar_entry_add(struct efivar_entry *entry, struct list_head *head);
-void __efivar_entry_add(struct efivar_entry *entry, struct list_head *head);
 int efivar_entry_delete(struct efivar_entry *entry);
 
 int efivar_entry_size(struct efivar_entry *entry, unsigned long *size);
 int efivar_entry_set_get_size(struct efivar_entry *entry, u32 attributes,
                              unsigned long *size, void *data, bool *set);
 
-int efivar_entry_iter(int (*func)(struct efivar_entry *, void *),
-                     struct list_head *head, void *data);
 
 bool efivar_validate(efi_guid_t vendor, efi_char16_t *var_name, u8 *data,
                     unsigned long data_size);
 
 {
        struct efivar_entry *entry = efivar_entry(inode);
 
-       if (inode->i_private)
-               list_del(&entry->list);
        kfree(entry);
 }
 
 }
 
 static int efivarfs_callback(efi_char16_t *name16, efi_guid_t vendor,
-                            unsigned long name_size, void *data,
-                            struct list_head *list)
+                            unsigned long name_size, void *data)
 {
        struct super_block *sb = (struct super_block *)data;
        struct efivar_entry *entry;
        }
 
        __efivar_entry_get(entry, NULL, &size, NULL);
-       __efivar_entry_add(entry, list);
 
        /* copied by the above to local storage in the dentry. */
        kfree(name);
        if (err)
                return err;
 
-       return efivar_init(efivarfs_callback, sb, &sfi->efivarfs_list);
+       return efivar_init(efivarfs_callback, sb);
 }
 
 static int efivarfs_get_tree(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;
 
        blocking_notifier_chain_unregister(&efivar_ops_nh, &sfi->nb);
        kill_litter_super(sb);
 
-       /* Remove all entries and destroy */
-       WARN_ON(!list_empty(&sfi->efivarfs_list));
        kfree(sfi);
 }
 
 
  * efivar_init - build the initial list of EFI variables
  * @func: callback function to invoke for every variable
  * @data: function-specific data to pass to @func
- * @head: initialised head of variable list
  *
  * Get every EFI variable from the firmware and invoke @func. @func
- * should call efivar_entry_add() to build the list of variables.
+ * should populate the initial dentry and inode tree.
  *
  * Returns 0 on success, or a kernel error code on failure.
  */
-int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *,
-                           struct list_head *),
-               void *data, struct list_head *head)
+int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *),
+               void *data)
 {
        unsigned long variable_name_size = 512;
        efi_char16_t *variable_name;
                                status = EFI_NOT_FOUND;
                        } else {
                                err = func(variable_name, vendor_guid,
-                                          variable_name_size, data, head);
+                                          variable_name_size, data);
                                if (err)
                                        status = EFI_NOT_FOUND;
                        }
 }
 
 /**
- * efivar_entry_add - add entry to variable list
- * @entry: entry to add to list
- * @head: list head
- *
- * Returns 0 on success, or a kernel error code on failure.
- */
-int efivar_entry_add(struct efivar_entry *entry, struct list_head *head)
-{
-       int err;
-
-       err = efivar_lock();
-       if (err)
-               return err;
-       list_add(&entry->list, head);
-       efivar_unlock();
-
-       return 0;
-}
-
-/**
- * __efivar_entry_add - add entry to variable list
- * @entry: entry to add to list
- * @head: list head
- */
-void __efivar_entry_add(struct efivar_entry *entry, struct list_head *head)
-{
-       list_add(&entry->list, head);
-}
-
-/**
- * efivar_entry_delete - delete variable and remove entry from list
+ * efivar_entry_delete - delete variable
  * @entry: entry containing variable to delete
  *
- * Delete the variable from the firmware and remove @entry from the
- * variable list. It is the caller's responsibility to free @entry
- * once we return.
+ * Delete the variable from the firmware. It is the caller's
+ * responsibility to free @entry (by deleting the dentry/inode) once
+ * we return.
  *
  * Returns 0 on success, -EINTR if we can't grab the semaphore,
  * converted EFI status code if set_variable() fails.
  * get_variable() fail.
  *
  * If the EFI variable does not exist when calling set_variable()
- * (EFI_NOT_FOUND), @entry is removed from the variable list.
+ * (EFI_NOT_FOUND).
  */
 int efivar_entry_set_get_size(struct efivar_entry *entry, u32 attributes,
                              unsigned long *size, void *data, bool *set)
                return -EINVAL;
 
        /*
-        * The lock here protects the get_variable call, the conditional
-        * set_variable call, and removal of the variable from the efivars
-        * list (in the case of an authenticated delete).
+        * The lock here protects the get_variable call and the
+        * conditional set_variable call
         */
        err = efivar_lock();
        if (err)
        return err;
 
 }
-
-/**
- * efivar_entry_iter - iterate over variable list
- * @func: callback function
- * @head: head of variable list
- * @data: function-specific data to pass to callback
- *
- * Iterate over the list of EFI variables and call @func with every
- * entry on the list. It is safe for @func to remove entries in the
- * list via efivar_entry_delete() while iterating.
- *
- * Some notes for the callback function:
- *  - a non-zero return value indicates an error and terminates the loop
- *  - @func is called from atomic context
- */
-int efivar_entry_iter(int (*func)(struct efivar_entry *, void *),
-                     struct list_head *head, void *data)
-{
-       struct efivar_entry *entry, *n;
-       int err = 0;
-
-       err = efivar_lock();
-       if (err)
-               return err;
-
-       list_for_each_entry_safe(entry, n, head, list) {
-               err = func(entry, data);
-               if (err)
-                       break;
-       }
-       efivar_unlock();
-
-       return err;
-}