Skip to content

Commit

Permalink
kernel: use non-racy method for proc entries creation
Browse files Browse the repository at this point in the history
Use proc_create()/proc_create_data() to make sure that ->proc_fops and ->data
be setup before gluing PDE to main tree.

Signed-off-by: Denis V. Lunev <[email protected]>
Cc: Alexey Dobriyan <[email protected]>
Cc: "Eric W. Biederman" <[email protected]>
Cc: Ingo Molnar <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Denis V. Lunev authored and torvalds committed Apr 29, 2008
1 parent ac41cfd commit c33fff0
Show file tree
Hide file tree
Showing 10 changed files with 16 additions and 55 deletions.
4 changes: 2 additions & 2 deletions kernel/configs.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,11 @@ static int __init ikconfig_init(void)
struct proc_dir_entry *entry;

/* create the current config file */
entry = create_proc_entry("config.gz", S_IFREG | S_IRUGO, NULL);
entry = proc_create("config.gz", S_IFREG | S_IRUGO, NULL,
&ikconfig_file_ops);
if (!entry)
return -ENOMEM;

entry->proc_fops = &ikconfig_file_ops;
entry->size = kernel_config_data_size;

return 0;
Expand Down
7 changes: 1 addition & 6 deletions kernel/dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,12 +149,7 @@ static const struct file_operations proc_dma_operations = {

static int __init proc_dma_init(void)
{
struct proc_dir_entry *e;

e = create_proc_entry("dma", 0, NULL);
if (e)
e->proc_fops = &proc_dma_operations;

proc_create("dma", 0, NULL, &proc_dma_operations);
return 0;
}

Expand Down
6 changes: 1 addition & 5 deletions kernel/kallsyms.c
Original file line number Diff line number Diff line change
Expand Up @@ -472,11 +472,7 @@ static const struct file_operations kallsyms_operations = {

static int __init kallsyms_init(void)
{
struct proc_dir_entry *entry;

entry = create_proc_entry("kallsyms", 0444, NULL);
if (entry)
entry->proc_fops = &kallsyms_operations;
proc_create("kallsyms", 0444, NULL, &kallsyms_operations);
return 0;
}
__initcall(kallsyms_init);
Expand Down
9 changes: 1 addition & 8 deletions kernel/latencytop.c
Original file line number Diff line number Diff line change
Expand Up @@ -233,14 +233,7 @@ static struct file_operations lstats_fops = {

static int __init init_lstats_procfs(void)
{
struct proc_dir_entry *pe;

pe = create_proc_entry("latency_stats", 0644, NULL);
if (!pe)
return -ENOMEM;

pe->proc_fops = &lstats_fops;

proc_create("latency_stats", 0644, NULL, &lstats_fops);
return 0;
}
__initcall(init_lstats_procfs);
16 changes: 4 additions & 12 deletions kernel/lockdep_proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -660,20 +660,12 @@ static const struct file_operations proc_lock_stat_operations = {

static int __init lockdep_proc_init(void)
{
struct proc_dir_entry *entry;

entry = create_proc_entry("lockdep", S_IRUSR, NULL);
if (entry)
entry->proc_fops = &proc_lockdep_operations;

entry = create_proc_entry("lockdep_stats", S_IRUSR, NULL);
if (entry)
entry->proc_fops = &proc_lockdep_stats_operations;
proc_create("lockdep", S_IRUSR, NULL, &proc_lockdep_operations);
proc_create("lockdep_stats", S_IRUSR, NULL,
&proc_lockdep_stats_operations);

#ifdef CONFIG_LOCK_STAT
entry = create_proc_entry("lock_stat", S_IRUSR, NULL);
if (entry)
entry->proc_fops = &proc_lock_stat_operations;
proc_create("lock_stat", S_IRUSR, NULL, &proc_lock_stat_operations);
#endif

return 0;
Expand Down
4 changes: 2 additions & 2 deletions kernel/profile.c
Original file line number Diff line number Diff line change
Expand Up @@ -587,10 +587,10 @@ static int __init create_proc_profile(void)
return 0;
if (create_hash_tables())
return -1;
entry = create_proc_entry("profile", S_IWUSR | S_IRUGO, NULL);
entry = proc_create("profile", S_IWUSR | S_IRUGO,
NULL, &proc_profile_operations);
if (!entry)
return 0;
entry->proc_fops = &proc_profile_operations;
entry->size = (1+prof_len) * sizeof(atomic_t);
hotcpu_notifier(profile_cpu_callback, 0);
return 0;
Expand Down
10 changes: 2 additions & 8 deletions kernel/resource.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,14 +131,8 @@ static const struct file_operations proc_iomem_operations = {

static int __init ioresources_init(void)
{
struct proc_dir_entry *entry;

entry = create_proc_entry("ioports", 0, NULL);
if (entry)
entry->proc_fops = &proc_ioports_operations;
entry = create_proc_entry("iomem", 0, NULL);
if (entry)
entry->proc_fops = &proc_iomem_operations;
proc_create("ioports", 0, NULL, &proc_ioports_operations);
proc_create("iomem", 0, NULL, &proc_iomem_operations);
return 0;
}
__initcall(ioresources_init);
Expand Down
5 changes: 1 addition & 4 deletions kernel/sched_debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -277,12 +277,9 @@ static int __init init_sched_debug_procfs(void)
{
struct proc_dir_entry *pe;

pe = create_proc_entry("sched_debug", 0644, NULL);
pe = proc_create("sched_debug", 0644, NULL, &sched_debug_fops);
if (!pe)
return -ENOMEM;

pe->proc_fops = &sched_debug_fops;

return 0;
}

Expand Down
5 changes: 1 addition & 4 deletions kernel/time/timer_list.c
Original file line number Diff line number Diff line change
Expand Up @@ -278,12 +278,9 @@ static int __init init_timer_list_procfs(void)
{
struct proc_dir_entry *pe;

pe = create_proc_entry("timer_list", 0644, NULL);
pe = proc_create("timer_list", 0644, NULL, &timer_list_fops);
if (!pe)
return -ENOMEM;

pe->proc_fops = &timer_list_fops;

return 0;
}
__initcall(init_timer_list_procfs);
5 changes: 1 addition & 4 deletions kernel/time/timer_stats.c
Original file line number Diff line number Diff line change
Expand Up @@ -415,12 +415,9 @@ static int __init init_tstats_procfs(void)
{
struct proc_dir_entry *pe;

pe = create_proc_entry("timer_stats", 0644, NULL);
pe = proc_create("timer_stats", 0644, NULL, &tstats_fops);
if (!pe)
return -ENOMEM;

pe->proc_fops = &tstats_fops;

return 0;
}
__initcall(init_tstats_procfs);

0 comments on commit c33fff0

Please sign in to comment.