diff options
author | Denis V. Lunev <den@openvz.org> | 2008-04-29 04:02:25 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-29 11:06:21 -0400 |
commit | e23637681bef5b69a68c8ac399732b941f1af023 (patch) | |
tree | 90cc355ac83b58080da3213b99351717d9f0ffb6 | |
parent | c293819a3caa77d96b801a7795f81a5913ec21d7 (diff) |
ia64: 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: Tony Luck <tony.luck@intel.com>
Cc: Alexey Dobriyan <adobriyan@gmail.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | arch/ia64/hp/common/sba_iommu.c | 6 | ||||
-rw-r--r-- | arch/ia64/kernel/perfmon.c | 6 | ||||
-rw-r--r-- | arch/ia64/kernel/salinfo.c | 10 | ||||
-rw-r--r-- | arch/ia64/sn/kernel/sn2/sn2_smp.c | 5 | ||||
-rw-r--r-- | arch/ia64/sn/kernel/sn2/sn_proc_fs.c | 29 |
5 files changed, 20 insertions, 36 deletions
diff --git a/arch/ia64/hp/common/sba_iommu.c b/arch/ia64/hp/common/sba_iommu.c index 6ce729f46de..34421aed1e2 100644 --- a/arch/ia64/hp/common/sba_iommu.c +++ b/arch/ia64/hp/common/sba_iommu.c | |||
@@ -1932,15 +1932,13 @@ static const struct file_operations ioc_fops = { | |||
1932 | static void __init | 1932 | static void __init |
1933 | ioc_proc_init(void) | 1933 | ioc_proc_init(void) |
1934 | { | 1934 | { |
1935 | struct proc_dir_entry *dir, *entry; | 1935 | struct proc_dir_entry *dir; |
1936 | 1936 | ||
1937 | dir = proc_mkdir("bus/mckinley", NULL); | 1937 | dir = proc_mkdir("bus/mckinley", NULL); |
1938 | if (!dir) | 1938 | if (!dir) |
1939 | return; | 1939 | return; |
1940 | 1940 | ||
1941 | entry = create_proc_entry(ioc_list->name, 0, dir); | 1941 | proc_create(ioc_list->name, 0, dir, &ioc_fops); |
1942 | if (entry) | ||
1943 | entry->proc_fops = &ioc_fops; | ||
1944 | } | 1942 | } |
1945 | #endif | 1943 | #endif |
1946 | 1944 | ||
diff --git a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c index c8e403752a0..7fbb51e10bb 100644 --- a/arch/ia64/kernel/perfmon.c +++ b/arch/ia64/kernel/perfmon.c | |||
@@ -6695,16 +6695,12 @@ pfm_init(void) | |||
6695 | /* | 6695 | /* |
6696 | * create /proc/perfmon (mostly for debugging purposes) | 6696 | * create /proc/perfmon (mostly for debugging purposes) |
6697 | */ | 6697 | */ |
6698 | perfmon_dir = create_proc_entry("perfmon", S_IRUGO, NULL); | 6698 | perfmon_dir = proc_create("perfmon", S_IRUGO, NULL, &pfm_proc_fops); |
6699 | if (perfmon_dir == NULL) { | 6699 | if (perfmon_dir == NULL) { |
6700 | printk(KERN_ERR "perfmon: cannot create /proc entry, perfmon disabled\n"); | 6700 | printk(KERN_ERR "perfmon: cannot create /proc entry, perfmon disabled\n"); |
6701 | pmu_conf = NULL; | 6701 | pmu_conf = NULL; |
6702 | return -1; | 6702 | return -1; |
6703 | } | 6703 | } |
6704 | /* | ||
6705 | * install customized file operations for /proc/perfmon entry | ||
6706 | */ | ||
6707 | perfmon_dir->proc_fops = &pfm_proc_fops; | ||
6708 | 6704 | ||
6709 | /* | 6705 | /* |
6710 | * create /proc/sys/kernel/perfmon (for debugging purposes) | 6706 | * create /proc/sys/kernel/perfmon (for debugging purposes) |
diff --git a/arch/ia64/kernel/salinfo.c b/arch/ia64/kernel/salinfo.c index b11bb50a197..ecb9eb78d68 100644 --- a/arch/ia64/kernel/salinfo.c +++ b/arch/ia64/kernel/salinfo.c | |||
@@ -648,18 +648,16 @@ salinfo_init(void) | |||
648 | if (!dir) | 648 | if (!dir) |
649 | continue; | 649 | continue; |
650 | 650 | ||
651 | entry = create_proc_entry("event", S_IRUSR, dir); | 651 | entry = proc_create_data("event", S_IRUSR, dir, |
652 | &salinfo_event_fops, data); | ||
652 | if (!entry) | 653 | if (!entry) |
653 | continue; | 654 | continue; |
654 | entry->data = data; | ||
655 | entry->proc_fops = &salinfo_event_fops; | ||
656 | *sdir++ = entry; | 655 | *sdir++ = entry; |
657 | 656 | ||
658 | entry = create_proc_entry("data", S_IRUSR | S_IWUSR, dir); | 657 | entry = proc_create_data("data", S_IRUSR | S_IWUSR, dir, |
658 | &salinfo_data_fops, data); | ||
659 | if (!entry) | 659 | if (!entry) |
660 | continue; | 660 | continue; |
661 | entry->data = data; | ||
662 | entry->proc_fops = &salinfo_data_fops; | ||
663 | *sdir++ = entry; | 661 | *sdir++ = entry; |
664 | 662 | ||
665 | /* we missed any events before now */ | 663 | /* we missed any events before now */ |
diff --git a/arch/ia64/sn/kernel/sn2/sn2_smp.c b/arch/ia64/sn/kernel/sn2/sn2_smp.c index dfc6bf1c7b4..49d3120415e 100644 --- a/arch/ia64/sn/kernel/sn2/sn2_smp.c +++ b/arch/ia64/sn/kernel/sn2/sn2_smp.c | |||
@@ -550,11 +550,12 @@ static int __init sn2_ptc_init(void) | |||
550 | if (!ia64_platform_is("sn2")) | 550 | if (!ia64_platform_is("sn2")) |
551 | return 0; | 551 | return 0; |
552 | 552 | ||
553 | if (!(proc_sn2_ptc = create_proc_entry(PTC_BASENAME, 0444, NULL))) { | 553 | proc_sn2_ptc = proc_create(PTC_BASENAME, 0444, |
554 | NULL, &proc_sn2_ptc_operations); | ||
555 | if (!&proc_sn2_ptc_operations) { | ||
554 | printk(KERN_ERR "unable to create %s proc entry", PTC_BASENAME); | 556 | printk(KERN_ERR "unable to create %s proc entry", PTC_BASENAME); |
555 | return -EINVAL; | 557 | return -EINVAL; |
556 | } | 558 | } |
557 | proc_sn2_ptc->proc_fops = &proc_sn2_ptc_operations; | ||
558 | spin_lock_init(&sn2_global_ptc_lock); | 559 | spin_lock_init(&sn2_global_ptc_lock); |
559 | return 0; | 560 | return 0; |
560 | } | 561 | } |
diff --git a/arch/ia64/sn/kernel/sn2/sn_proc_fs.c b/arch/ia64/sn/kernel/sn2/sn_proc_fs.c index 62b3e9a496a..2526e5c783a 100644 --- a/arch/ia64/sn/kernel/sn2/sn_proc_fs.c +++ b/arch/ia64/sn/kernel/sn2/sn_proc_fs.c | |||
@@ -139,30 +139,21 @@ static const struct file_operations proc_sn_topo_fops = { | |||
139 | void register_sn_procfs(void) | 139 | void register_sn_procfs(void) |
140 | { | 140 | { |
141 | static struct proc_dir_entry *sgi_proc_dir = NULL; | 141 | static struct proc_dir_entry *sgi_proc_dir = NULL; |
142 | struct proc_dir_entry *pde; | ||
143 | 142 | ||
144 | BUG_ON(sgi_proc_dir != NULL); | 143 | BUG_ON(sgi_proc_dir != NULL); |
145 | if (!(sgi_proc_dir = proc_mkdir("sgi_sn", NULL))) | 144 | if (!(sgi_proc_dir = proc_mkdir("sgi_sn", NULL))) |
146 | return; | 145 | return; |
147 | 146 | ||
148 | pde = create_proc_entry("partition_id", 0444, sgi_proc_dir); | 147 | proc_create("partition_id", 0444, sgi_proc_dir, |
149 | if (pde) | 148 | &proc_partition_id_fops); |
150 | pde->proc_fops = &proc_partition_id_fops; | 149 | proc_create("system_serial_number", 0444, sgi_proc_dir, |
151 | pde = create_proc_entry("system_serial_number", 0444, sgi_proc_dir); | 150 | &proc_system_sn_fops); |
152 | if (pde) | 151 | proc_create("licenseID", 0444, sgi_proc_dir, &proc_license_id_fops); |
153 | pde->proc_fops = &proc_system_sn_fops; | 152 | proc_create("sn_force_interrupt", 0644, sgi_proc_dir, |
154 | pde = create_proc_entry("licenseID", 0444, sgi_proc_dir); | 153 | &proc_sn_force_intr_fops); |
155 | if (pde) | 154 | proc_create("coherence_id", 0444, sgi_proc_dir, |
156 | pde->proc_fops = &proc_license_id_fops; | 155 | &proc_coherence_id_fops); |
157 | pde = create_proc_entry("sn_force_interrupt", 0644, sgi_proc_dir); | 156 | proc_create("sn_topology", 0444, sgi_proc_dir, &proc_sn_topo_fops); |
158 | if (pde) | ||
159 | pde->proc_fops = &proc_sn_force_intr_fops; | ||
160 | pde = create_proc_entry("coherence_id", 0444, sgi_proc_dir); | ||
161 | if (pde) | ||
162 | pde->proc_fops = &proc_coherence_id_fops; | ||
163 | pde = create_proc_entry("sn_topology", 0444, sgi_proc_dir); | ||
164 | if (pde) | ||
165 | pde->proc_fops = &proc_sn_topo_fops; | ||
166 | } | 157 | } |
167 | 158 | ||
168 | #endif /* CONFIG_PROC_FS */ | 159 | #endif /* CONFIG_PROC_FS */ |