diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2011-07-17 22:24:15 -0400 | 
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2011-07-17 23:22:17 -0400 | 
| commit | 3cc0658e35124ace881f6942839dcae877c3eaed (patch) | |
| tree | 651cd3a34747a65c966168f1099489a8bc874d82 /fs/hppfs/hppfs.c | |
| parent | 0577d1ba411f9c40693b8b3e4aa7e0892cd03091 (diff) | |
hppfs: fix dentry leak
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/hppfs/hppfs.c')
| -rw-r--r-- | fs/hppfs/hppfs.c | 12 | 
1 files changed, 6 insertions, 6 deletions
| diff --git a/fs/hppfs/hppfs.c b/fs/hppfs/hppfs.c index 87ed48e0343d..7d6a0e92bcf0 100644 --- a/fs/hppfs/hppfs.c +++ b/fs/hppfs/hppfs.c @@ -174,13 +174,11 @@ static struct dentry *hppfs_lookup(struct inode *ino, struct dentry *dentry,  	err = -ENOMEM;  	inode = get_inode(ino->i_sb, proc_dentry);  	if (!inode) -		goto out_dput; +		goto out;   	d_add(dentry, inode);  	return NULL; - out_dput: -	dput(proc_dentry);   out:  	return ERR_PTR(err);  } @@ -690,8 +688,10 @@ static struct inode *get_inode(struct super_block *sb, struct dentry *dentry)  	struct inode *proc_ino = dentry->d_inode;  	struct inode *inode = new_inode(sb); -	if (!inode) +	if (!inode) { +		dput(dentry);  		return ERR_PTR(-ENOMEM); +	}  	if (S_ISDIR(dentry->d_inode->i_mode)) {  		inode->i_op = &hppfs_dir_iops; @@ -704,7 +704,7 @@ static struct inode *get_inode(struct super_block *sb, struct dentry *dentry)  		inode->i_fop = &hppfs_file_fops;  	} -	HPPFS_I(inode)->proc_dentry = dget(dentry); +	HPPFS_I(inode)->proc_dentry = dentry;  	inode->i_uid = proc_ino->i_uid;  	inode->i_gid = proc_ino->i_gid; @@ -737,7 +737,7 @@ static int hppfs_fill_super(struct super_block *sb, void *d, int silent)  	sb->s_fs_info = proc_mnt;  	err = -ENOMEM; -	root_inode = get_inode(sb, proc_mnt->mnt_sb->s_root); +	root_inode = get_inode(sb, dget(proc_mnt->mnt_sb->s_root));  	if (!root_inode)  		goto out_mntput; | 
