unsigned long name_size, void *data)
 {
        struct efivar_entry *entry;
-       int ret;
 
        entry = kzalloc(sizeof(*entry), GFP_KERNEL);
        if (!entry)
        memcpy(entry->var.VariableName, name, name_size);
        entry->var.VendorGuid = vendor;
 
-       ret = efivar_entry_add(entry, &efi_pstore_list);
-       if (ret)
-               kfree(entry);
+       __efivar_entry_add(entry, &efi_pstore_list);
 
-       return ret;
+       return 0;
 }
 
 static int efi_pstore_update_entry(efi_char16_t *name, efi_guid_t vendor,
 
        }
 
        kobject_uevent(&new_var->kobj, KOBJ_ADD);
-       if (efivar_entry_add(new_var, &efivar_sysfs_list)) {
-               efivar_unregister(new_var);
-               return -EINTR;
-       }
+       __efivar_entry_add(new_var, &efivar_sysfs_list);
 
        return 0;
 }
 
                                                &vendor_guid);
                switch (status) {
                case EFI_SUCCESS:
-                       if (duplicates)
-                               up(&efivars_lock);
-
                        variable_name_size = var_name_strnsize(variable_name,
                                                               variable_name_size);
 
                                if (err)
                                        status = EFI_NOT_FOUND;
                        }
-
-                       if (duplicates) {
-                               if (down_interruptible(&efivars_lock)) {
-                                       err = -EINTR;
-                                       goto free;
-                               }
-                       }
-
                        break;
                case EFI_UNSUPPORTED:
                        err = -EOPNOTSUPP;
 }
 EXPORT_SYMBOL_GPL(efivar_entry_add);
 
+/**
+ * __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);
+}
+EXPORT_SYMBOL_GPL(__efivar_entry_add);
+
 /**
  * efivar_entry_remove - remove entry from variable list
  * @entry: entry to remove from list
 
                goto fail_inode;
        }
 
-       efivar_entry_size(entry, &size);
-       err = efivar_entry_add(entry, &efivarfs_list);
-       if (err)
-               goto fail_inode;
+       __efivar_entry_get(entry, NULL, &size, NULL);
+       __efivar_entry_add(entry, &efivarfs_list);
 
        /* copied by the above to local storage in the dentry. */
        kfree(name);
 
                void *data, bool duplicates, struct list_head *head);
 
 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_remove(struct efivar_entry *entry);
 
 int __efivar_entry_delete(struct efivar_entry *entry);