Skip to content

Commit

Permalink
debugfs: split end_creating() into success and failure cases
Browse files Browse the repository at this point in the history
... and don't bother with dput(dentry) in the former and with
dget(dentry) preceding all its calls.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
  • Loading branch information
Al Viro committed Jan 25, 2015
1 parent edac65e commit 5233e31
Showing 1 changed file with 13 additions and 14 deletions.
27 changes: 13 additions & 14 deletions fs/debugfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -256,15 +256,17 @@ static struct dentry *start_creating(const char *name, struct dentry *parent)
return dentry;
}

static struct dentry *end_creating(struct dentry *dentry, int error)
static struct dentry *failed_creating(struct dentry *dentry)
{
mutex_unlock(&dentry->d_parent->d_inode->i_mutex);
dput(dentry);
simple_release_fs(&debugfs_mount, &debugfs_mount_count);
return NULL;
}

if (error) {
dentry = NULL;
simple_release_fs(&debugfs_mount, &debugfs_mount_count);
}
static struct dentry *end_creating(struct dentry *dentry)
{
mutex_unlock(&dentry->d_parent->d_inode->i_mutex);
return dentry;
}

Expand Down Expand Up @@ -311,15 +313,14 @@ struct dentry *debugfs_create_file(const char *name, umode_t mode,

inode = debugfs_get_inode(dentry->d_sb);
if (unlikely(!inode))
return end_creating(dentry, -ENOMEM);
return failed_creating(dentry);

inode->i_mode = mode;
inode->i_fop = fops ? fops : &debugfs_file_operations;
inode->i_private = data;
d_instantiate(dentry, inode);
dget(dentry);
fsnotify_create(dentry->d_parent->d_inode, dentry);
return end_creating(dentry, 0);
return end_creating(dentry);
}
EXPORT_SYMBOL_GPL(debugfs_create_file);

Expand Down Expand Up @@ -351,7 +352,7 @@ struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)

inode = debugfs_get_inode(dentry->d_sb);
if (unlikely(!inode))
return end_creating(dentry, -ENOMEM);
return failed_creating(dentry);

inode->i_mode = S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO;
inode->i_op = &simple_dir_inode_operations;
Expand All @@ -360,10 +361,9 @@ struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)
/* directory inodes start off with i_nlink == 2 (for "." entry) */
inc_nlink(inode);
d_instantiate(dentry, inode);
dget(dentry);
inc_nlink(dentry->d_parent->d_inode);
fsnotify_mkdir(dentry->d_parent->d_inode, dentry);
return end_creating(dentry, 0);
return end_creating(dentry);
}
EXPORT_SYMBOL_GPL(debugfs_create_dir);

Expand Down Expand Up @@ -408,14 +408,13 @@ struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent,
inode = debugfs_get_inode(dentry->d_sb);
if (unlikely(!inode)) {
kfree(link);
return end_creating(dentry, -ENOMEM);
return failed_creating(dentry);
}
inode->i_mode = S_IFLNK | S_IRWXUGO;
inode->i_op = &debugfs_link_operations;
inode->i_private = link;
d_instantiate(dentry, inode);
dget(dentry);
return end_creating(dentry, 0);
return end_creating(dentry);
}
EXPORT_SYMBOL_GPL(debugfs_create_symlink);

Expand Down

0 comments on commit 5233e31

Please sign in to comment.