nfsd: return correct openowner when there is a race to put one in the hash
[cascardo/linux.git] / fs / sync.c
index 01d9f18..fbc98ee 100644 (file)
--- a/fs/sync.c
+++ b/fs/sync.c
@@ -177,8 +177,16 @@ SYSCALL_DEFINE1(syncfs, int, fd)
  */
 int vfs_fsync_range(struct file *file, loff_t start, loff_t end, int datasync)
 {
+       struct inode *inode = file->f_mapping->host;
+
        if (!file->f_op->fsync)
                return -EINVAL;
+       if (!datasync && (inode->i_state & I_DIRTY_TIME)) {
+               spin_lock(&inode->i_lock);
+               inode->i_state &= ~I_DIRTY_TIME;
+               spin_unlock(&inode->i_lock);
+               mark_inode_dirty_sync(inode);
+       }
        return file->f_op->fsync(file, start, end, datasync);
 }
 EXPORT_SYMBOL(vfs_fsync_range);