Lines Matching +full:sbi +full:- +full:suspend +full:- +full:param

1 // SPDX-License-Identifier: GPL-2.0-only
16 #include <linux/suspend.h>
31 sfi->sb->s_flags |= SB_RDONLY; in efivarfs_ops_notifier()
34 sfi->sb->s_flags &= ~SB_RDONLY; in efivarfs_ops_notifier()
50 inode_init_once(&entry->vfs_inode); in efivarfs_alloc_inode()
51 entry->removed = false; in efivarfs_alloc_inode()
53 return &entry->vfs_inode; in efivarfs_alloc_inode()
65 struct super_block *sb = root->d_sb; in efivarfs_show_options()
66 struct efivarfs_fs_info *sbi = sb->s_fs_info; in efivarfs_show_options() local
67 struct efivarfs_mount_opts *opts = &sbi->mount_opts; in efivarfs_show_options()
69 if (!uid_eq(opts->uid, GLOBAL_ROOT_UID)) in efivarfs_show_options()
71 from_kuid_munged(&init_user_ns, opts->uid)); in efivarfs_show_options()
72 if (!gid_eq(opts->gid, GLOBAL_ROOT_GID)) in efivarfs_show_options()
74 from_kgid_munged(&init_user_ns, opts->gid)); in efivarfs_show_options()
84 u64 id = huge_encode_dev(dentry->d_sb->s_dev); in efivarfs_statfs()
103 buf->f_bsize = 1; in efivarfs_statfs()
104 buf->f_namelen = NAME_MAX; in efivarfs_statfs()
105 buf->f_blocks = storage_space; in efivarfs_statfs()
106 buf->f_bfree = remaining_space; in efivarfs_statfs()
107 buf->f_type = dentry->d_sb->s_magic; in efivarfs_statfs()
108 buf->f_fsid = u64_to_fsid(id); in efivarfs_statfs()
116 buf->f_bavail = remaining_space - efivar_reserved_space(); in efivarfs_statfs()
118 buf->f_bavail = 0; in efivarfs_statfs()
135 * 1. A case-sensitive variable name
136 * 2. A case-insensitive GUID
138 * So we need to perform a case-sensitive match on part 1 and a
139 * case-insensitive match on part 2.
145 int guid = len - EFI_VARIABLE_GUID_LEN; in efivarfs_d_compare()
147 if (name->len != len) in efivarfs_d_compare()
150 /* Case-sensitive compare for the variable name */ in efivarfs_d_compare()
151 if (memcmp(str, name->name, guid)) in efivarfs_d_compare()
154 /* Case-insensitive compare for the GUID */ in efivarfs_d_compare()
155 return strncasecmp(name->name + guid, str + guid, EFI_VARIABLE_GUID_LEN); in efivarfs_d_compare()
161 const unsigned char *s = qstr->name; in efivarfs_d_hash()
162 unsigned int len = qstr->len; in efivarfs_d_hash()
164 while (len-- > EFI_VARIABLE_GUID_LEN) in efivarfs_d_hash()
167 /* GUID is case-insensitive. */ in efivarfs_d_hash()
168 while (len--) in efivarfs_d_hash()
171 qstr->hash = end_name_hash(hash); in efivarfs_d_hash()
198 return ERR_PTR(-ENOMEM); in efivarfs_alloc_dentry()
222 dentry = d_hash_and_lookup(sb->s_root, &qstr); in efivarfs_variable_is_present()
236 struct dentry *dentry, *root = sb->s_root; in efivarfs_create_dentry()
239 int err = -ENOMEM; in efivarfs_create_dentry()
243 len = strlen(name) - EFI_VARIABLE_GUID_LEN - 1; in efivarfs_create_dentry()
255 memcpy(entry->var.VariableName, name16, name_size); in efivarfs_create_dentry()
256 memcpy(&(entry->var.VendorGuid), &vendor, sizeof(efi_guid_t)); in efivarfs_create_dentry()
270 inode->i_private = entry; in efivarfs_create_dentry()
296 return -ENOMEM; in efivarfs_callback()
311 static int efivarfs_parse_param(struct fs_context *fc, struct fs_parameter *param) in efivarfs_parse_param() argument
313 struct efivarfs_fs_info *sbi = fc->s_fs_info; in efivarfs_parse_param() local
314 struct efivarfs_mount_opts *opts = &sbi->mount_opts; in efivarfs_parse_param()
318 opt = fs_parse(fc, efivarfs_parameters, param, &result); in efivarfs_parse_param()
324 opts->uid = result.uid; in efivarfs_parse_param()
327 opts->gid = result.gid; in efivarfs_parse_param()
330 return -EINVAL; in efivarfs_parse_param()
338 struct efivarfs_fs_info *sfi = sb->s_fs_info; in efivarfs_fill_super()
343 sb->s_maxbytes = MAX_LFS_FILESIZE; in efivarfs_fill_super()
344 sb->s_blocksize = PAGE_SIZE; in efivarfs_fill_super()
345 sb->s_blocksize_bits = PAGE_SHIFT; in efivarfs_fill_super()
346 sb->s_magic = EFIVARFS_MAGIC; in efivarfs_fill_super()
347 sb->s_op = &efivarfs_ops; in efivarfs_fill_super()
348 sb->s_d_op = &efivarfs_d_ops; in efivarfs_fill_super()
349 sb->s_time_gran = 1; in efivarfs_fill_super()
352 sb->s_flags |= SB_RDONLY; in efivarfs_fill_super()
356 return -ENOMEM; in efivarfs_fill_super()
357 inode->i_op = &efivarfs_dir_inode_operations; in efivarfs_fill_super()
360 sb->s_root = root; in efivarfs_fill_super()
362 return -ENOMEM; in efivarfs_fill_super()
364 sfi->sb = sb; in efivarfs_fill_super()
365 sfi->nb.notifier_call = efivarfs_ops_notifier; in efivarfs_fill_super()
366 err = blocking_notifier_chain_register(&efivar_ops_nh, &sfi->nb); in efivarfs_fill_super()
370 register_pm_notifier(&sfi->pm_nb); in efivarfs_fill_super()
382 if (!efivar_supports_writes() && !(fc->sb_flags & SB_RDONLY)) { in efivarfs_reconfigure()
384 return -EINVAL; in efivarfs_reconfigure()
408 struct dentry *dentry = d_hash_and_lookup(ectx->sb->s_root, &qstr); in efivarfs_actor()
429 ectx->dentry = dentry; in efivarfs_actor()
452 return -ENOMEM; in efivarfs_check_missing()
456 dentry = d_hash_and_lookup(sb->s_root, &qstr); in efivarfs_check_missing()
482 * note: here s->destroy_work is free for reuse (which in efivarfs_deactivate_super_work()
500 .sb = sfi->sb, in efivarfs_pm_notify()
503 struct super_block *s = sfi->sb; in efivarfs_pm_notify()
517 if (!atomic_inc_not_zero(&s->s_active)) in efivarfs_pm_notify()
522 path.dentry = sfi->sb->s_root; in efivarfs_pm_notify()
538 INIT_WORK(&s->destroy_work, efivarfs_deactivate_super_work); in efivarfs_pm_notify()
539 schedule_work(&s->destroy_work); in efivarfs_pm_notify()
544 atomic_dec(&s->s_active); in efivarfs_pm_notify()
562 file->f_pos = 2; /* skip . and .. */ in efivarfs_pm_notify()
579 efivar_init(efivarfs_check_missing, sfi->sb, false); in efivarfs_pm_notify()
589 return -EOPNOTSUPP; in efivarfs_init_fs_context()
593 return -ENOMEM; in efivarfs_init_fs_context()
595 sfi->mount_opts.uid = GLOBAL_ROOT_UID; in efivarfs_init_fs_context()
596 sfi->mount_opts.gid = GLOBAL_ROOT_GID; in efivarfs_init_fs_context()
598 fc->s_fs_info = sfi; in efivarfs_init_fs_context()
599 fc->ops = &efivarfs_context_ops; in efivarfs_init_fs_context()
601 sfi->pm_nb.notifier_call = efivarfs_pm_notify; in efivarfs_init_fs_context()
602 sfi->pm_nb.priority = 0; in efivarfs_init_fs_context()
609 struct efivarfs_fs_info *sfi = sb->s_fs_info; in efivarfs_kill_sb()
611 blocking_notifier_chain_unregister(&efivar_ops_nh, &sfi->nb); in efivarfs_kill_sb()
613 unregister_pm_notifier(&sfi->pm_nb); in efivarfs_kill_sb()