diff mbox series

[v2,8/9] eventfs: moving tracing/events to eventfs

Message ID 1683026600-13485-9-git-send-email-akaher@vmware.com (mailing list archive)
State Superseded
Headers show
Series tracing: introducing eventfs | expand

Commit Message

Ajay Kaher May 2, 2023, 11:23 a.m. UTC
Till now /sys/kernel/debug/tracing/events is a part of tracefs,
with-in this patch creating 'events' and it's sub-dir as eventfs.
Basically replacing tracefs calls with eventfs calls for 'events'.

Signed-off-by: Ajay Kaher <akaher@vmware.com>
Co-developed-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Tested-by: Ching-lin Yu <chinglinyu@google.com>
---
 fs/tracefs/inode.c           | 18 ++++++++++
 include/linux/trace_events.h |  1 +
 kernel/trace/trace.h         |  2 +-
 kernel/trace/trace_events.c  | 66 +++++++++++++++++++-----------------
 4 files changed, 55 insertions(+), 32 deletions(-)

Comments

kernel test robot May 2, 2023, 1:40 p.m. UTC | #1
Hi Ajay,

kernel test robot noticed the following build warnings:

[auto build test WARNING on shuah-kselftest/next]
[also build test WARNING on shuah-kselftest/fixes linus/master]
[cannot apply to rostedt-trace/for-next-urgent]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Ajay-Kaher/eventfs-introducing-struct-tracefs_inode/20230502-192949
base:   https://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest.git next
patch link:    https://lore.kernel.org/r/1683026600-13485-9-git-send-email-akaher%40vmware.com
patch subject: [PATCH v2 8/9] eventfs: moving tracing/events to eventfs
config: mips-allyesconfig (https://download.01.org/0day-ci/archive/20230502/202305022138.cJMVU9RM-lkp@intel.com/config)
compiler: mips-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/2fe2002efb23a715f5eb7a58891ff85f4e37b084
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Ajay-Kaher/eventfs-introducing-struct-tracefs_inode/20230502-192949
        git checkout 2fe2002efb23a715f5eb7a58891ff85f4e37b084
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=mips olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=mips SHELL=/bin/bash kernel/trace/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202305022138.cJMVU9RM-lkp@intel.com/

All warnings (new ones prefixed by >>):

   kernel/trace/trace_events.c: In function 'event_create_dir':
>> kernel/trace/trace_events.c:2424:24: warning: variable 'd_events' set but not used [-Wunused-but-set-variable]
    2424 |         struct dentry *d_events;
         |                        ^~~~~~~~


vim +/d_events +2424 kernel/trace/trace_events.c

ac343da7bc9048 Masami Hiramatsu         2020-09-10  2417  
1473e4417c79f1 Steven Rostedt           2009-02-24  2418  static int
7f1d2f8210195c Steven Rostedt (Red Hat  2015-05-05  2419) event_create_dir(struct dentry *parent, struct trace_event_file *file)
1473e4417c79f1 Steven Rostedt           2009-02-24  2420  {
2425bcb9240f8c Steven Rostedt (Red Hat  2015-05-05  2421) 	struct trace_event_call *call = file->event_call;
ae63b31e4d0e2e Steven Rostedt           2012-05-03  2422  	struct trace_array *tr = file->tr;
2fe2002efb23a7 Ajay Kaher               2023-05-02  2423  	struct eventfs_file *ef_subsystem = NULL;
ae63b31e4d0e2e Steven Rostedt           2012-05-03 @2424  	struct dentry *d_events;
de7b2973903c6c Mathieu Desnoyers        2014-04-08  2425  	const char *name;
fd99498989f3b3 Steven Rostedt           2009-02-28  2426  	int ret;
1473e4417c79f1 Steven Rostedt           2009-02-24  2427  
6ecc2d1ca39177 Steven Rostedt           2009-02-27  2428  	/*
6ecc2d1ca39177 Steven Rostedt           2009-02-27  2429  	 * If the trace point header did not define TRACE_SYSTEM
6ecc2d1ca39177 Steven Rostedt           2009-02-27  2430  	 * then the system would be called "TRACE_SYSTEM".
6ecc2d1ca39177 Steven Rostedt           2009-02-27  2431  	 */
ae63b31e4d0e2e Steven Rostedt           2012-05-03  2432  	if (strcmp(call->class->system, TRACE_SYSTEM) != 0) {
2fe2002efb23a7 Ajay Kaher               2023-05-02  2433  		ef_subsystem = event_subsystem_dir(tr, call->class->system, file, parent);
2fe2002efb23a7 Ajay Kaher               2023-05-02  2434  		if (!ef_subsystem)
ae63b31e4d0e2e Steven Rostedt           2012-05-03  2435  			return -ENOMEM;
ae63b31e4d0e2e Steven Rostedt           2012-05-03  2436  	} else
ae63b31e4d0e2e Steven Rostedt           2012-05-03  2437  		d_events = parent;
6ecc2d1ca39177 Steven Rostedt           2009-02-27  2438  
687fcc4aee4567 Steven Rostedt (Red Hat  2015-05-13  2439) 	name = trace_event_name(call);
2fe2002efb23a7 Ajay Kaher               2023-05-02  2440  	file->ef = eventfs_add_dir(name, ef_subsystem, &tr->eventfs_rwsem);
2fe2002efb23a7 Ajay Kaher               2023-05-02  2441  	if (IS_ERR(file->ef)) {
8434dc9340cd2e Steven Rostedt (Red Hat  2015-01-20  2442) 		pr_warn("Could not create tracefs '%s' directory\n", name);
1473e4417c79f1 Steven Rostedt           2009-02-24  2443  		return -1;
1473e4417c79f1 Steven Rostedt           2009-02-24  2444  	}
1473e4417c79f1 Steven Rostedt           2009-02-24  2445  
9b63776fa3ca96 Steven Rostedt           2012-05-10  2446  	if (call->class->reg && !(call->flags & TRACE_EVENT_FL_IGNORE_ENABLE))
2fe2002efb23a7 Ajay Kaher               2023-05-02  2447  		eventfs_add_file("enable", TRACE_MODE_WRITE, file->ef, file,
620a30e97febc8 Oleg Nesterov            2013-07-31  2448  				  &ftrace_enable_fops);
1473e4417c79f1 Steven Rostedt           2009-02-24  2449
kernel test robot May 2, 2023, 6:07 p.m. UTC | #2
Hi Ajay,

kernel test robot noticed the following build warnings:

[auto build test WARNING on shuah-kselftest/next]
[also build test WARNING on shuah-kselftest/fixes linus/master v6.3 next-20230428]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Ajay-Kaher/eventfs-introducing-struct-tracefs_inode/20230502-192949
base:   https://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest.git next
patch link:    https://lore.kernel.org/r/1683026600-13485-9-git-send-email-akaher%40vmware.com
patch subject: [PATCH v2 8/9] eventfs: moving tracing/events to eventfs
config: i386-randconfig-a011-20230501 (https://download.01.org/0day-ci/archive/20230503/202305030116.Gu6yyvKj-lkp@intel.com/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/2fe2002efb23a715f5eb7a58891ff85f4e37b084
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Ajay-Kaher/eventfs-introducing-struct-tracefs_inode/20230502-192949
        git checkout 2fe2002efb23a715f5eb7a58891ff85f4e37b084
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash kernel/trace/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202305030116.Gu6yyvKj-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> kernel/trace/trace_events.c:2424:17: warning: variable 'd_events' set but not used [-Wunused-but-set-variable]
           struct dentry *d_events;
                          ^
   1 warning generated.


vim +/d_events +2424 kernel/trace/trace_events.c

ac343da7bc9048 Masami Hiramatsu         2020-09-10  2417  
1473e4417c79f1 Steven Rostedt           2009-02-24  2418  static int
7f1d2f8210195c Steven Rostedt (Red Hat  2015-05-05  2419) event_create_dir(struct dentry *parent, struct trace_event_file *file)
1473e4417c79f1 Steven Rostedt           2009-02-24  2420  {
2425bcb9240f8c Steven Rostedt (Red Hat  2015-05-05  2421) 	struct trace_event_call *call = file->event_call;
ae63b31e4d0e2e Steven Rostedt           2012-05-03  2422  	struct trace_array *tr = file->tr;
2fe2002efb23a7 Ajay Kaher               2023-05-02  2423  	struct eventfs_file *ef_subsystem = NULL;
ae63b31e4d0e2e Steven Rostedt           2012-05-03 @2424  	struct dentry *d_events;
de7b2973903c6c Mathieu Desnoyers        2014-04-08  2425  	const char *name;
fd99498989f3b3 Steven Rostedt           2009-02-28  2426  	int ret;
1473e4417c79f1 Steven Rostedt           2009-02-24  2427  
6ecc2d1ca39177 Steven Rostedt           2009-02-27  2428  	/*
6ecc2d1ca39177 Steven Rostedt           2009-02-27  2429  	 * If the trace point header did not define TRACE_SYSTEM
6ecc2d1ca39177 Steven Rostedt           2009-02-27  2430  	 * then the system would be called "TRACE_SYSTEM".
6ecc2d1ca39177 Steven Rostedt           2009-02-27  2431  	 */
ae63b31e4d0e2e Steven Rostedt           2012-05-03  2432  	if (strcmp(call->class->system, TRACE_SYSTEM) != 0) {
2fe2002efb23a7 Ajay Kaher               2023-05-02  2433  		ef_subsystem = event_subsystem_dir(tr, call->class->system, file, parent);
2fe2002efb23a7 Ajay Kaher               2023-05-02  2434  		if (!ef_subsystem)
ae63b31e4d0e2e Steven Rostedt           2012-05-03  2435  			return -ENOMEM;
ae63b31e4d0e2e Steven Rostedt           2012-05-03  2436  	} else
ae63b31e4d0e2e Steven Rostedt           2012-05-03  2437  		d_events = parent;
6ecc2d1ca39177 Steven Rostedt           2009-02-27  2438  
687fcc4aee4567 Steven Rostedt (Red Hat  2015-05-13  2439) 	name = trace_event_name(call);
2fe2002efb23a7 Ajay Kaher               2023-05-02  2440  	file->ef = eventfs_add_dir(name, ef_subsystem, &tr->eventfs_rwsem);
2fe2002efb23a7 Ajay Kaher               2023-05-02  2441  	if (IS_ERR(file->ef)) {
8434dc9340cd2e Steven Rostedt (Red Hat  2015-01-20  2442) 		pr_warn("Could not create tracefs '%s' directory\n", name);
1473e4417c79f1 Steven Rostedt           2009-02-24  2443  		return -1;
1473e4417c79f1 Steven Rostedt           2009-02-24  2444  	}
1473e4417c79f1 Steven Rostedt           2009-02-24  2445  
9b63776fa3ca96 Steven Rostedt           2012-05-10  2446  	if (call->class->reg && !(call->flags & TRACE_EVENT_FL_IGNORE_ENABLE))
2fe2002efb23a7 Ajay Kaher               2023-05-02  2447  		eventfs_add_file("enable", TRACE_MODE_WRITE, file->ef, file,
620a30e97febc8 Oleg Nesterov            2013-07-31  2448  				  &ftrace_enable_fops);
1473e4417c79f1 Steven Rostedt           2009-02-24  2449
Yujie Liu May 5, 2023, 9:37 a.m. UTC | #3
Hello,

kernel test robot noticed "WARNING:at_fs/namei.c:#lookup_one_len" on:

commit: 2fe2002efb23a715f5eb7a58891ff85f4e37b084 ("[PATCH v2 8/9] eventfs: moving tracing/events to eventfs")
url: https://github.com/intel-lab-lkp/linux/commits/Ajay-Kaher/eventfs-introducing-struct-tracefs_inode/20230502-192949
base: https://git.kernel.org/cgit/linux/kernel/git/shuah/linux-kselftest.git next
patch link: https://lore.kernel.org/all/1683026600-13485-9-git-send-email-akaher@vmware.com/
patch subject: [PATCH v2 8/9] eventfs: moving tracing/events to eventfs

in testcase: stress-ng
version: stress-ng-x86_64-0.15.04-1_20230503
with following parameters:

	nr_threads: 100%
	testtime: 60s
	class: cpu
	test: uprobe
	cpufreq_governor: performance

compiler: gcc-11
test machine: 128 threads 2 sockets Intel(R) Xeon(R) Platinum 8358 CPU @ 2.60GHz (Ice Lake) with 128G memory

(please refer to attached dmesg/kmsg for entire log/backtrace)


If you fix the issue, kindly add following tag
| Reported-by: kernel test robot <yujie.liu@intel.com>
| Link: https://lore.kernel.org/oe-lkp/202305051619.9a469a9a-yujie.liu@intel.com


[   49.551466][ T5878] ------------[ cut here ]------------
[ 49.557236][ T5878] WARNING: CPU: 68 PID: 5878 at fs/namei.c:2705 lookup_one_len (fs/namei.c:2705 (discriminator 1)) 
[   49.565959][ T5878] Modules linked in: intel_rapl_msr intel_rapl_common x86_pkg_temp_thermal intel_powerclamp coretemp btrfs blake2b_generic xor raid6_pq libcrc32c sd_mod t10_pi kvm_intel crc64_rocksoft_generic crc64_rocksoft kvm crc64 irqbypass sg crct10dif_pclmul crc32_pclmul crc32c_intel ipmi_ssif ghash_clmulni_intel sha512_ssse3 rapl ahci acpi_ipmi intel_cstate libahci ast mei_me drm_shmem_helper ipmi_si drm_kms_helper ipmi_devintf ioatdma syscopyarea sysfillrect intel_uncore libata sysimgblt mei joydev dca wmi ipmi_msghandler acpi_pad acpi_power_meter drm fuse ip_tables
[   49.618899][ T5878] CPU: 68 PID: 5878 Comm: stress-ng-uprob Not tainted 6.3.0-rc1-00033-g2fe2002efb23 #1
[ 49.628810][ T5878] RIP: 0010:lookup_one_len (fs/namei.c:2705 (discriminator 1)) 
[ 49.634395][ T5878] Code: 83 c4 18 5d c3 cc cc cc cc 31 d2 48 89 ee 48 89 e7 e8 8a da ff ff 48 85 c0 75 d4 31 d2 48 89 ee 48 89 e7 e8 b8 db ff ff eb c5 <0f> 0b eb a6 e8 ad 85 ac 00 66 66 2e 0f 1f 84 00 00 00 00 00 66 66
All code
========
   0:	83 c4 18             	add    $0x18,%esp
   3:	5d                   	pop    %rbp
   4:	c3                   	ret
   5:	cc                   	int3
   6:	cc                   	int3
   7:	cc                   	int3
   8:	cc                   	int3
   9:	31 d2                	xor    %edx,%edx
   b:	48 89 ee             	mov    %rbp,%rsi
   e:	48 89 e7             	mov    %rsp,%rdi
  11:	e8 8a da ff ff       	call   0xffffffffffffdaa0
  16:	48 85 c0             	test   %rax,%rax
  19:	75 d4                	jne    0xffffffffffffffef
  1b:	31 d2                	xor    %edx,%edx
  1d:	48 89 ee             	mov    %rbp,%rsi
  20:	48 89 e7             	mov    %rsp,%rdi
  23:	e8 b8 db ff ff       	call   0xffffffffffffdbe0
  28:	eb c5                	jmp    0xffffffffffffffef
  2a:*	0f 0b                	ud2		<-- trapping instruction
  2c:	eb a6                	jmp    0xffffffffffffffd4
  2e:	e8 ad 85 ac 00       	call   0xac85e0
  33:	66 66 2e 0f 1f 84 00 	data16 cs nopw 0x0(%rax,%rax,1)
  3a:	00 00 00 00 
  3e:	66                   	data16
  3f:	66                   	data16

Code starting with the faulting instruction
===========================================
   0:	0f 0b                	ud2
   2:	eb a6                	jmp    0xffffffffffffffaa
   4:	e8 ad 85 ac 00       	call   0xac85b6
   9:	66 66 2e 0f 1f 84 00 	data16 cs nopw 0x0(%rax,%rax,1)
  10:	00 00 00 00 
  14:	66                   	data16
  15:	66                   	data16
[   49.654574][ T5878] RSP: 0018:ffa000002b207bb0 EFLAGS: 00010246
[   49.660865][ T5878] RAX: 0000000000000000 RBX: 00000000000041ed RCX: 0000000000000012
[   49.669066][ T5878] RDX: 0000000000000012 RSI: ff110010866cfec0 RDI: ff11000104c631c0
[   49.677271][ T5878] RBP: ff110010866cfec0 R08: ffffffff82268900 R09: ff11000104c631c0
[   49.685392][ T5878] R10: ff110020610bfc80 R11: 00000012d7445f9b R12: ff11000104c631c0
[   49.693516][ T5878] R13: ffffffff82268900 R14: ffffffff82268840 R15: 0000000000000000
[   49.701640][ T5878] FS:  00007fcddb229740(0000) GS:ff1100103fb00000(0000) knlGS:0000000000000000
[   49.710712][ T5878] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   49.717444][ T5878] CR2: 00007fcddb3704e0 CR3: 00000020628e0001 CR4: 0000000000771ee0
[   49.725566][ T5878] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[   49.733686][ T5878] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[   49.741807][ T5878] PKRU: 55555554
[   49.745507][ T5878] Call Trace:
[   49.748961][ T5878]  <TASK>
[ 49.752082][ T5878] eventfs_start_creating (fs/tracefs/inode.c:519) 
[ 49.757416][ T5878] eventfs_create_dir (fs/tracefs/event_inode.c:187 (discriminator 3)) 
[ 49.762488][ T5878] eventfs_root_lookup (fs/tracefs/event_inode.c:291) 
[ 49.767637][ T5878] __lookup_slow (fs/namei.c:1686) 
[ 49.772268][ T5878] walk_component (include/linux/fs.h:773 fs/namei.c:1704 fs/namei.c:1994) 
[ 49.777016][ T5878] link_path_walk+0x24e/0x3b0 
[ 49.783462][ T5878] ? path_init (fs/namei.c:2387) 
[ 49.788021][ T5878] path_openat (fs/namei.c:3711) 
[ 49.792463][ T5878] do_filp_open (fs/namei.c:3742) 
[ 49.797021][ T5878] ? __check_object_size (mm/memremap.c:107 mm/memremap.c:144) 
[ 49.803055][ T5878] do_sys_openat2 (fs/open.c:1348) 
[ 49.807740][ T5878] __x64_sys_openat (fs/open.c:1375) 
[ 49.812512][ T5878] do_syscall_64 (arch/x86/entry/common.c:50 arch/x86/entry/common.c:80) 
[ 49.817068][ T5878] entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:120) 
[   49.823092][ T5878] RIP: 0033:0x7fcddb3b84e7
[ 49.827584][ T5878] Code: 25 00 00 41 00 3d 00 00 41 00 74 47 64 8b 04 25 18 00 00 00 85 c0 75 6b 44 89 e2 48 89 ee bf 9c ff ff ff b8 01 01 00 00 0f 05 <48> 3d 00 f0 ff ff 0f 87 95 00 00 00 48 8b 4c 24 28 64 48 2b 0c 25
All code
========
   0:	25 00 00 41 00       	and    $0x410000,%eax
   5:	3d 00 00 41 00       	cmp    $0x410000,%eax
   a:	74 47                	je     0x53
   c:	64 8b 04 25 18 00 00 	mov    %fs:0x18,%eax
  13:	00 
  14:	85 c0                	test   %eax,%eax
  16:	75 6b                	jne    0x83
  18:	44 89 e2             	mov    %r12d,%edx
  1b:	48 89 ee             	mov    %rbp,%rsi
  1e:	bf 9c ff ff ff       	mov    $0xffffff9c,%edi
  23:	b8 01 01 00 00       	mov    $0x101,%eax
  28:	0f 05                	syscall
  2a:*	48 3d 00 f0 ff ff    	cmp    $0xfffffffffffff000,%rax		<-- trapping instruction
  30:	0f 87 95 00 00 00    	ja     0xcb
  36:	48 8b 4c 24 28       	mov    0x28(%rsp),%rcx
  3b:	64                   	fs
  3c:	48                   	rex.W
  3d:	2b                   	.byte 0x2b
  3e:	0c 25                	or     $0x25,%al

Code starting with the faulting instruction
===========================================
   0:	48 3d 00 f0 ff ff    	cmp    $0xfffffffffffff000,%rax
   6:	0f 87 95 00 00 00    	ja     0xa1
   c:	48 8b 4c 24 28       	mov    0x28(%rsp),%rcx
  11:	64                   	fs
  12:	48                   	rex.W
  13:	2b                   	.byte 0x2b
  14:	0c 25                	or     $0x25,%al
[   49.847467][ T5878] RSP: 002b:00007ffd43974260 EFLAGS: 00000246 ORIG_RAX: 0000000000000101
[   49.855986][ T5878] RAX: ffffffffffffffda RBX: 00007ffd439743f0 RCX: 00007fcddb3b84e7
[   49.864089][ T5878] RDX: 0000000000000241 RSI: 00007ffd43976470 RDI: 00000000ffffff9c
[   49.872145][ T5878] RBP: 00007ffd43976470 R08: 00000000ffffffff R09: 00007ffd43974190
[   49.880191][ T5878] R10: 00000000000001b6 R11: 0000000000000246 R12: 0000000000000241
[   49.888227][ T5878] R13: 00007ffd43974360 R14: 00007ffd43977630 R15: 00007ffd43976470
[   49.896273][ T5878]  </TASK>
[   49.899371][ T5878] ---[ end trace 0000000000000000 ]---


To reproduce:

        git clone https://github.com/intel/lkp-tests.git
        cd lkp-tests
        sudo bin/lkp install job.yaml           # job file is attached in this email
        bin/lkp split-job --compatible job.yaml # generate the yaml file for lkp run
        sudo bin/lkp run generated-yaml-file

        # if come across any failure that blocks the test,
        # please remove ~/.lkp and /lkp dir to run from a clean state.
Ajay Kaher May 9, 2023, 12:29 p.m. UTC | #4
> On 02/05/23, 11:42 PM, "kernel test robot" <lkp@intel.com> wrote:
>   >> kernel/trace/trace_events.c:2424:17: warning: variable 'd_events' set but not used [-Wunused-but-set-variable]
>           struct dentry *d_events;
>                       ^
>    1 warning generated.
>

Steve, with-in event_create_dir(), do we have any scenario when file->event_call->class->system
doesn't have TRACE_SYSTEM? And need to execute following:

ae63b31e4d0e2e Steven Rostedt           2012-05-03  2437                d_events = parent;

looking for your input if we could remove d_events from event_create_dir().

- Ajay

>    vim +/d_events +2424 kernel/trace/trace_events.c
>
> ac343da7bc9048 Masami Hiramatsu         2020-09-10  2417
> 1473e4417c79f1 Steven Rostedt           2009-02-24  2418  static int
> 7f1d2f8210195c Steven Rostedt (Red Hat  2015-05-05  2419) event_create_dir(struct dentry *parent, struct trace_event_file *file)
> 1473e4417c79f1 Steven Rostedt           2009-02-24  2420  {
> 2425bcb9240f8c Steven Rostedt (Red Hat  2015-05-05  2421)       struct trace_event_call *call = file->event_call;
> ae63b31e4d0e2e Steven Rostedt           2012-05-03  2422        struct trace_array *tr = file->tr;
> 2fe2002efb23a7 Ajay Kaher               2023-05-02  2423        struct eventfs_file *ef_subsystem = NULL;
> ae63b31e4d0e2e Steven Rostedt           2012-05-03 @2424        struct dentry *d_events;
> de7b2973903c6c Mathieu Desnoyers        2014-04-08  2425        const char *name;
> fd99498989f3b3 Steven Rostedt           2009-02-28  2426        int ret;
> 1473e4417c79f1 Steven Rostedt           2009-02-24  2427
> 6ecc2d1ca39177 Steven Rostedt           2009-02-27  2428        /*
> 6ecc2d1ca39177 Steven Rostedt           2009-02-27  2429         * If the trace point header did not define TRACE_SYSTEM
> 6ecc2d1ca39177 Steven Rostedt           2009-02-27  2430         * then the system would be called "TRACE_SYSTEM".
> 6ecc2d1ca39177 Steven Rostedt           2009-02-27  2431         */
> ae63b31e4d0e2e Steven Rostedt           2012-05-03  2432        if (strcmp(call->class->system, TRACE_SYSTEM) != 0) {
> 2fe2002efb23a7 Ajay Kaher               2023-05-02  2433                ef_subsystem = event_subsystem_dir(tr, call->class->system, file, parent);
> 2fe2002efb23a7 Ajay Kaher               2023-05-02  2434                if (!ef_subsystem)
> ae63b31e4d0e2e Steven Rostedt           2012-05-03  2435                        return -ENOMEM;
> ae63b31e4d0e2e Steven Rostedt           2012-05-03  2436        } else
> ae63b31e4d0e2e Steven Rostedt           2012-05-03  2437                d_events = parent;
> 6ecc2d1ca39177 Steven Rostedt           2009-02-27  2438
> 687fcc4aee4567 Steven Rostedt (Red Hat  2015-05-13  2439)       name = trace_event_name(call);
> 2fe2002efb23a7 Ajay Kaher               2023-05-02  2440        file->ef = eventfs_add_dir(name, ef_subsystem, &tr->eventfs_rwsem);
> 2fe2002efb23a7 Ajay Kaher               2023-05-02  2441        if (IS_ERR(file->ef)) {
> 8434dc9340cd2e Steven Rostedt (Red Hat  2015-01-20  2442)               pr_warn("Could not create tracefs '%s' directory\n", name);
> 1473e4417c79f1 Steven Rostedt           2009-02-24  2443                return -1;
> 1473e4417c79f1 Steven Rostedt           2009-02-24  2444        }
> 1473e4417c79f1 Steven Rostedt           2009-02-24  2445
> 9b63776fa3ca96 Steven Rostedt           2012-05-10  2446        if (call->class->reg && !(call->flags & TRACE_EVENT_FL_IGNORE_ENABLE))
> 2fe2002efb23a7 Ajay Kaher               2023-05-02  2447                eventfs_add_file("enable", TRACE_MODE_WRITE, file->ef, file,
> 620a30e97febc8 Oleg Nesterov            2013-07-31  2448                                  &ftrace_enable_fops);
> 1473e4417c79f1 Steven Rostedt           2009-02-24  2449
Steven Rostedt May 9, 2023, 4:45 p.m. UTC | #5
On Tue, 9 May 2023 12:29:23 +0000
Ajay Kaher <akaher@vmware.com> wrote:

> > On 02/05/23, 11:42 PM, "kernel test robot" <lkp@intel.com> wrote:  
> >   >> kernel/trace/trace_events.c:2424:17: warning: variable 'd_events' set but not used [-Wunused-but-set-variable]  
> >           struct dentry *d_events;
> >                       ^
> >    1 warning generated.
> >  
> 
> Steve, with-in event_create_dir(), do we have any scenario when file->event_call->class->system
> doesn't have TRACE_SYSTEM? And need to execute following:
> 
> ae63b31e4d0e2e Steven Rostedt           2012-05-03  2437                d_events = parent;
> 
> looking for your input if we could remove d_events from event_create_dir().
> 

I have hit this in the beginning, but I don't think it's an issue
anymore. Perhaps just have it be:

        if (WARN_ON_ONCE(strcmp(call->class->system, TRACE_SYSTEM) == 0))
		return -ENODEV;

        ef_subsystem = event_subsystem_dir(tr, call->class->system, file, parent);

Hmm, how about just add this patch before your patch set:

-- Steve

From: "Steven Rostedt (Google)" <rostedt@goodmis.org>
Subject: [PATCH] tracing: Require all trace events to have a TRACE_SYSTEM

The creation of the trace event directory requires that a TRACE_SYSTEM is
defined that the trace event directory is added within the system it was
defined in.

The code handled the case where a TRACE_SYSTEM was not added, and would
then add the event at the events directory. But nothing should be doing
this. This code also prevents the implementation of creating dynamic
dentrys for the eventfs system.

As this path has never been hit on correct code, remove it. If it does get
hit, issues a WARN_ON_ONCE() and return ENODEV.

Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---

  (lightly tested)

 kernel/trace/trace_events.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 654ffa40457a..16bc5ba45507 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -2424,14 +2424,15 @@ event_create_dir(struct dentry *parent, struct trace_event_file *file)
 
 	/*
 	 * If the trace point header did not define TRACE_SYSTEM
-	 * then the system would be called "TRACE_SYSTEM".
+	 * then the system would be called "TRACE_SYSTEM". This should
+	 * never happen.
 	 */
-	if (strcmp(call->class->system, TRACE_SYSTEM) != 0) {
-		d_events = event_subsystem_dir(tr, call->class->system, file, parent);
-		if (!d_events)
-			return -ENOMEM;
-	} else
-		d_events = parent;
+	if (WARN_ON_ONCE(strcmp(call->class->system, TRACE_SYSTEM) == 0))
+		return -ENODEV;
+
+	d_events = event_subsystem_dir(tr, call->class->system, file, parent);
+	if (!d_events)
+		return -ENOMEM;
 
 	name = trace_event_name(call);
 	file->dir = tracefs_create_dir(name, d_events);
Ajay Kaher May 10, 2023, 11:11 a.m. UTC | #6
> On 09-May-2023, at 10:15 PM, Steven Rostedt <rostedt@goodmis.org> wrote:
> 
> !! External Email
> 
> On Tue, 9 May 2023 12:29:23 +0000
> Ajay Kaher <akaher@vmware.com> wrote:
> 
>> > On 02/05/23, 11:42 PM, "kernel test robot" <lkp@intel.com> wrote:
>>>>> kernel/trace/trace_events.c:2424:17: warning: variable 'd_events' set but not used [-Wunused-but-set-variable]
>>>          struct dentry *d_events;
>>>                      ^
>>>   1 warning generated.
>>> 
>> 
>> Steve, with-in event_create_dir(), do we have any scenario when file->event_call->class->system
>> doesn't have TRACE_SYSTEM? And need to execute following:
>> 
>> ae63b31e4d0e2e Steven Rostedt           2012-05-03  2437                d_events = parent;
>> 
>> looking for your input if we could remove d_events from event_create_dir().
>> 
> 
> I have hit this in the beginning, but I don't think it's an issue
> anymore. Perhaps just have it be:
> 
>        if (WARN_ON_ONCE(strcmp(call->class->system, TRACE_SYSTEM) == 0))
>                return -ENODEV;
> 
>        ef_subsystem = event_subsystem_dir(tr, call->class->system, file, parent);
> 
> Hmm, how about just add this patch before your patch set:
> 

Sounds good. Thanks Steve :)
Once you will merge below patch, I will rebase this patch in v3.

- Ajay

> 
> From: "Steven Rostedt (Google)" <rostedt@goodmis.org>
> Subject: [PATCH] tracing: Require all trace events to have a TRACE_SYSTEM
> 
> The creation of the trace event directory requires that a TRACE_SYSTEM is
> defined that the trace event directory is added within the system it was
> defined in.
> 
> The code handled the case where a TRACE_SYSTEM was not added, and would
> then add the event at the events directory. But nothing should be doing
> this. This code also prevents the implementation of creating dynamic
> dentrys for the eventfs system.
> 
> As this path has never been hit on correct code, remove it. If it does get
> hit, issues a WARN_ON_ONCE() and return ENODEV.
> 
> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
> ---
> 
>  (lightly tested)
> 
> kernel/trace/trace_events.c | 15 ++++++++-------
> 1 file changed, 8 insertions(+), 7 deletions(-)
> 
> diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
> index 654ffa40457a..16bc5ba45507 100644
> --- a/kernel/trace/trace_events.c
> +++ b/kernel/trace/trace_events.c
> @@ -2424,14 +2424,15 @@ event_create_dir(struct dentry *parent, struct trace_event_file *file)
> 
>        /*
>         * If the trace point header did not define TRACE_SYSTEM
> -        * then the system would be called "TRACE_SYSTEM".
> +        * then the system would be called "TRACE_SYSTEM". This should
> +        * never happen.
>         */
> -       if (strcmp(call->class->system, TRACE_SYSTEM) != 0) {
> -               d_events = event_subsystem_dir(tr, call->class->system, file, parent);
> -               if (!d_events)
> -                       return -ENOMEM;
> -       } else
> -               d_events = parent;
> +       if (WARN_ON_ONCE(strcmp(call->class->system, TRACE_SYSTEM) == 0))
> +               return -ENODEV;
> +
> +       d_events = event_subsystem_dir(tr, call->class->system, file, parent);
> +       if (!d_events)
> +               return -ENOMEM;
> 
>        name = trace_event_name(call);
>        file->dir = tracefs_create_dir(name, d_events);
> --
> 2.39.2
> 
> 
> !! External Email: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender.
Steven Rostedt May 12, 2023, 10:59 p.m. UTC | #7
On Wed, 10 May 2023 11:11:15 +0000
Ajay Kaher <akaher@vmware.com> wrote:

> Sounds good. Thanks Steve :)
> Once you will merge below patch, I will rebase this patch in v3.

Feel free to just add it at the start of your queue. You just need to
keep the "From" line and it will be added as my patch.

-- Steve
Ajay Kaher May 15, 2023, 11:35 a.m. UTC | #8
> On 13-May-2023, at 4:29 AM, Steven Rostedt <rostedt@goodmis.org> wrote:
> 
> !! External Email
> 
> On Wed, 10 May 2023 11:11:15 +0000
> Ajay Kaher <akaher@vmware.com> wrote:
> 
>> Sounds good. Thanks Steve :)
>> Once you will merge below patch, I will rebase this patch in v3.
> 
> Feel free to just add it at the start of your queue. You just need to
> keep the "From" line and it will be added as my patch.

Ok, I will include in v3.

-Ajay
Ajay Kaher May 17, 2023, 12:40 p.m. UTC | #9
> kernel test robot noticed "WARNING:at_fs/namei.c:#lookup_one_len" on:
>
> commit: 2fe2002efb23a715f5eb7a58891ff85f4e37b084 ("[PATCH v2 8/9] eventfs: moving tracing/events to eventfs")
> url: https://github.com/intel-lab-lkp/linux/commits/Ajay-Kaher/eventfs-introducing-struct-tracefs_inode/20230502-192949
> base: https://git.kernel.org/cgit/linux/kernel/git/shuah/linux-kselftest.git next
> patch link: https://lore.kernel.org/all/1683026600-13485-9-git-send-email-akaher@vmware.com/
> patch subject: [PATCH v2 8/9] eventfs: moving tracing/events to eventfs
.
.
.
>  49.752082][ T5878] eventfs_start_creating (fs/tracefs/inode.c:519) 
> [ 49.757416][ T5878] eventfs_create_dir (fs/tracefs/event_inode.c:187 (discriminator 3)) 
> [ 49.762488][ T5878] eventfs_root_lookup (fs/tracefs/event_inode.c:291) 
> [ 49.767637][ T5878] __lookup_slow (fs/namei.c:1686) 
> [ 49.772268][ T5878] walk_component (include/linux/fs.h:773 fs/namei.c:1704 fs/namei.c:1994) 
> [ 49.777016][ T5878] link_path_walk+0x24e/0x3b0 
> [ 49.783462][ T5878] ? path_init (fs/namei.c:2387) 
> [ 49.788021][ T5878] path_openat (fs/namei.c:3711) 
> [ 49.792463][ T5878] do_filp_open (fs/namei.c:3742) 
> [ 49.797021][ T5878] ? __check_object_size (mm/memremap.c:107 mm/memremap.c:144) 
> [ 49.803055][ T5878] do_sys_openat2 (fs/open.c:1348) 
> [ 49.807740][ T5878] __x64_sys_openat (fs/open.c:1375) 
> [ 49.812512][ T5878] do_syscall_64 (arch/x86/entry/common.c:50 arch/x86/entry/common.c:80) 
> [ 49.817068][ T5878] entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:120) 
> [   49.823092][ T5878] RIP: 0033:0x7fcddb3b84e7

Steve, locally I have reproduced this issue using:
    lkp run job-cpu-100%-uprobe-60s.yaml

And also fixed, I will include this fix as well in v3.

Thanks to lkp, kernel test robot <yujie.liu@intel.com>.

-Ajay
Steven Rostedt May 17, 2023, 2:14 p.m. UTC | #10
On Wed, 17 May 2023 18:10:07 +0530
Ajay Kaher <akaher@vmware.com> wrote:

> Steve, locally I have reproduced this issue using:
>     lkp run job-cpu-100%-uprobe-60s.yaml
> 
> And also fixed, I will include this fix as well in v3.

Great. Thanks Ajay!

-- Steve
diff mbox series

Patch

diff --git a/fs/tracefs/inode.c b/fs/tracefs/inode.c
index 76820d3e9..a098d7153 100644
--- a/fs/tracefs/inode.c
+++ b/fs/tracefs/inode.c
@@ -374,6 +374,23 @@  static const struct super_operations tracefs_super_operations = {
 	.show_options	= tracefs_show_options,
 };
 
+static void tracefs_dentry_iput(struct dentry *dentry, struct inode *inode)
+{
+	struct tracefs_inode *ti;
+
+	if (!dentry || !inode)
+		return;
+
+	ti = get_tracefs(inode);
+	if (ti && ti->flags & TRACEFS_EVENT_INODE)
+		eventfs_set_ef_status_free(dentry);
+	iput(inode);
+}
+
+static const struct dentry_operations tracefs_dentry_operations = {
+	.d_iput = tracefs_dentry_iput,
+};
+
 static int trace_fill_super(struct super_block *sb, void *data, int silent)
 {
 	static const struct tree_descr trace_files[] = {{""}};
@@ -396,6 +413,7 @@  static int trace_fill_super(struct super_block *sb, void *data, int silent)
 		goto fail;
 
 	sb->s_op = &tracefs_super_operations;
+	sb->s_d_op = &tracefs_dentry_operations;
 
 	tracefs_apply_options(sb, false);
 
diff --git a/include/linux/trace_events.h b/include/linux/trace_events.h
index 0e373222a..696843d46 100644
--- a/include/linux/trace_events.h
+++ b/include/linux/trace_events.h
@@ -635,6 +635,7 @@  struct trace_event_file {
 	struct list_head		list;
 	struct trace_event_call		*event_call;
 	struct event_filter __rcu	*filter;
+	struct eventfs_file             *ef;
 	struct dentry			*dir;
 	struct trace_array		*tr;
 	struct trace_subsystem_dir	*system;
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index 3726725c8..ee9002852 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -1308,7 +1308,7 @@  struct trace_subsystem_dir {
 	struct list_head		list;
 	struct event_subsystem		*subsystem;
 	struct trace_array		*tr;
-	struct dentry			*entry;
+	struct eventfs_file             *ef;
 	int				ref_count;
 	int				nr_events;
 };
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 654ffa404..01bd3dda6 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -988,7 +988,8 @@  static void remove_subsystem(struct trace_subsystem_dir *dir)
 		return;
 
 	if (!--dir->nr_events) {
-		tracefs_remove(dir->entry);
+		if (dir->ef)
+			eventfs_remove(dir->ef);
 		list_del(&dir->list);
 		__put_system_dir(dir);
 	}
@@ -1009,7 +1010,8 @@  static void remove_event_file_dir(struct trace_event_file *file)
 
 		tracefs_remove(dir);
 	}
-
+	if (file->ef)
+		eventfs_remove(file->ef);
 	list_del(&file->list);
 	remove_subsystem(file->system);
 	free_event_filter(file->filter);
@@ -2295,13 +2297,13 @@  create_new_subsystem(const char *name)
 	return NULL;
 }
 
-static struct dentry *
+static struct eventfs_file *
 event_subsystem_dir(struct trace_array *tr, const char *name,
 		    struct trace_event_file *file, struct dentry *parent)
 {
 	struct event_subsystem *system, *iter;
 	struct trace_subsystem_dir *dir;
-	struct dentry *entry;
+	int res;
 
 	/* First see if we did not already create this dir */
 	list_for_each_entry(dir, &tr->systems, list) {
@@ -2309,7 +2311,7 @@  event_subsystem_dir(struct trace_array *tr, const char *name,
 		if (strcmp(system->name, name) == 0) {
 			dir->nr_events++;
 			file->system = dir;
-			return dir->entry;
+			return dir->ef;
 		}
 	}
 
@@ -2333,8 +2335,8 @@  event_subsystem_dir(struct trace_array *tr, const char *name,
 	} else
 		__get_system(system);
 
-	dir->entry = tracefs_create_dir(name, parent);
-	if (!dir->entry) {
+	dir->ef = eventfs_add_subsystem_dir(name, parent, &tr->eventfs_rwsem);
+	if (IS_ERR(dir->ef)) {
 		pr_warn("Failed to create system directory %s\n", name);
 		__put_system(system);
 		goto out_free;
@@ -2349,22 +2351,22 @@  event_subsystem_dir(struct trace_array *tr, const char *name,
 	/* the ftrace system is special, do not create enable or filter files */
 	if (strcmp(name, "ftrace") != 0) {
 
-		entry = tracefs_create_file("filter", TRACE_MODE_WRITE,
-					    dir->entry, dir,
+		res = eventfs_add_file("filter", TRACE_MODE_WRITE,
+					    dir->ef, dir,
 					    &ftrace_subsystem_filter_fops);
-		if (!entry) {
+		if (res) {
 			kfree(system->filter);
 			system->filter = NULL;
 			pr_warn("Could not create tracefs '%s/filter' entry\n", name);
 		}
 
-		trace_create_file("enable", TRACE_MODE_WRITE, dir->entry, dir,
+		eventfs_add_file("enable", TRACE_MODE_WRITE, dir->ef, dir,
 				  &ftrace_system_enable_fops);
 	}
 
 	list_add(&dir->list, &tr->systems);
 
-	return dir->entry;
+	return dir->ef;
 
  out_free:
 	kfree(dir);
@@ -2418,6 +2420,7 @@  event_create_dir(struct dentry *parent, struct trace_event_file *file)
 {
 	struct trace_event_call *call = file->event_call;
 	struct trace_array *tr = file->tr;
+	struct eventfs_file *ef_subsystem = NULL;
 	struct dentry *d_events;
 	const char *name;
 	int ret;
@@ -2427,26 +2430,26 @@  event_create_dir(struct dentry *parent, struct trace_event_file *file)
 	 * then the system would be called "TRACE_SYSTEM".
 	 */
 	if (strcmp(call->class->system, TRACE_SYSTEM) != 0) {
-		d_events = event_subsystem_dir(tr, call->class->system, file, parent);
-		if (!d_events)
+		ef_subsystem = event_subsystem_dir(tr, call->class->system, file, parent);
+		if (!ef_subsystem)
 			return -ENOMEM;
 	} else
 		d_events = parent;
 
 	name = trace_event_name(call);
-	file->dir = tracefs_create_dir(name, d_events);
-	if (!file->dir) {
+	file->ef = eventfs_add_dir(name, ef_subsystem, &tr->eventfs_rwsem);
+	if (IS_ERR(file->ef)) {
 		pr_warn("Could not create tracefs '%s' directory\n", name);
 		return -1;
 	}
 
 	if (call->class->reg && !(call->flags & TRACE_EVENT_FL_IGNORE_ENABLE))
-		trace_create_file("enable", TRACE_MODE_WRITE, file->dir, file,
+		eventfs_add_file("enable", TRACE_MODE_WRITE, file->ef, file,
 				  &ftrace_enable_fops);
 
 #ifdef CONFIG_PERF_EVENTS
 	if (call->event.type && call->class->reg)
-		trace_create_file("id", TRACE_MODE_READ, file->dir,
+		eventfs_add_file("id", TRACE_MODE_READ, file->ef,
 				  (void *)(long)call->event.type,
 				  &ftrace_event_id_fops);
 #endif
@@ -2462,27 +2465,27 @@  event_create_dir(struct dentry *parent, struct trace_event_file *file)
 	 * triggers or filters.
 	 */
 	if (!(call->flags & TRACE_EVENT_FL_IGNORE_ENABLE)) {
-		trace_create_file("filter", TRACE_MODE_WRITE, file->dir,
+		eventfs_add_file("filter", TRACE_MODE_WRITE, file->ef,
 				  file, &ftrace_event_filter_fops);
 
-		trace_create_file("trigger", TRACE_MODE_WRITE, file->dir,
+		eventfs_add_file("trigger", TRACE_MODE_WRITE, file->ef,
 				  file, &event_trigger_fops);
 	}
 
 #ifdef CONFIG_HIST_TRIGGERS
-	trace_create_file("hist", TRACE_MODE_READ, file->dir, file,
+	eventfs_add_file("hist", TRACE_MODE_READ, file->ef, file,
 			  &event_hist_fops);
 #endif
 #ifdef CONFIG_HIST_TRIGGERS_DEBUG
-	trace_create_file("hist_debug", TRACE_MODE_READ, file->dir, file,
+	eventfs_add_file("hist_debug", TRACE_MODE_READ, file->ef, file,
 			  &event_hist_debug_fops);
 #endif
-	trace_create_file("format", TRACE_MODE_READ, file->dir, call,
+	eventfs_add_file("format", TRACE_MODE_READ, file->ef, call,
 			  &ftrace_event_format_fops);
 
 #ifdef CONFIG_TRACE_EVENT_INJECT
 	if (call->event.type && call->class->reg)
-		trace_create_file("inject", 0200, file->dir, file,
+		eventfs_add_file("inject", 0200, file->ef, file,
 				  &event_inject_fops);
 #endif
 
@@ -3635,21 +3638,22 @@  create_event_toplevel_files(struct dentry *parent, struct trace_array *tr)
 {
 	struct dentry *d_events;
 	struct dentry *entry;
+	int error = 0;
 
 	entry = trace_create_file("set_event", TRACE_MODE_WRITE, parent,
 				  tr, &ftrace_set_event_fops);
 	if (!entry)
 		return -ENOMEM;
 
-	d_events = tracefs_create_dir("events", parent);
-	if (!d_events) {
+	d_events = eventfs_create_events_dir("events", parent, &tr->eventfs_rwsem);
+	if (IS_ERR(d_events)) {
 		pr_warn("Could not create tracefs 'events' directory\n");
 		return -ENOMEM;
 	}
 
-	entry = trace_create_file("enable", TRACE_MODE_WRITE, d_events,
+	error = eventfs_add_top_file("enable", TRACE_MODE_WRITE, d_events,
 				  tr, &ftrace_tr_enable_fops);
-	if (!entry)
+	if (error)
 		return -ENOMEM;
 
 	/* There are not as crucial, just warn if they are not created */
@@ -3662,11 +3666,11 @@  create_event_toplevel_files(struct dentry *parent, struct trace_array *tr)
 			  &ftrace_set_event_notrace_pid_fops);
 
 	/* ring buffer internal formats */
-	trace_create_file("header_page", TRACE_MODE_READ, d_events,
+	eventfs_add_top_file("header_page", TRACE_MODE_READ, d_events,
 				  ring_buffer_print_page_header,
 				  &ftrace_show_header_fops);
 
-	trace_create_file("header_event", TRACE_MODE_READ, d_events,
+	eventfs_add_top_file("header_event", TRACE_MODE_READ, d_events,
 				  ring_buffer_print_entry_header,
 				  &ftrace_show_header_fops);
 
@@ -3754,7 +3758,7 @@  int event_trace_del_tracer(struct trace_array *tr)
 
 	down_write(&trace_event_sem);
 	__trace_remove_event_dirs(tr);
-	tracefs_remove(tr->event_dir);
+	eventfs_remove_events_dir(tr->event_dir);
 	up_write(&trace_event_sem);
 
 	tr->event_dir = NULL;