configfs: Don't try to d_delete() negative dentries.
When configfs is faking mkdir() on its subsystem or default group objects, it starts by adding a negative dentry. It then tries to instantiate the group. If that should fail, it must clean up after itself. I was using d_delete() here, but configfs_attach_group() promises to return an empty dentry on error. d_delete() explodes with the entry dentry. Let's try d_drop() instead. The unhashing is what we want for our dentry. Signed-off-by: Joel Becker <jlbec@evilplan.org>
This commit is contained in:
parent
df016c665b
commit
df7f99670a
1 changed files with 4 additions and 2 deletions
|
@ -689,7 +689,8 @@ static int create_default_group(struct config_group *parent_group,
|
|||
sd = child->d_fsdata;
|
||||
sd->s_type |= CONFIGFS_USET_DEFAULT;
|
||||
} else {
|
||||
d_delete(child);
|
||||
BUG_ON(child->d_inode);
|
||||
d_drop(child);
|
||||
dput(child);
|
||||
}
|
||||
}
|
||||
|
@ -1683,7 +1684,8 @@ int configfs_register_subsystem(struct configfs_subsystem *subsys)
|
|||
err = configfs_attach_group(sd->s_element, &group->cg_item,
|
||||
dentry);
|
||||
if (err) {
|
||||
d_delete(dentry);
|
||||
BUG_ON(dentry->d_inode);
|
||||
d_drop(dentry);
|
||||
dput(dentry);
|
||||
} else {
|
||||
spin_lock(&configfs_dirent_lock);
|
||||
|
|
Loading…
Reference in a new issue