mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
convert securityfs
securityfs uses simple_recursive_removal(), but does not bother to mark
dentries persistent. This is the only place where it still happens; get
rid of that irregularity.
* use simple_{start,done}_creating() and d_make_persitent(); kill_litter_super()
use was already gone, since we empty the filesystem instance before it gets
shut down.
Acked-by: Paul Moore <paul@paul-moore.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -127,24 +127,19 @@ static struct dentry *securityfs_create_dentry(const char *name, umode_t mode,
|
||||
parent = mount->mnt_root;
|
||||
}
|
||||
|
||||
inode = new_inode(parent->d_sb);
|
||||
if (unlikely(!inode)) {
|
||||
dentry = ERR_PTR(-ENOMEM);
|
||||
goto out;
|
||||
}
|
||||
|
||||
dir = d_inode(parent);
|
||||
|
||||
inode_lock(dir);
|
||||
dentry = lookup_noperm(&QSTR(name), parent);
|
||||
if (IS_ERR(dentry))
|
||||
dentry = simple_start_creating(parent, name);
|
||||
if (IS_ERR(dentry)) {
|
||||
iput(inode);
|
||||
goto out;
|
||||
|
||||
if (d_really_is_positive(dentry)) {
|
||||
error = -EEXIST;
|
||||
goto out1;
|
||||
}
|
||||
|
||||
inode = new_inode(dir->i_sb);
|
||||
if (!inode) {
|
||||
error = -ENOMEM;
|
||||
goto out1;
|
||||
}
|
||||
|
||||
inode->i_ino = get_next_ino();
|
||||
inode->i_mode = mode;
|
||||
simple_inode_init_ts(inode);
|
||||
@@ -160,15 +155,11 @@ static struct dentry *securityfs_create_dentry(const char *name, umode_t mode,
|
||||
} else {
|
||||
inode->i_fop = fops;
|
||||
}
|
||||
d_instantiate(dentry, inode);
|
||||
inode_unlock(dir);
|
||||
return dentry;
|
||||
d_make_persistent(dentry, inode);
|
||||
simple_done_creating(dentry);
|
||||
return dentry; // borrowed
|
||||
|
||||
out1:
|
||||
dput(dentry);
|
||||
dentry = ERR_PTR(error);
|
||||
out:
|
||||
inode_unlock(dir);
|
||||
if (pinned)
|
||||
simple_release_fs(&mount, &mount_count);
|
||||
return dentry;
|
||||
|
||||
Reference in New Issue
Block a user