Skip to content

Commit ef550a2

Browse files
Al ViroKernel Patches Daemon
authored andcommitted
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 <[email protected]> Signed-off-by: Al Viro <[email protected]>
1 parent dbb3070 commit ef550a2

File tree

1 file changed

+12
-21
lines changed

1 file changed

+12
-21
lines changed

security/inode.c

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -127,24 +127,19 @@ static struct dentry *securityfs_create_dentry(const char *name, umode_t mode,
127127
parent = mount->mnt_root;
128128
}
129129

130-
dir = d_inode(parent);
131-
132-
inode_lock(dir);
133-
dentry = lookup_noperm(&QSTR(name), parent);
134-
if (IS_ERR(dentry))
130+
inode = new_inode(parent->d_sb);
131+
if (unlikely(!inode)) {
132+
dentry = ERR_PTR(-ENOMEM);
135133
goto out;
136-
137-
if (d_really_is_positive(dentry)) {
138-
error = -EEXIST;
139-
goto out1;
140134
}
141135

142-
inode = new_inode(dir->i_sb);
143-
if (!inode) {
144-
error = -ENOMEM;
145-
goto out1;
146-
}
136+
dir = d_inode(parent);
147137

138+
dentry = simple_start_creating(parent, name);
139+
if (IS_ERR(dentry)) {
140+
iput(inode);
141+
goto out;
142+
}
148143
inode->i_ino = get_next_ino();
149144
inode->i_mode = mode;
150145
simple_inode_init_ts(inode);
@@ -160,15 +155,11 @@ static struct dentry *securityfs_create_dentry(const char *name, umode_t mode,
160155
} else {
161156
inode->i_fop = fops;
162157
}
163-
d_instantiate(dentry, inode);
164-
inode_unlock(dir);
165-
return dentry;
158+
d_make_persistent(dentry, inode);
159+
simple_done_creating(dentry);
160+
return dentry; // borrowed
166161

167-
out1:
168-
dput(dentry);
169-
dentry = ERR_PTR(error);
170162
out:
171-
inode_unlock(dir);
172163
if (pinned)
173164
simple_release_fs(&mount, &mount_count);
174165
return dentry;

0 commit comments

Comments
 (0)