Commit c7705f3449c7edd5c1744871097f93977227afc4

Authored by Denis V. Lunev
Committed by Linus Torvalds
1 parent 1b50221738

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
... ... @@ -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  
... ... @@ -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;
... ... @@ -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