diff options
author | Joel Becker <jlbec@evilplan.org> | 2011-08-21 21:02:57 -0700 |
---|---|---|
committer | Joel Becker <jlbec@evilplan.org> | 2011-08-21 21:02:57 -0700 |
commit | 99b1bb61b225c3eb4d3b196d4f1d041695b19a7e (patch) | |
tree | 06cabdc34538f3b38a39e3b802ecc1a2ab2aae00 /fs/nilfs2/file.c | |
parent | c7e25e6e0b0486492c5faaf6312b37413642c48e (diff) | |
parent | 93862d5e1ab875664c6cc95254fc365028a48bb1 (diff) | |
download | op-kernel-dev-99b1bb61b225c3eb4d3b196d4f1d041695b19a7e.zip op-kernel-dev-99b1bb61b225c3eb4d3b196d4f1d041695b19a7e.tar.gz |
Merge branch 'mw-3.1-jul25' of git://oss.oracle.com/git/smushran/linux-2.6 into ocfs2-fixes
Diffstat (limited to 'fs/nilfs2/file.c')
-rw-r--r-- | fs/nilfs2/file.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/fs/nilfs2/file.c b/fs/nilfs2/file.c index d7eeca6..2660152 100644 --- a/fs/nilfs2/file.c +++ b/fs/nilfs2/file.c @@ -27,7 +27,7 @@ #include "nilfs.h" #include "segment.h" -int nilfs_sync_file(struct file *file, int datasync) +int nilfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync) { /* * Called from fsync() system call @@ -40,8 +40,15 @@ int nilfs_sync_file(struct file *file, int datasync) struct inode *inode = file->f_mapping->host; int err; - if (!nilfs_inode_dirty(inode)) + err = filemap_write_and_wait_range(inode->i_mapping, start, end); + if (err) + return err; + mutex_lock(&inode->i_mutex); + + if (!nilfs_inode_dirty(inode)) { + mutex_unlock(&inode->i_mutex); return 0; + } if (datasync) err = nilfs_construct_dsync_segment(inode->i_sb, inode, 0, @@ -49,6 +56,7 @@ int nilfs_sync_file(struct file *file, int datasync) else err = nilfs_construct_segment(inode->i_sb); + mutex_unlock(&inode->i_mutex); return err; } |