efivarfs_create_dentry(): fold into its sole caller

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
diff --git a/fs/efivarfs/super.c b/fs/efivarfs/super.c
index ea055d0..7b1e3e1 100644
--- a/fs/efivarfs/super.c
+++ b/fs/efivarfs/super.c
@@ -189,60 +189,15 @@ static const struct dentry_operations efivarfs_d_ops = {
 	.d_hash = efivarfs_d_hash,
 };
 
-static int efivarfs_create_dentry(struct super_block *sb, efi_char16_t *name16,
-				  unsigned long name_size, efi_guid_t vendor,
-				  char *name)
-{
-	struct efivar_entry *entry;
-	struct inode *inode;
-	struct dentry *dentry, *root = sb->s_root;
-	unsigned long size = 0;
-	int len;
-	int err = 0;
-	bool is_removable = false;
-
-	/* length of the variable name itself: remove GUID and separator */
-	len = strlen(name) - EFI_VARIABLE_GUID_LEN - 1;
-
-	if (efivar_variable_is_removable(vendor, name, len))
-		is_removable = true;
-
-	dentry = simple_start_creating(root, name);
-	if (IS_ERR(dentry)) {
-		err = PTR_ERR(dentry);
-		goto out_name;
-	}
-
-	inode = efivarfs_get_inode(sb, S_IFREG | 0644, 0, is_removable);
-	if (unlikely(!inode)) {
-		err = -ENOMEM;
-		goto out_dentry;
-	}
-
-	entry = efivar_entry(inode);
-
-	memcpy(entry->var.VariableName, name16, name_size);
-	memcpy(&(entry->var.VendorGuid), &vendor, sizeof(efi_guid_t));
-
-	__efivar_entry_get(entry, NULL, &size, NULL);
-
-	inode_lock(inode);
-	inode->i_private = entry;
-	i_size_write(inode, size + sizeof(__u32)); /* attributes + data */
-	inode_unlock(inode);
-	d_make_persistent(dentry, inode);
-
-out_dentry:
-	simple_done_creating(dentry);
-out_name:
-	kfree(name);
-	return err;
-}
-
 int efivarfs_add(efi_char16_t *name16, efi_guid_t vendor,
 		 unsigned long name_size, struct super_block *sb)
 {
-	char *name;
+	char *name __free(kfree) = NULL;
+	struct efivar_entry *entry;
+	struct inode *inode;
+	struct dentry *dentry;
+	unsigned long size = 0;
+	int len;
 
 	if (guid_equal(&vendor, &LINUX_EFI_RANDOM_SEED_TABLE_GUID))
 		return 0;
@@ -251,7 +206,34 @@ int efivarfs_add(efi_char16_t *name16, efi_guid_t vendor,
 	if (!name)
 		return -ENOMEM;
 
-	return efivarfs_create_dentry(sb, name16, name_size, vendor, name);
+	/* length of the variable name itself: remove GUID and separator */
+	len = strlen(name) - EFI_VARIABLE_GUID_LEN - 1;
+
+	dentry = simple_start_creating(sb->s_root, name);
+	if (IS_ERR(dentry))
+		return PTR_ERR(dentry);
+
+	inode = efivarfs_get_inode(sb, S_IFREG | 0644, 0,
+			efivar_variable_is_removable(vendor, name, len));
+	if (unlikely(!inode)) {
+		simple_done_creating(dentry);
+		return -ENOMEM;
+	}
+
+	entry = efivar_entry(inode);
+
+	memcpy(entry->var.VariableName, name16, name_size);
+	entry->var.VendorGuid = vendor;
+
+	__efivar_entry_get(entry, NULL, &size, NULL);
+
+	inode_lock(inode);
+	inode->i_private = entry;
+	i_size_write(inode, size + sizeof(__u32)); /* attributes + data */
+	inode_unlock(inode);
+	d_make_persistent(dentry, inode);
+	simple_done_creating(dentry);
+	return 0;
 }
 
 enum {