diff options
author | Christoph Hellwig <hch@lst.de> | 2016-04-07 08:52:00 -0700 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2016-05-01 19:58:39 -0400 |
commit | dde0c2e79848298cc25621ad080d47f94dbd7cce (patch) | |
tree | 678f9ff7cba4bb170db9985266efd62521561f46 /fs/gfs2/file.c | |
parent | 716b9bc0cb50b1c2c15ef6a255c88508350e3462 (diff) | |
download | op-kernel-dev-dde0c2e79848298cc25621ad080d47f94dbd7cce.zip op-kernel-dev-dde0c2e79848298cc25621ad080d47f94dbd7cce.tar.gz |
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 208efc7..5a7d696 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); |