diff options
Diffstat (limited to 'lib/dynamic_debug.c')
| -rw-r--r-- | lib/dynamic_debug.c | 28 | 
1 files changed, 23 insertions, 5 deletions
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index c60409138e13..aae17d9522e5 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -876,6 +876,14 @@ static const struct file_operations ddebug_proc_fops = {  	.write = ddebug_proc_write  }; +static const struct proc_ops proc_fops = { +	.proc_open = ddebug_proc_open, +	.proc_read = seq_read, +	.proc_lseek = seq_lseek, +	.proc_release = seq_release_private, +	.proc_write = ddebug_proc_write +}; +  /*   * Allocate a new ddebug_table for the given module   * and add it to the global list. @@ -991,15 +999,25 @@ static void ddebug_remove_all_tables(void)  static __initdata int ddebug_init_success; -static int __init dynamic_debug_init_debugfs(void) +static int __init dynamic_debug_init_control(void)  { -	struct dentry *dir; +	struct proc_dir_entry *procfs_dir; +	struct dentry *debugfs_dir;  	if (!ddebug_init_success)  		return -ENODEV; -	dir = debugfs_create_dir("dynamic_debug", NULL); -	debugfs_create_file("control", 0644, dir, NULL, &ddebug_proc_fops); +	/* Create the control file in debugfs if it is enabled */ +	if (debugfs_initialized()) { +		debugfs_dir = debugfs_create_dir("dynamic_debug", NULL); +		debugfs_create_file("control", 0644, debugfs_dir, NULL, +				    &ddebug_proc_fops); +	} + +	/* Also create the control file in procfs */ +	procfs_dir = proc_mkdir("dynamic_debug", NULL); +	if (procfs_dir) +		proc_create("control", 0644, procfs_dir, &proc_fops);  	return 0;  } @@ -1077,4 +1095,4 @@ out_err:  early_initcall(dynamic_debug_init);  /* Debugfs setup must be done later */ -fs_initcall(dynamic_debug_init_debugfs); +fs_initcall(dynamic_debug_init_control);  | 
