diff options
| author | Denis V. Lunev <den@openvz.org> | 2008-04-29 04:02:31 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-29 11:06:22 -0400 |
| commit | c33fff0afbef4f0467c99e3f47ee7e98ae78c77e (patch) | |
| tree | d6b5f8dc77aa21de95bbca76c6be6056026cc1d8 /kernel | |
| parent | ac41cfd19bf77424519b962f8205ede51fceaac6 (diff) | |
kernel: use non-racy method for proc entries creation
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 <den@openvz.org>
Cc: Alexey Dobriyan <adobriyan@gmail.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/configs.c | 4 | ||||
| -rw-r--r-- | kernel/dma.c | 7 | ||||
| -rw-r--r-- | kernel/kallsyms.c | 6 | ||||
| -rw-r--r-- | kernel/latencytop.c | 9 | ||||
| -rw-r--r-- | kernel/lockdep_proc.c | 16 | ||||
| -rw-r--r-- | kernel/profile.c | 4 | ||||
| -rw-r--r-- | kernel/resource.c | 10 | ||||
| -rw-r--r-- | kernel/sched_debug.c | 5 | ||||
| -rw-r--r-- | kernel/time/timer_list.c | 5 | ||||
| -rw-r--r-- | kernel/time/timer_stats.c | 5 |
10 files changed, 16 insertions, 55 deletions
diff --git a/kernel/configs.c b/kernel/configs.c index d3a4b82a8a96..4c345210ed8c 100644 --- a/kernel/configs.c +++ b/kernel/configs.c | |||
| @@ -79,11 +79,11 @@ static int __init ikconfig_init(void) | |||
| 79 | struct proc_dir_entry *entry; | 79 | struct proc_dir_entry *entry; |
| 80 | 80 | ||
| 81 | /* create the current config file */ | 81 | /* create the current config file */ |
| 82 | entry = create_proc_entry("config.gz", S_IFREG | S_IRUGO, NULL); | 82 | entry = proc_create("config.gz", S_IFREG | S_IRUGO, NULL, |
| 83 | &ikconfig_file_ops); | ||
| 83 | if (!entry) | 84 | if (!entry) |
| 84 | return -ENOMEM; | 85 | return -ENOMEM; |
| 85 | 86 | ||
| 86 | entry->proc_fops = &ikconfig_file_ops; | ||
| 87 | entry->size = kernel_config_data_size; | 87 | entry->size = kernel_config_data_size; |
| 88 | 88 | ||
| 89 | return 0; | 89 | return 0; |
diff --git a/kernel/dma.c b/kernel/dma.c index 6a82bb716dac..d2c60a822790 100644 --- a/kernel/dma.c +++ b/kernel/dma.c | |||
| @@ -149,12 +149,7 @@ static const struct file_operations proc_dma_operations = { | |||
| 149 | 149 | ||
| 150 | static int __init proc_dma_init(void) | 150 | static int __init proc_dma_init(void) |
| 151 | { | 151 | { |
| 152 | struct proc_dir_entry *e; | 152 | proc_create("dma", 0, NULL, &proc_dma_operations); |
| 153 | |||
| 154 | e = create_proc_entry("dma", 0, NULL); | ||
| 155 | if (e) | ||
| 156 | e->proc_fops = &proc_dma_operations; | ||
| 157 | |||
| 158 | return 0; | 153 | return 0; |
| 159 | } | 154 | } |
| 160 | 155 | ||
diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c index f091d13def00..6fc0040f3e3a 100644 --- a/kernel/kallsyms.c +++ b/kernel/kallsyms.c | |||
| @@ -472,11 +472,7 @@ static const struct file_operations kallsyms_operations = { | |||
| 472 | 472 | ||
| 473 | static int __init kallsyms_init(void) | 473 | static int __init kallsyms_init(void) |
| 474 | { | 474 | { |
| 475 | struct proc_dir_entry *entry; | 475 | proc_create("kallsyms", 0444, NULL, &kallsyms_operations); |
| 476 | |||
| 477 | entry = create_proc_entry("kallsyms", 0444, NULL); | ||
| 478 | if (entry) | ||
| 479 | entry->proc_fops = &kallsyms_operations; | ||
| 480 | return 0; | 476 | return 0; |
| 481 | } | 477 | } |
| 482 | __initcall(kallsyms_init); | 478 | __initcall(kallsyms_init); |
diff --git a/kernel/latencytop.c b/kernel/latencytop.c index 7c74dab0d21b..5e7b45c56923 100644 --- a/kernel/latencytop.c +++ b/kernel/latencytop.c | |||
| @@ -233,14 +233,7 @@ static struct file_operations lstats_fops = { | |||
| 233 | 233 | ||
| 234 | static int __init init_lstats_procfs(void) | 234 | static int __init init_lstats_procfs(void) |
| 235 | { | 235 | { |
| 236 | struct proc_dir_entry *pe; | 236 | proc_create("latency_stats", 0644, NULL, &lstats_fops); |
| 237 | |||
| 238 | pe = create_proc_entry("latency_stats", 0644, NULL); | ||
| 239 | if (!pe) | ||
| 240 | return -ENOMEM; | ||
| 241 | |||
| 242 | pe->proc_fops = &lstats_fops; | ||
| 243 | |||
| 244 | return 0; | 237 | return 0; |
| 245 | } | 238 | } |
| 246 | __initcall(init_lstats_procfs); | 239 | __initcall(init_lstats_procfs); |
diff --git a/kernel/lockdep_proc.c b/kernel/lockdep_proc.c index 8a135bd163c2..dc5d29648d85 100644 --- a/kernel/lockdep_proc.c +++ b/kernel/lockdep_proc.c | |||
| @@ -660,20 +660,12 @@ static const struct file_operations proc_lock_stat_operations = { | |||
| 660 | 660 | ||
| 661 | static int __init lockdep_proc_init(void) | 661 | static int __init lockdep_proc_init(void) |
| 662 | { | 662 | { |
| 663 | struct proc_dir_entry *entry; | 663 | proc_create("lockdep", S_IRUSR, NULL, &proc_lockdep_operations); |
| 664 | 664 | proc_create("lockdep_stats", S_IRUSR, NULL, | |
| 665 | entry = create_proc_entry("lockdep", S_IRUSR, NULL); | 665 | &proc_lockdep_stats_operations); |
| 666 | if (entry) | ||
| 667 | entry->proc_fops = &proc_lockdep_operations; | ||
| 668 | |||
| 669 | entry = create_proc_entry("lockdep_stats", S_IRUSR, NULL); | ||
| 670 | if (entry) | ||
| 671 | entry->proc_fops = &proc_lockdep_stats_operations; | ||
| 672 | 666 | ||
| 673 | #ifdef CONFIG_LOCK_STAT | 667 | #ifdef CONFIG_LOCK_STAT |
| 674 | entry = create_proc_entry("lock_stat", S_IRUSR, NULL); | 668 | proc_create("lock_stat", S_IRUSR, NULL, &proc_lock_stat_operations); |
| 675 | if (entry) | ||
| 676 | entry->proc_fops = &proc_lock_stat_operations; | ||
| 677 | #endif | 669 | #endif |
| 678 | 670 | ||
| 679 | return 0; | 671 | return 0; |
diff --git a/kernel/profile.c b/kernel/profile.c index 606d7387265c..ae7ead82cbc9 100644 --- a/kernel/profile.c +++ b/kernel/profile.c | |||
| @@ -587,10 +587,10 @@ static int __init create_proc_profile(void) | |||
| 587 | return 0; | 587 | return 0; |
| 588 | if (create_hash_tables()) | 588 | if (create_hash_tables()) |
| 589 | return -1; | 589 | return -1; |
| 590 | entry = create_proc_entry("profile", S_IWUSR | S_IRUGO, NULL); | 590 | entry = proc_create("profile", S_IWUSR | S_IRUGO, |
| 591 | NULL, &proc_profile_operations); | ||
| 591 | if (!entry) | 592 | if (!entry) |
| 592 | return 0; | 593 | return 0; |
| 593 | entry->proc_fops = &proc_profile_operations; | ||
| 594 | entry->size = (1+prof_len) * sizeof(atomic_t); | 594 | entry->size = (1+prof_len) * sizeof(atomic_t); |
| 595 | hotcpu_notifier(profile_cpu_callback, 0); | 595 | hotcpu_notifier(profile_cpu_callback, 0); |
| 596 | return 0; | 596 | return 0; |
diff --git a/kernel/resource.c b/kernel/resource.c index cee12cc47cab..74af2d7cb5a1 100644 --- a/kernel/resource.c +++ b/kernel/resource.c | |||
| @@ -131,14 +131,8 @@ static const struct file_operations proc_iomem_operations = { | |||
| 131 | 131 | ||
| 132 | static int __init ioresources_init(void) | 132 | static int __init ioresources_init(void) |
| 133 | { | 133 | { |
| 134 | struct proc_dir_entry *entry; | 134 | proc_create("ioports", 0, NULL, &proc_ioports_operations); |
| 135 | 135 | proc_create("iomem", 0, NULL, &proc_iomem_operations); | |
| 136 | entry = create_proc_entry("ioports", 0, NULL); | ||
| 137 | if (entry) | ||
| 138 | entry->proc_fops = &proc_ioports_operations; | ||
| 139 | entry = create_proc_entry("iomem", 0, NULL); | ||
| 140 | if (entry) | ||
| 141 | entry->proc_fops = &proc_iomem_operations; | ||
| 142 | return 0; | 136 | return 0; |
| 143 | } | 137 | } |
| 144 | __initcall(ioresources_init); | 138 | __initcall(ioresources_init); |
diff --git a/kernel/sched_debug.c b/kernel/sched_debug.c index f3f4af4b8b0f..8a9498e7c831 100644 --- a/kernel/sched_debug.c +++ b/kernel/sched_debug.c | |||
| @@ -277,12 +277,9 @@ static int __init init_sched_debug_procfs(void) | |||
| 277 | { | 277 | { |
| 278 | struct proc_dir_entry *pe; | 278 | struct proc_dir_entry *pe; |
| 279 | 279 | ||
| 280 | pe = create_proc_entry("sched_debug", 0644, NULL); | 280 | pe = proc_create("sched_debug", 0644, NULL, &sched_debug_fops); |
| 281 | if (!pe) | 281 | if (!pe) |
| 282 | return -ENOMEM; | 282 | return -ENOMEM; |
| 283 | |||
| 284 | pe->proc_fops = &sched_debug_fops; | ||
| 285 | |||
| 286 | return 0; | 283 | return 0; |
| 287 | } | 284 | } |
| 288 | 285 | ||
diff --git a/kernel/time/timer_list.c b/kernel/time/timer_list.c index 67fe8fc21fb1..a40e20fd0001 100644 --- a/kernel/time/timer_list.c +++ b/kernel/time/timer_list.c | |||
| @@ -278,12 +278,9 @@ static int __init init_timer_list_procfs(void) | |||
| 278 | { | 278 | { |
| 279 | struct proc_dir_entry *pe; | 279 | struct proc_dir_entry *pe; |
| 280 | 280 | ||
| 281 | pe = create_proc_entry("timer_list", 0644, NULL); | 281 | pe = proc_create("timer_list", 0644, NULL, &timer_list_fops); |
| 282 | if (!pe) | 282 | if (!pe) |
| 283 | return -ENOMEM; | 283 | return -ENOMEM; |
| 284 | |||
| 285 | pe->proc_fops = &timer_list_fops; | ||
| 286 | |||
| 287 | return 0; | 284 | return 0; |
| 288 | } | 285 | } |
| 289 | __initcall(init_timer_list_procfs); | 286 | __initcall(init_timer_list_procfs); |
diff --git a/kernel/time/timer_stats.c b/kernel/time/timer_stats.c index 417da8c5bc72..c994530d166d 100644 --- a/kernel/time/timer_stats.c +++ b/kernel/time/timer_stats.c | |||
| @@ -415,12 +415,9 @@ static int __init init_tstats_procfs(void) | |||
| 415 | { | 415 | { |
| 416 | struct proc_dir_entry *pe; | 416 | struct proc_dir_entry *pe; |
| 417 | 417 | ||
| 418 | pe = create_proc_entry("timer_stats", 0644, NULL); | 418 | pe = proc_create("timer_stats", 0644, NULL, &tstats_fops); |
| 419 | if (!pe) | 419 | if (!pe) |
| 420 | return -ENOMEM; | 420 | return -ENOMEM; |
| 421 | |||
| 422 | pe->proc_fops = &tstats_fops; | ||
| 423 | |||
| 424 | return 0; | 421 | return 0; |
| 425 | } | 422 | } |
| 426 | __initcall(init_tstats_procfs); | 423 | __initcall(init_tstats_procfs); |
