diff options
author | James Bottomley <James.Bottomley@HansenPartnership.com> | 2025-01-08 00:31:28 +0300 |
---|---|---|
committer | Ard Biesheuvel <ardb@kernel.org> | 2025-01-22 15:28:10 +0300 |
commit | 0e2f98da2071bae0f07135adb9b3efdb737aaee6 (patch) | |
tree | bb5e02ea13539296efa4b613ff8ef09c67073f9a | |
parent | 8ba14d9f490aef9fd535c04e9e62e1169eb7a055 (diff) | |
download | linux-0e2f98da2071bae0f07135adb9b3efdb737aaee6.tar.xz |
efivarfs: abstract initial variable creation routine
Reuse later for variable creation after hibernation
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
-rw-r--r-- | fs/efivarfs/super.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/fs/efivarfs/super.c b/fs/efivarfs/super.c index 89010c5878ce..0ddfda4c484b 100644 --- a/fs/efivarfs/super.c +++ b/fs/efivarfs/super.c @@ -226,26 +226,18 @@ bool efivarfs_variable_is_present(efi_char16_t *variable_name, return dentry != NULL; } -static int efivarfs_callback(efi_char16_t *name16, efi_guid_t vendor, - unsigned long name_size, void *data) +static int efivarfs_create_dentry(struct super_block *sb, efi_char16_t *name16, + unsigned long name_size, efi_guid_t vendor, + char *name) { - struct super_block *sb = (struct super_block *)data; struct efivar_entry *entry; - struct inode *inode = NULL; + struct inode *inode; struct dentry *dentry, *root = sb->s_root; unsigned long size = 0; - char *name; int len; int err = -ENOMEM; bool is_removable = false; - if (guid_equal(&vendor, &LINUX_EFI_RANDOM_SEED_TABLE_GUID)) - return 0; - - name = efivar_get_utf8name(name16, &vendor); - if (!name) - return err; - /* length of the variable name itself: remove GUID and separator */ len = strlen(name) - EFI_VARIABLE_GUID_LEN - 1; @@ -289,6 +281,22 @@ fail_name: return err; } +static int efivarfs_callback(efi_char16_t *name16, efi_guid_t vendor, + unsigned long name_size, void *data) +{ + struct super_block *sb = (struct super_block *)data; + char *name; + + if (guid_equal(&vendor, &LINUX_EFI_RANDOM_SEED_TABLE_GUID)) + return 0; + + name = efivar_get_utf8name(name16, &vendor); + if (!name) + return -ENOMEM; + + return efivarfs_create_dentry(sb, name16, name_size, vendor, name); +} + enum { Opt_uid, Opt_gid, }; |