Commit c7705f3449c7edd5c1744871097f93977227afc4
Committed by
Linus Torvalds
1 parent
1b50221738
Exists in
master
and in
7 other branches
drivers: use non-racy method for proc entries creation (2)
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: Greg Kroah-Hartman <gregkh@suse.de> Cc: Alexey Dobriyan <adobriyan@gmail.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Peter Osterlund <petero2@telia.com> Cc: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Cc: Dmitry Torokhov <dtor@mail.ru> Cc: Neil Brown <neilb@suse.de> Cc: Mauro Carvalho Chehab <mchehab@infradead.org> Cc: Bjorn Helgaas <bjorn.helgaas@hp.com> Cc: Alessandro Zummo <a.zummo@towertech.it> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 12 changed files with 33 additions and 68 deletions Side-by-side Diff
- drivers/block/pktcdvd.c
- drivers/cdrom/viocd.c
- drivers/ide/ide-proc.c
- drivers/input/input.c
- drivers/md/md.c
- drivers/media/video/zoran_procfs.c
- drivers/message/i2o/i2o_proc.c
- drivers/misc/hdpuftrs/hdpu_cpustate.c
- drivers/misc/hdpuftrs/hdpu_nexus.c
- drivers/pci/proc.c
- drivers/pnp/isapnp/proc.c
- drivers/rtc/rtc-proc.c
drivers/block/pktcdvd.c
... | ... | @@ -2744,7 +2744,6 @@ |
2744 | 2744 | int i; |
2745 | 2745 | int ret = 0; |
2746 | 2746 | char b[BDEVNAME_SIZE]; |
2747 | - struct proc_dir_entry *proc; | |
2748 | 2747 | struct block_device *bdev; |
2749 | 2748 | |
2750 | 2749 | if (pd->pkt_dev == dev) { |
... | ... | @@ -2788,11 +2787,7 @@ |
2788 | 2787 | goto out_mem; |
2789 | 2788 | } |
2790 | 2789 | |
2791 | - proc = create_proc_entry(pd->name, 0, pkt_proc); | |
2792 | - if (proc) { | |
2793 | - proc->data = pd; | |
2794 | - proc->proc_fops = &pkt_proc_fops; | |
2795 | - } | |
2790 | + proc_create_data(pd->name, 0, pkt_proc, &pkt_proc_fops, pd); | |
2796 | 2791 | DPRINTK(DRIVER_NAME": writer %s mapped to %s\n", pd->name, bdevname(bdev, b)); |
2797 | 2792 | return 0; |
2798 | 2793 |
drivers/cdrom/viocd.c
... | ... | @@ -144,6 +144,7 @@ |
144 | 144 | } |
145 | 145 | |
146 | 146 | static const struct file_operations proc_viocd_operations = { |
147 | + .owner = THIS_MODULE, | |
147 | 148 | .open = proc_viocd_open, |
148 | 149 | .read = seq_read, |
149 | 150 | .llseek = seq_lseek, |
... | ... | @@ -679,7 +680,6 @@ |
679 | 680 | |
680 | 681 | static int __init viocd_init(void) |
681 | 682 | { |
682 | - struct proc_dir_entry *e; | |
683 | 683 | int ret = 0; |
684 | 684 | |
685 | 685 | if (!firmware_has_feature(FW_FEATURE_ISERIES)) |
... | ... | @@ -719,12 +719,8 @@ |
719 | 719 | if (ret) |
720 | 720 | goto out_free_info; |
721 | 721 | |
722 | - e = create_proc_entry("iSeries/viocd", S_IFREG|S_IRUGO, NULL); | |
723 | - if (e) { | |
724 | - e->owner = THIS_MODULE; | |
725 | - e->proc_fops = &proc_viocd_operations; | |
726 | - } | |
727 | - | |
722 | + proc_create("iSeries/viocd", S_IFREG|S_IRUGO, NULL, | |
723 | + &proc_viocd_operations); | |
728 | 724 | return 0; |
729 | 725 | |
730 | 726 | out_free_info: |
drivers/ide/ide-proc.c
... | ... | @@ -822,6 +822,7 @@ |
822 | 822 | } |
823 | 823 | |
824 | 824 | static const struct file_operations ide_drivers_operations = { |
825 | + .owner = THIS_MODULE, | |
825 | 826 | .open = ide_drivers_open, |
826 | 827 | .read = seq_read, |
827 | 828 | .llseek = seq_lseek, |
828 | 829 | |
... | ... | @@ -830,16 +831,12 @@ |
830 | 831 | |
831 | 832 | void proc_ide_create(void) |
832 | 833 | { |
833 | - struct proc_dir_entry *entry; | |
834 | - | |
835 | 834 | proc_ide_root = proc_mkdir("ide", NULL); |
836 | 835 | |
837 | 836 | if (!proc_ide_root) |
838 | 837 | return; |
839 | 838 | |
840 | - entry = create_proc_entry("drivers", 0, proc_ide_root); | |
841 | - if (entry) | |
842 | - entry->proc_fops = &ide_drivers_operations; | |
839 | + proc_create("drivers", 0, proc_ide_root, &ide_drivers_operations); | |
843 | 840 | } |
844 | 841 | |
845 | 842 | void proc_ide_destroy(void) |
drivers/input/input.c
... | ... | @@ -904,19 +904,15 @@ |
904 | 904 | |
905 | 905 | proc_bus_input_dir->owner = THIS_MODULE; |
906 | 906 | |
907 | - entry = create_proc_entry("devices", 0, proc_bus_input_dir); | |
907 | + entry = proc_create("devices", 0, proc_bus_input_dir, | |
908 | + &input_devices_fileops); | |
908 | 909 | if (!entry) |
909 | 910 | goto fail1; |
910 | 911 | |
911 | - entry->owner = THIS_MODULE; | |
912 | - entry->proc_fops = &input_devices_fileops; | |
913 | - | |
914 | - entry = create_proc_entry("handlers", 0, proc_bus_input_dir); | |
912 | + entry = proc_create("handlers", 0, proc_bus_input_dir, | |
913 | + &input_handlers_fileops); | |
915 | 914 | if (!entry) |
916 | 915 | goto fail2; |
917 | - | |
918 | - entry->owner = THIS_MODULE; | |
919 | - entry->proc_fops = &input_handlers_fileops; | |
920 | 916 | |
921 | 917 | return 0; |
922 | 918 |
drivers/md/md.c
... | ... | @@ -5947,13 +5947,9 @@ |
5947 | 5947 | |
5948 | 5948 | static void md_geninit(void) |
5949 | 5949 | { |
5950 | - struct proc_dir_entry *p; | |
5951 | - | |
5952 | 5950 | dprintk("md: sizeof(mdp_super_t) = %d\n", (int)sizeof(mdp_super_t)); |
5953 | 5951 | |
5954 | - p = create_proc_entry("mdstat", S_IRUGO, NULL); | |
5955 | - if (p) | |
5956 | - p->proc_fops = &md_seq_fops; | |
5952 | + proc_create("mdstat", S_IRUGO, NULL, &md_seq_fops); | |
5957 | 5953 | } |
5958 | 5954 | |
5959 | 5955 | static int __init md_init(void) |
drivers/media/video/zoran_procfs.c
... | ... | @@ -180,6 +180,7 @@ |
180 | 180 | } |
181 | 181 | |
182 | 182 | static const struct file_operations zoran_operations = { |
183 | + .owner = THIS_MODULE, | |
183 | 184 | .open = zoran_open, |
184 | 185 | .read = seq_read, |
185 | 186 | .write = zoran_write, |
... | ... | @@ -195,10 +196,8 @@ |
195 | 196 | char name[8]; |
196 | 197 | |
197 | 198 | snprintf(name, 7, "zoran%d", zr->id); |
198 | - if ((zr->zoran_proc = create_proc_entry(name, 0, NULL))) { | |
199 | - zr->zoran_proc->data = zr; | |
200 | - zr->zoran_proc->owner = THIS_MODULE; | |
201 | - zr->zoran_proc->proc_fops = &zoran_operations; | |
199 | + zr->zoran_proc = proc_create_data(name, 0, NULL, &zoran_operations, zr); | |
200 | + if (zr->zoran_proc != NULL) { | |
202 | 201 | dprintk(2, |
203 | 202 | KERN_INFO |
204 | 203 | "%s: procfs entry /proc/%s allocated. data=%p\n", |
drivers/message/i2o/i2o_proc.c
... | ... | @@ -1893,12 +1893,10 @@ |
1893 | 1893 | struct proc_dir_entry *tmp; |
1894 | 1894 | |
1895 | 1895 | while (i2o_pe->name) { |
1896 | - tmp = create_proc_entry(i2o_pe->name, i2o_pe->mode, dir); | |
1896 | + tmp = proc_create_data(i2o_pe->name, i2o_pe->mode, dir, | |
1897 | + i2o_pe->fops, data); | |
1897 | 1898 | if (!tmp) |
1898 | 1899 | return -1; |
1899 | - | |
1900 | - tmp->data = data; | |
1901 | - tmp->proc_fops = i2o_pe->fops; | |
1902 | 1900 | |
1903 | 1901 | i2o_pe++; |
1904 | 1902 | } |
drivers/misc/hdpuftrs/hdpu_cpustate.c
... | ... | @@ -210,13 +210,10 @@ |
210 | 210 | return ret; |
211 | 211 | } |
212 | 212 | |
213 | - proc_de = create_proc_entry("sky_cpustate", 0666, NULL); | |
213 | + proc_de = proc_create("sky_cpustate", 0666, NULL, &proc_cpustate); | |
214 | 214 | if (!proc_de) { |
215 | 215 | printk(KERN_WARNING "sky_cpustate: " |
216 | 216 | "Unable to create proc entry\n"); |
217 | - } else { | |
218 | - proc_de->proc_fops = &proc_cpustate; | |
219 | - proc_de->owner = THIS_MODULE; | |
220 | 217 | } |
221 | 218 | |
222 | 219 | printk(KERN_INFO "Sky CPU State Driver v" SKY_CPUSTATE_VERSION "\n"); |
drivers/misc/hdpuftrs/hdpu_nexus.c
... | ... | @@ -102,22 +102,17 @@ |
102 | 102 | printk(KERN_ERR "sky_nexus: Could not map slot id\n"); |
103 | 103 | } |
104 | 104 | |
105 | - hdpu_slot_id = create_proc_entry("sky_slot_id", 0666, NULL); | |
106 | - if (!hdpu_slot_id) | |
105 | + hdpu_slot_id = proc_create("sky_slot_id", 0666, NULL, &proc_slot_id); | |
106 | + if (!hdpu_slot_id) { | |
107 | 107 | printk(KERN_WARNING "sky_nexus: " |
108 | 108 | "Unable to create proc dir entry: sky_slot_id\n"); |
109 | - } else { | |
110 | - hdpu_slot_id->proc_fops = &proc_slot_id; | |
111 | - hdpu_slot_id->owner = THIS_MODULE; | |
112 | 109 | } |
113 | 110 | |
114 | - hdpu_chassis_id = create_proc_entry("sky_chassis_id", 0666, NULL); | |
111 | + hdpu_chassis_id = proc_create("sky_chassis_id", 0666, NULL, | |
112 | + &proc_chassis_id); | |
115 | 113 | if (!hdpu_chassis_id) |
116 | 114 | printk(KERN_WARNING "sky_nexus: " |
117 | 115 | "Unable to create proc dir entry: sky_chassis_id\n"); |
118 | - } else { | |
119 | - hdpu_chassis_id->proc_fops = &proc_chassis_id; | |
120 | - hdpu_chassis_id->owner = THIS_MODULE; | |
121 | 116 | } |
122 | 117 | |
123 | 118 | return 0; |
drivers/pci/proc.c
... | ... | @@ -293,6 +293,7 @@ |
293 | 293 | #endif /* HAVE_PCI_MMAP */ |
294 | 294 | |
295 | 295 | static const struct file_operations proc_bus_pci_operations = { |
296 | + .owner = THIS_MODULE, | |
296 | 297 | .llseek = proc_bus_pci_lseek, |
297 | 298 | .read = proc_bus_pci_read, |
298 | 299 | .write = proc_bus_pci_write, |
299 | 300 | |
... | ... | @@ -406,11 +407,10 @@ |
406 | 407 | } |
407 | 408 | |
408 | 409 | sprintf(name, "%02x.%x", PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn)); |
409 | - e = create_proc_entry(name, S_IFREG | S_IRUGO | S_IWUSR, bus->procdir); | |
410 | + e = proc_create_data(name, S_IFREG | S_IRUGO | S_IWUSR, bus->procdir, | |
411 | + &proc_bus_pci_operations, dev); | |
410 | 412 | if (!e) |
411 | 413 | return -ENOMEM; |
412 | - e->proc_fops = &proc_bus_pci_operations; | |
413 | - e->data = dev; | |
414 | 414 | e->size = dev->cfg_size; |
415 | 415 | dev->procent = e; |
416 | 416 | |
... | ... | @@ -462,6 +462,7 @@ |
462 | 462 | return seq_open(file, &proc_bus_pci_devices_op); |
463 | 463 | } |
464 | 464 | static const struct file_operations proc_bus_pci_dev_operations = { |
465 | + .owner = THIS_MODULE, | |
465 | 466 | .open = proc_bus_pci_dev_open, |
466 | 467 | .read = seq_read, |
467 | 468 | .llseek = seq_lseek, |
468 | 469 | |
... | ... | @@ -470,12 +471,10 @@ |
470 | 471 | |
471 | 472 | static int __init pci_proc_init(void) |
472 | 473 | { |
473 | - struct proc_dir_entry *entry; | |
474 | 474 | struct pci_dev *dev = NULL; |
475 | 475 | proc_bus_pci_dir = proc_mkdir("bus/pci", NULL); |
476 | - entry = create_proc_entry("devices", 0, proc_bus_pci_dir); | |
477 | - if (entry) | |
478 | - entry->proc_fops = &proc_bus_pci_dev_operations; | |
476 | + proc_create("devices", 0, proc_bus_pci_dir, | |
477 | + &proc_bus_pci_dev_operations); | |
479 | 478 | proc_initialized = 1; |
480 | 479 | while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) { |
481 | 480 | pci_proc_attach_device(dev); |
drivers/pnp/isapnp/proc.c
... | ... | @@ -85,6 +85,7 @@ |
85 | 85 | } |
86 | 86 | |
87 | 87 | static const struct file_operations isapnp_proc_bus_file_operations = { |
88 | + .owner = THIS_MODULE, | |
88 | 89 | .llseek = isapnp_proc_bus_lseek, |
89 | 90 | .read = isapnp_proc_bus_read, |
90 | 91 | }; |
91 | 92 | |
... | ... | @@ -102,12 +103,10 @@ |
102 | 103 | return -ENOMEM; |
103 | 104 | } |
104 | 105 | sprintf(name, "%02x", dev->number); |
105 | - e = dev->procent = create_proc_entry(name, S_IFREG | S_IRUGO, de); | |
106 | + e = dev->procent = proc_create_data(name, S_IFREG | S_IRUGO, de, | |
107 | + &isapnp_proc_bus_file_operations, dev); | |
106 | 108 | if (!e) |
107 | 109 | return -ENOMEM; |
108 | - e->proc_fops = &isapnp_proc_bus_file_operations; | |
109 | - e->owner = THIS_MODULE; | |
110 | - e->data = dev; | |
111 | 110 | e->size = 256; |
112 | 111 | return 0; |
113 | 112 | } |
drivers/rtc/rtc-proc.c
... | ... | @@ -108,12 +108,10 @@ |
108 | 108 | if (rtc->id == 0) { |
109 | 109 | struct proc_dir_entry *ent; |
110 | 110 | |
111 | - ent = create_proc_entry("driver/rtc", 0, NULL); | |
112 | - if (ent) { | |
113 | - ent->proc_fops = &rtc_proc_fops; | |
111 | + ent = proc_create_data("driver/rtc", 0, NULL, | |
112 | + &rtc_proc_fops, rtc); | |
113 | + if (ent) | |
114 | 114 | ent->owner = rtc->owner; |
115 | - ent->data = rtc; | |
116 | - } | |
117 | 115 | } |
118 | 116 | } |
119 | 117 |