]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
efivarfs: abstract initial variable creation routine
authorJames Bottomley <James.Bottomley@HansenPartnership.com>
Tue, 7 Jan 2025 21:31:28 +0000 (13:31 -0800)
committerArd Biesheuvel <ardb@kernel.org>
Wed, 22 Jan 2025 12:28:10 +0000 (13:28 +0100)
Reuse later for variable creation after hibernation

Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
fs/efivarfs/super.c

index 89010c5878ce9c4383026a0fcdec9323eedbe53f..0ddfda4c484ba4df47d8390d12e2d9bc34b60eb8 100644 (file)
@@ -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,
 };