diff options
Diffstat (limited to 'fs/hppfs/hppfs.c')
-rw-r--r-- | fs/hppfs/hppfs.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/fs/hppfs/hppfs.c b/fs/hppfs/hppfs.c index 126d3c2e2dee..cd3e38972c86 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) | |||
436 | path.mnt = inode->i_sb->s_fs_info; | 436 | path.mnt = inode->i_sb->s_fs_info; |
437 | path.dentry = HPPFS_I(inode)->proc_dentry; | 437 | path.dentry = HPPFS_I(inode)->proc_dentry; |
438 | 438 | ||
439 | /* XXX This isn't closed anywhere */ | ||
440 | data->proc_file = dentry_open(&path, file_mode(file->f_mode), cred); | 439 | data->proc_file = dentry_open(&path, file_mode(file->f_mode), cred); |
441 | err = PTR_ERR(data->proc_file); | 440 | err = PTR_ERR(data->proc_file); |
442 | if (IS_ERR(data->proc_file)) | 441 | if (IS_ERR(data->proc_file)) |
@@ -523,12 +522,23 @@ static loff_t hppfs_llseek(struct file *file, loff_t off, int where) | |||
523 | return default_llseek(file, off, where); | 522 | return default_llseek(file, off, where); |
524 | } | 523 | } |
525 | 524 | ||
525 | static int hppfs_release(struct inode *inode, struct file *file) | ||
526 | { | ||
527 | struct hppfs_private *data = file->private_data; | ||
528 | struct file *proc_file = data->proc_file; | ||
529 | if (proc_file) | ||
530 | fput(proc_file); | ||
531 | kfree(data); | ||
532 | return 0; | ||
533 | } | ||
534 | |||
526 | static const struct file_operations hppfs_file_fops = { | 535 | static const struct file_operations hppfs_file_fops = { |
527 | .owner = NULL, | 536 | .owner = NULL, |
528 | .llseek = hppfs_llseek, | 537 | .llseek = hppfs_llseek, |
529 | .read = hppfs_read, | 538 | .read = hppfs_read, |
530 | .write = hppfs_write, | 539 | .write = hppfs_write, |
531 | .open = hppfs_open, | 540 | .open = hppfs_open, |
541 | .release = hppfs_release, | ||
532 | }; | 542 | }; |
533 | 543 | ||
534 | struct hppfs_dirent { | 544 | struct hppfs_dirent { |
@@ -570,18 +580,12 @@ static int hppfs_readdir(struct file *file, void *ent, filldir_t filldir) | |||
570 | return err; | 580 | return err; |
571 | } | 581 | } |
572 | 582 | ||
573 | static int hppfs_fsync(struct file *file, loff_t start, loff_t end, | ||
574 | int datasync) | ||
575 | { | ||
576 | return filemap_write_and_wait_range(file->f_mapping, start, end); | ||
577 | } | ||
578 | |||
579 | static const struct file_operations hppfs_dir_fops = { | 583 | static const struct file_operations hppfs_dir_fops = { |
580 | .owner = NULL, | 584 | .owner = NULL, |
581 | .readdir = hppfs_readdir, | 585 | .readdir = hppfs_readdir, |
582 | .open = hppfs_dir_open, | 586 | .open = hppfs_dir_open, |
583 | .fsync = hppfs_fsync, | ||
584 | .llseek = default_llseek, | 587 | .llseek = default_llseek, |
588 | .release = hppfs_release, | ||
585 | }; | 589 | }; |
586 | 590 | ||
587 | static int hppfs_statfs(struct dentry *dentry, struct kstatfs *sf) | 591 | static int hppfs_statfs(struct dentry *dentry, struct kstatfs *sf) |