Merge tag 'arm64-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cmarinas...
[cascardo/linux.git] / fs / hppfs / hppfs.c
index 126d3c2..cd3e389 100644 (file)
@@ -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)