diff options
Diffstat (limited to 'fs/jfs')
-rw-r--r-- | fs/jfs/file.c | 9 | ||||
-rw-r--r-- | fs/jfs/jfs_inode.h | 2 |
2 files changed, 9 insertions, 2 deletions
diff --git a/fs/jfs/file.c b/fs/jfs/file.c index 9f32315acef1..7527855b5cc6 100644 --- a/fs/jfs/file.c +++ b/fs/jfs/file.c | |||
@@ -28,19 +28,26 @@ | |||
28 | #include "jfs_acl.h" | 28 | #include "jfs_acl.h" |
29 | #include "jfs_debug.h" | 29 | #include "jfs_debug.h" |
30 | 30 | ||
31 | int jfs_fsync(struct file *file, int datasync) | 31 | int jfs_fsync(struct file *file, loff_t start, loff_t end, int datasync) |
32 | { | 32 | { |
33 | struct inode *inode = file->f_mapping->host; | 33 | struct inode *inode = file->f_mapping->host; |
34 | int rc = 0; | 34 | int rc = 0; |
35 | 35 | ||
36 | rc = filemap_write_and_wait_range(inode->i_mapping, start, end); | ||
37 | if (rc) | ||
38 | return rc; | ||
39 | |||
40 | mutex_lock(&inode->i_mutex); | ||
36 | if (!(inode->i_state & I_DIRTY) || | 41 | if (!(inode->i_state & I_DIRTY) || |
37 | (datasync && !(inode->i_state & I_DIRTY_DATASYNC))) { | 42 | (datasync && !(inode->i_state & I_DIRTY_DATASYNC))) { |
38 | /* Make sure committed changes hit the disk */ | 43 | /* Make sure committed changes hit the disk */ |
39 | jfs_flush_journal(JFS_SBI(inode->i_sb)->log, 1); | 44 | jfs_flush_journal(JFS_SBI(inode->i_sb)->log, 1); |
45 | mutex_unlock(&inode->i_mutex); | ||
40 | return rc; | 46 | return rc; |
41 | } | 47 | } |
42 | 48 | ||
43 | rc |= jfs_commit_inode(inode, 1); | 49 | rc |= jfs_commit_inode(inode, 1); |
50 | mutex_unlock(&inode->i_mutex); | ||
44 | 51 | ||
45 | return rc ? -EIO : 0; | 52 | return rc ? -EIO : 0; |
46 | } | 53 | } |
diff --git a/fs/jfs/jfs_inode.h b/fs/jfs/jfs_inode.h index ec2fb8b945fc..9271cfe4a149 100644 --- a/fs/jfs/jfs_inode.h +++ b/fs/jfs/jfs_inode.h | |||
@@ -21,7 +21,7 @@ | |||
21 | struct fid; | 21 | struct fid; |
22 | 22 | ||
23 | extern struct inode *ialloc(struct inode *, umode_t); | 23 | extern struct inode *ialloc(struct inode *, umode_t); |
24 | extern int jfs_fsync(struct file *, int); | 24 | extern int jfs_fsync(struct file *, loff_t, loff_t, int); |
25 | extern long jfs_ioctl(struct file *, unsigned int, unsigned long); | 25 | extern long jfs_ioctl(struct file *, unsigned int, unsigned long); |
26 | extern long jfs_compat_ioctl(struct file *, unsigned int, unsigned long); | 26 | extern long jfs_compat_ioctl(struct file *, unsigned int, unsigned long); |
27 | extern struct inode *jfs_iget(struct super_block *, unsigned long); | 27 | extern struct inode *jfs_iget(struct super_block *, unsigned long); |