diff options
Diffstat (limited to 'xlators/features/shard/src/shard.c')
-rw-r--r-- | xlators/features/shard/src/shard.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/xlators/features/shard/src/shard.c b/xlators/features/shard/src/shard.c index 154411682f3..c5f80b198b2 100644 --- a/xlators/features/shard/src/shard.c +++ b/xlators/features/shard/src/shard.c @@ -3591,6 +3591,7 @@ shard_common_inode_write_do (call_frame_t *frame, xlator_t *this) shard_local_t *local = NULL; struct iovec *vec = NULL; gf_boolean_t wind_failed = _gf_false; + gf_boolean_t odirect = _gf_false; off_t orig_offset = 0; off_t shard_offset = 0; off_t vec_offset = 0; @@ -3621,6 +3622,9 @@ shard_common_inode_write_do (call_frame_t *frame, xlator_t *this) return 0; } + if ((fd->flags & O_DIRECT) && (local->fop == GF_FOP_WRITE)) + odirect = _gf_true; + while (cur_block <= last_block) { if (wind_failed) { shard_common_inode_write_do_cbk (frame, @@ -3678,6 +3682,8 @@ shard_common_inode_write_do (call_frame_t *frame, xlator_t *this) NULL, NULL); goto next; } + if (odirect) + local->flags |= O_SYNC; } shard_common_inode_write_wind (frame, this, anon_fd, |