oprofilefs: add missing ->i_mutex locking in object creation
Right now it's safe only during initial mount *and* functions are asking to be abused for dynamic adding of objects. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
2248b87ec1
commit
3f3834c354
1 changed files with 13 additions and 3 deletions
|
@ -139,17 +139,22 @@ static int __oprofilefs_create_file(struct super_block *sb,
|
|||
struct dentry *dentry;
|
||||
struct inode *inode;
|
||||
|
||||
mutex_lock(&root->d_inode->i_mutex);
|
||||
dentry = d_alloc_name(root, name);
|
||||
if (!dentry)
|
||||
if (!dentry) {
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
return -ENOMEM;
|
||||
}
|
||||
inode = oprofilefs_get_inode(sb, S_IFREG | perm);
|
||||
if (!inode) {
|
||||
dput(dentry);
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
return -ENOMEM;
|
||||
}
|
||||
inode->i_fop = fops;
|
||||
inode->i_private = priv;
|
||||
d_add(dentry, inode);
|
||||
dentry->d_inode->i_private = priv;
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -212,17 +217,22 @@ struct dentry *oprofilefs_mkdir(struct super_block *sb,
|
|||
struct dentry *dentry;
|
||||
struct inode *inode;
|
||||
|
||||
mutex_lock(&root->d_inode->i_mutex);
|
||||
dentry = d_alloc_name(root, name);
|
||||
if (!dentry)
|
||||
if (!dentry) {
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
return NULL;
|
||||
}
|
||||
inode = oprofilefs_get_inode(sb, S_IFDIR | 0755);
|
||||
if (!inode) {
|
||||
dput(dentry);
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
return NULL;
|
||||
}
|
||||
inode->i_op = &simple_dir_inode_operations;
|
||||
inode->i_fop = &simple_dir_operations;
|
||||
d_add(dentry, inode);
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
return dentry;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue