Commit 21ac295b42b8bdc3d677aba6bd7308a38de28a9b

Authored by Denis V. Lunev
Committed by Linus Torvalds
1 parent 34b37235c6

afs: 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>
Acked-by: David Howells <dhowells@redhat.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>

Showing 1 changed file with 14 additions and 19 deletions Side-by-side Diff

... ... @@ -41,6 +41,7 @@
41 41 .write = afs_proc_cells_write,
42 42 .llseek = seq_lseek,
43 43 .release = seq_release,
  44 + .owner = THIS_MODULE,
44 45 };
45 46  
46 47 static int afs_proc_rootcell_open(struct inode *inode, struct file *file);
... ... @@ -56,7 +57,8 @@
56 57 .read = afs_proc_rootcell_read,
57 58 .write = afs_proc_rootcell_write,
58 59 .llseek = no_llseek,
59   - .release = afs_proc_rootcell_release
  60 + .release = afs_proc_rootcell_release,
  61 + .owner = THIS_MODULE,
60 62 };
61 63  
62 64 static int afs_proc_cell_volumes_open(struct inode *inode, struct file *file);
... ... @@ -80,6 +82,7 @@
80 82 .read = seq_read,
81 83 .llseek = seq_lseek,
82 84 .release = afs_proc_cell_volumes_release,
  85 + .owner = THIS_MODULE,
83 86 };
84 87  
85 88 static int afs_proc_cell_vlservers_open(struct inode *inode,
... ... @@ -104,6 +107,7 @@
104 107 .read = seq_read,
105 108 .llseek = seq_lseek,
106 109 .release = afs_proc_cell_vlservers_release,
  110 + .owner = THIS_MODULE,
107 111 };
108 112  
109 113 static int afs_proc_cell_servers_open(struct inode *inode, struct file *file);
... ... @@ -127,6 +131,7 @@
127 131 .read = seq_read,
128 132 .llseek = seq_lseek,
129 133 .release = afs_proc_cell_servers_release,
  134 + .owner = THIS_MODULE,
130 135 };
131 136  
132 137 /*
133 138  
134 139  
135 140  
... ... @@ -143,17 +148,13 @@
143 148 goto error_dir;
144 149 proc_afs->owner = THIS_MODULE;
145 150  
146   - p = create_proc_entry("cells", 0, proc_afs);
  151 + p = proc_create("cells", 0, proc_afs, &afs_proc_cells_fops);
147 152 if (!p)
148 153 goto error_cells;
149   - p->proc_fops = &afs_proc_cells_fops;
150   - p->owner = THIS_MODULE;
151 154  
152   - p = create_proc_entry("rootcell", 0, proc_afs);
  155 + p = proc_create("rootcell", 0, proc_afs, &afs_proc_rootcell_fops);
153 156 if (!p)
154 157 goto error_rootcell;
155   - p->proc_fops = &afs_proc_rootcell_fops;
156   - p->owner = THIS_MODULE;
157 158  
158 159 _leave(" = 0");
159 160 return 0;
160 161  
161 162  
162 163  
163 164  
164 165  
... ... @@ -395,26 +396,20 @@
395 396 if (!cell->proc_dir)
396 397 goto error_dir;
397 398  
398   - p = create_proc_entry("servers", 0, cell->proc_dir);
  399 + p = proc_create_data("servers", 0, cell->proc_dir,
  400 + &afs_proc_cell_servers_fops, cell);
399 401 if (!p)
400 402 goto error_servers;
401   - p->proc_fops = &afs_proc_cell_servers_fops;
402   - p->owner = THIS_MODULE;
403   - p->data = cell;
404 403  
405   - p = create_proc_entry("vlservers", 0, cell->proc_dir);
  404 + p = proc_create_data("vlservers", 0, cell->proc_dir,
  405 + &afs_proc_cell_vlservers_fops, cell);
406 406 if (!p)
407 407 goto error_vlservers;
408   - p->proc_fops = &afs_proc_cell_vlservers_fops;
409   - p->owner = THIS_MODULE;
410   - p->data = cell;
411 408  
412   - p = create_proc_entry("volumes", 0, cell->proc_dir);
  409 + p = proc_create_data("volumes", 0, cell->proc_dir,
  410 + &afs_proc_cell_volumes_fops, cell);
413 411 if (!p)
414 412 goto error_volumes;
415   - p->proc_fops = &afs_proc_cell_volumes_fops;
416   - p->owner = THIS_MODULE;
417   - p->data = cell;
418 413  
419 414 _leave(" = 0");
420 415 return 0;