summaryrefslogtreecommitdiffstats
path: root/fs/gfs2/file.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2016-04-07 17:52:00 +0200
committerAl Viro <viro@zeniv.linux.org.uk>2016-05-02 01:58:39 +0200
commitdde0c2e79848298cc25621ad080d47f94dbd7cce (patch)
tree678f9ff7cba4bb170db9985266efd62521561f46 /fs/gfs2/file.c
parentdirect-io: remove the offset argument to dio_complete (diff)
downloadlinux-dde0c2e79848298cc25621ad080d47f94dbd7cce.tar.xz
linux-dde0c2e79848298cc25621ad080d47f94dbd7cce.zip
fs: add IOCB_SYNC and IOCB_DSYNC
This will allow us to do per-I/O sync file writes, as required by a lot of fileservers or storage targets. XXX: Will need a few additional audits for O_DSYNC Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/gfs2/file.c')
-rw-r--r--fs/gfs2/file.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c
index 208efc70ad49..5a7d69609309 100644
--- a/fs/gfs2/file.c
+++ b/fs/gfs2/file.c
@@ -895,7 +895,10 @@ static long __gfs2_fallocate(struct file *file, int mode, loff_t offset, loff_t
mark_inode_dirty(inode);
}
- return generic_write_sync(file, pos, count);
+ if ((file->f_flags & O_DSYNC) || IS_SYNC(file->f_mapping->host))
+ return vfs_fsync_range(file, pos, pos + count - 1,
+ (file->f_flags & __O_SYNC) ? 0 : 1);
+ return 0;
out_trans_fail:
gfs2_inplace_release(ip);