提交 21ac295b 编写于 作者: D Denis V. Lunev 提交者: Linus Torvalds

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: NDenis V. Lunev <den@openvz.org>
Acked-by: NDavid Howells <dhowells@redhat.com>
Cc: Alexey Dobriyan <adobriyan@gmail.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 34b37235
...@@ -41,6 +41,7 @@ static const struct file_operations afs_proc_cells_fops = { ...@@ -41,6 +41,7 @@ static const struct file_operations afs_proc_cells_fops = {
.write = afs_proc_cells_write, .write = afs_proc_cells_write,
.llseek = seq_lseek, .llseek = seq_lseek,
.release = seq_release, .release = seq_release,
.owner = THIS_MODULE,
}; };
static int afs_proc_rootcell_open(struct inode *inode, struct file *file); static int afs_proc_rootcell_open(struct inode *inode, struct file *file);
...@@ -56,7 +57,8 @@ static const struct file_operations afs_proc_rootcell_fops = { ...@@ -56,7 +57,8 @@ static const struct file_operations afs_proc_rootcell_fops = {
.read = afs_proc_rootcell_read, .read = afs_proc_rootcell_read,
.write = afs_proc_rootcell_write, .write = afs_proc_rootcell_write,
.llseek = no_llseek, .llseek = no_llseek,
.release = afs_proc_rootcell_release .release = afs_proc_rootcell_release,
.owner = THIS_MODULE,
}; };
static int afs_proc_cell_volumes_open(struct inode *inode, struct file *file); static int afs_proc_cell_volumes_open(struct inode *inode, struct file *file);
...@@ -80,6 +82,7 @@ static const struct file_operations afs_proc_cell_volumes_fops = { ...@@ -80,6 +82,7 @@ static const struct file_operations afs_proc_cell_volumes_fops = {
.read = seq_read, .read = seq_read,
.llseek = seq_lseek, .llseek = seq_lseek,
.release = afs_proc_cell_volumes_release, .release = afs_proc_cell_volumes_release,
.owner = THIS_MODULE,
}; };
static int afs_proc_cell_vlservers_open(struct inode *inode, static int afs_proc_cell_vlservers_open(struct inode *inode,
...@@ -104,6 +107,7 @@ static const struct file_operations afs_proc_cell_vlservers_fops = { ...@@ -104,6 +107,7 @@ static const struct file_operations afs_proc_cell_vlservers_fops = {
.read = seq_read, .read = seq_read,
.llseek = seq_lseek, .llseek = seq_lseek,
.release = afs_proc_cell_vlservers_release, .release = afs_proc_cell_vlservers_release,
.owner = THIS_MODULE,
}; };
static int afs_proc_cell_servers_open(struct inode *inode, struct file *file); static int afs_proc_cell_servers_open(struct inode *inode, struct file *file);
...@@ -127,6 +131,7 @@ static const struct file_operations afs_proc_cell_servers_fops = { ...@@ -127,6 +131,7 @@ static const struct file_operations afs_proc_cell_servers_fops = {
.read = seq_read, .read = seq_read,
.llseek = seq_lseek, .llseek = seq_lseek,
.release = afs_proc_cell_servers_release, .release = afs_proc_cell_servers_release,
.owner = THIS_MODULE,
}; };
/* /*
...@@ -143,17 +148,13 @@ int afs_proc_init(void) ...@@ -143,17 +148,13 @@ int afs_proc_init(void)
goto error_dir; goto error_dir;
proc_afs->owner = THIS_MODULE; proc_afs->owner = THIS_MODULE;
p = create_proc_entry("cells", 0, proc_afs); p = proc_create("cells", 0, proc_afs, &afs_proc_cells_fops);
if (!p) if (!p)
goto error_cells; goto error_cells;
p->proc_fops = &afs_proc_cells_fops;
p->owner = THIS_MODULE;
p = create_proc_entry("rootcell", 0, proc_afs); p = proc_create("rootcell", 0, proc_afs, &afs_proc_rootcell_fops);
if (!p) if (!p)
goto error_rootcell; goto error_rootcell;
p->proc_fops = &afs_proc_rootcell_fops;
p->owner = THIS_MODULE;
_leave(" = 0"); _leave(" = 0");
return 0; return 0;
...@@ -395,26 +396,20 @@ int afs_proc_cell_setup(struct afs_cell *cell) ...@@ -395,26 +396,20 @@ int afs_proc_cell_setup(struct afs_cell *cell)
if (!cell->proc_dir) if (!cell->proc_dir)
goto error_dir; goto error_dir;
p = create_proc_entry("servers", 0, cell->proc_dir); p = proc_create_data("servers", 0, cell->proc_dir,
&afs_proc_cell_servers_fops, cell);
if (!p) if (!p)
goto error_servers; goto error_servers;
p->proc_fops = &afs_proc_cell_servers_fops;
p->owner = THIS_MODULE;
p->data = cell;
p = create_proc_entry("vlservers", 0, cell->proc_dir); p = proc_create_data("vlservers", 0, cell->proc_dir,
&afs_proc_cell_vlservers_fops, cell);
if (!p) if (!p)
goto error_vlservers; goto error_vlservers;
p->proc_fops = &afs_proc_cell_vlservers_fops;
p->owner = THIS_MODULE;
p->data = cell;
p = create_proc_entry("volumes", 0, cell->proc_dir); p = proc_create_data("volumes", 0, cell->proc_dir,
&afs_proc_cell_volumes_fops, cell);
if (!p) if (!p)
goto error_volumes; goto error_volumes;
p->proc_fops = &afs_proc_cell_volumes_fops;
p->owner = THIS_MODULE;
p->data = cell;
_leave(" = 0"); _leave(" = 0");
return 0; return 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册