diff options
| -rw-r--r-- | fs/hppfs/hppfs.c | 13 | 
1 files changed, 12 insertions, 1 deletions
diff --git a/fs/hppfs/hppfs.c b/fs/hppfs/hppfs.c index 126d3c2e2de..8ef57793c92 100644 --- a/fs/hppfs/hppfs.c +++ b/fs/hppfs/hppfs.c @@ -436,7 +436,6 @@ static int hppfs_open(struct inode *inode, struct file *file)  	path.mnt = inode->i_sb->s_fs_info;  	path.dentry = HPPFS_I(inode)->proc_dentry; -	/* XXX This isn't closed anywhere */  	data->proc_file = dentry_open(&path, file_mode(file->f_mode), cred);  	err = PTR_ERR(data->proc_file);  	if (IS_ERR(data->proc_file)) @@ -523,12 +522,23 @@ static loff_t hppfs_llseek(struct file *file, loff_t off, int where)  	return default_llseek(file, off, where);  } +static int hppfs_release(struct inode *inode, struct file *file) +{ +	struct hppfs_private *data = file->private_data; +	struct file *proc_file = data->proc_file; +	if (proc_file) +		fput(proc_file); +	kfree(data); +	return 0; +} +  static const struct file_operations hppfs_file_fops = {  	.owner		= NULL,  	.llseek		= hppfs_llseek,  	.read		= hppfs_read,  	.write		= hppfs_write,  	.open		= hppfs_open, +	.release	= hppfs_release,  };  struct hppfs_dirent { @@ -582,6 +592,7 @@ static const struct file_operations hppfs_dir_fops = {  	.open		= hppfs_dir_open,  	.fsync		= hppfs_fsync,  	.llseek		= default_llseek, +	.release	= hppfs_release,  };  static int hppfs_statfs(struct dentry *dentry, struct kstatfs *sf)  |