Commit 2026c6f8 authored by Al Viro's avatar Al Viro
Browse files

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: default avatarPaul Moore <paul@paul-moore.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent fc45aee6
Loading
Loading
Loading
Loading
+12 −21
Original line number Diff line number Diff line
@@ -127,24 +127,19 @@ static struct dentry *securityfs_create_dentry(const char *name, umode_t mode,
		parent = mount->mnt_root;
	}

	dir = d_inode(parent);

	inode_lock(dir);
	dentry = lookup_noperm(&QSTR(name), parent);
	if (IS_ERR(dentry))
	inode = new_inode(parent->d_sb);
	if (unlikely(!inode)) {
		dentry = ERR_PTR(-ENOMEM);
		goto out;

	if (d_really_is_positive(dentry)) {
		error = -EEXIST;
		goto out1;
	}

	inode = new_inode(dir->i_sb);
	if (!inode) {
		error = -ENOMEM;
		goto out1;
	}
	dir = d_inode(parent);

	dentry = simple_start_creating(parent, name);
	if (IS_ERR(dentry)) {
		iput(inode);
		goto out;
	}
	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;