Lines Matching refs:ef

199 	struct eventfs_file *ef, *tmp;  in eventfs_set_ef_status_free()  local
210 list_for_each_entry_srcu(ef, &ei->e_top_files, list, in eventfs_set_ef_status_free()
212 list_add_tail(&ef->del_list, &ef_del_list); in eventfs_set_ef_status_free()
221 list_for_each_entry_safe(ef, tmp, &ef_del_list, del_list) { in eventfs_set_ef_status_free()
222 list_del(&ef->del_list); in eventfs_set_ef_status_free()
223 eventfs_remove(ef); in eventfs_set_ef_status_free()
236 ef = dentry->d_fsdata; in eventfs_set_ef_status_free()
237 if (!ef) in eventfs_set_ef_status_free()
245 if (WARN_ON_ONCE((unsigned long)ef & 1)) in eventfs_set_ef_status_free()
249 ef->dentry = NULL; in eventfs_set_ef_status_free()
260 static void eventfs_post_create_dir(struct eventfs_file *ef) in eventfs_post_create_dir() argument
267 list_for_each_entry_srcu(ef_child, &ef->ei->e_top_files, list, in eventfs_post_create_dir()
269 ef_child->d_parent = ef->dentry; in eventfs_post_create_dir()
272 ti = get_tracefs(ef->dentry->d_inode); in eventfs_post_create_dir()
273 ti->private = ef->ei; in eventfs_post_create_dir()
285 create_dentry(struct eventfs_file *ef, struct dentry *parent, bool lookup) in create_dentry() argument
291 if (ef->is_freed) { in create_dentry()
295 if (ef->dentry) { in create_dentry()
296 dentry = ef->dentry; in create_dentry()
308 if (ef->ei) in create_dentry()
309 dentry = create_dir(ef->name, parent, ef->data); in create_dentry()
311 dentry = create_file(ef->name, ef->mode, parent, in create_dentry()
312 ef->data, ef->fop); in create_dentry()
320 dentry = ef->dentry; in create_dentry()
327 if (!ef->dentry && !ef->is_freed) { in create_dentry()
328 ef->dentry = dentry; in create_dentry()
329 if (ef->ei) in create_dentry()
330 eventfs_post_create_dir(ef); in create_dentry()
331 dentry->d_fsdata = ef; in create_dentry()
340 WARN_ON_ONCE(!ef->is_freed); in create_dentry()
352 static bool match_event_file(struct eventfs_file *ef, const char *name) in match_event_file() argument
357 ret = !ef->is_freed && strcmp(ef->name, name) == 0; in match_event_file()
378 struct eventfs_file *ef; in eventfs_root_lookup() local
388 list_for_each_entry_srcu(ef, &ei->e_top_files, list, in eventfs_root_lookup()
390 if (!match_event_file(ef, dentry->d_name.name)) in eventfs_root_lookup()
393 create_dentry(ef, ef->d_parent, true); in eventfs_root_lookup()
449 struct eventfs_file *ef; in dcache_dir_open_wrapper() local
472 list_for_each_entry_srcu(ef, &ei->e_top_files, list, in dcache_dir_open_wrapper()
474 d = create_dentry(ef, dentry, false); in dcache_dir_open_wrapper()
532 struct eventfs_file *ef; in eventfs_prepare_ef() local
534 ef = kzalloc(sizeof(*ef), GFP_KERNEL); in eventfs_prepare_ef()
535 if (!ef) in eventfs_prepare_ef()
538 ef->name = kstrdup(name, GFP_KERNEL); in eventfs_prepare_ef()
539 if (!ef->name) { in eventfs_prepare_ef()
540 kfree(ef); in eventfs_prepare_ef()
545 ef->ei = kzalloc(sizeof(*ef->ei), GFP_KERNEL); in eventfs_prepare_ef()
546 if (!ef->ei) { in eventfs_prepare_ef()
547 kfree(ef->name); in eventfs_prepare_ef()
548 kfree(ef); in eventfs_prepare_ef()
551 INIT_LIST_HEAD(&ef->ei->e_top_files); in eventfs_prepare_ef()
553 ef->ei = NULL; in eventfs_prepare_ef()
556 ef->iop = iop; in eventfs_prepare_ef()
557 ef->fop = fop; in eventfs_prepare_ef()
558 ef->mode = mode; in eventfs_prepare_ef()
559 ef->data = data; in eventfs_prepare_ef()
560 return ef; in eventfs_prepare_ef()
628 struct eventfs_file *ef; in eventfs_add_subsystem_dir() local
639 ef = eventfs_prepare_ef(name, S_IFDIR, NULL, NULL, NULL); in eventfs_add_subsystem_dir()
640 if (IS_ERR(ef)) in eventfs_add_subsystem_dir()
641 return ef; in eventfs_add_subsystem_dir()
644 list_add_tail(&ef->list, &ei_parent->e_top_files); in eventfs_add_subsystem_dir()
645 ef->d_parent = parent; in eventfs_add_subsystem_dir()
647 return ef; in eventfs_add_subsystem_dir()
662 struct eventfs_file *ef; in eventfs_add_dir() local
670 ef = eventfs_prepare_ef(name, S_IFDIR, NULL, NULL, NULL); in eventfs_add_dir()
671 if (IS_ERR(ef)) in eventfs_add_dir()
672 return ef; in eventfs_add_dir()
675 list_add_tail(&ef->list, &ef_parent->ei->e_top_files); in eventfs_add_dir()
676 ef->d_parent = ef_parent->dentry; in eventfs_add_dir()
678 return ef; in eventfs_add_dir()
702 struct eventfs_file *ef; in eventfs_add_events_file() local
721 ef = eventfs_prepare_ef(name, mode, fop, NULL, data); in eventfs_add_events_file()
723 if (IS_ERR(ef)) in eventfs_add_events_file()
727 list_add_tail(&ef->list, &ei->e_top_files); in eventfs_add_events_file()
728 ef->d_parent = parent; in eventfs_add_events_file()
753 struct eventfs_file *ef; in eventfs_add_file() local
764 ef = eventfs_prepare_ef(name, mode, fop, NULL, data); in eventfs_add_file()
765 if (IS_ERR(ef)) in eventfs_add_file()
769 list_add_tail(&ef->list, &ef_parent->ei->e_top_files); in eventfs_add_file()
770 ef->d_parent = ef_parent->dentry; in eventfs_add_file()
777 struct eventfs_file *ef = container_of(head, struct eventfs_file, rcu); in free_ef() local
779 kfree(ef->name); in free_ef()
780 kfree(ef->ei); in free_ef()
781 kfree(ef); in free_ef()
793 static void eventfs_remove_rec(struct eventfs_file *ef, struct list_head *head, int level) in eventfs_remove_rec() argument
797 if (!ef) in eventfs_remove_rec()
809 if (ef->ei) { in eventfs_remove_rec()
811 list_for_each_entry_srcu(ef_child, &ef->ei->e_top_files, list, in eventfs_remove_rec()
817 list_del_rcu(&ef->list); in eventfs_remove_rec()
818 list_add_tail(&ef->del_list, head); in eventfs_remove_rec()
827 void eventfs_remove(struct eventfs_file *ef) in eventfs_remove() argument
834 if (!ef) in eventfs_remove()
838 eventfs_remove_rec(ef, &ef_del_list, 0); in eventfs_remove()
839 list_for_each_entry_safe(ef, tmp, &ef_del_list, del_list) { in eventfs_remove()
840 if (ef->dentry) { in eventfs_remove()
844 dget(ef->dentry); in eventfs_remove()
860 ef->dentry->d_fsdata = (void *)(ptr | 1); in eventfs_remove()
861 dentry_list = ef->dentry; in eventfs_remove()
862 ef->dentry = NULL; in eventfs_remove()
864 call_srcu(&eventfs_srcu, &ef->rcu, free_ef); in eventfs_remove()