Commit 21ac295b42b8bdc3d677aba6bd7308a38de28a9b
Committed by
Linus Torvalds
1 parent
34b37235c6
Exists in
master
and in
7 other branches
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
fs/afs/proc.c
... | ... | @@ -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; |