diff options
author | Christoph Hellwig <hch@lst.de> | 2016-04-07 17:52:00 +0200 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2016-05-02 01:58:39 +0200 |
commit | dde0c2e79848298cc25621ad080d47f94dbd7cce (patch) | |
tree | 678f9ff7cba4bb170db9985266efd62521561f46 /fs/gfs2/file.c | |
parent | direct-io: remove the offset argument to dio_complete (diff) | |
download | linux-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.c | 5 |
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); |