diff options
Diffstat (limited to 'fs/hppfs/hppfs.c')
| -rw-r--r-- | fs/hppfs/hppfs.c | 21 | 
1 files changed, 13 insertions, 8 deletions
diff --git a/fs/hppfs/hppfs.c b/fs/hppfs/hppfs.c index 74f55703be4..cd3e38972c8 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 { @@ -570,18 +580,12 @@ static int hppfs_readdir(struct file *file, void *ent, filldir_t filldir)  	return err;  } -static int hppfs_fsync(struct file *file, loff_t start, loff_t end, -		       int datasync) -{ -	return filemap_write_and_wait_range(file->f_mapping, start, end); -} -  static const struct file_operations hppfs_dir_fops = {  	.owner		= NULL,  	.readdir	= hppfs_readdir,  	.open		= hppfs_dir_open, -	.fsync		= hppfs_fsync,  	.llseek		= default_llseek, +	.release	= hppfs_release,  };  static int hppfs_statfs(struct dentry *dentry, struct kstatfs *sf) @@ -748,6 +752,7 @@ static struct file_system_type hppfs_type = {  	.kill_sb	= kill_anon_super,  	.fs_flags 	= 0,  }; +MODULE_ALIAS_FS("hppfs");  static int __init init_hppfs(void)  {  |