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 {