path: root/libglusterfs/src
diff options
authorKrutika Dhananjay <>2016-06-07 17:15:56 +0530
committerPranith Kumar Karampuri <>2016-06-16 17:21:20 -0700
commit0fea541b0b217fc3c76e6a36577b99be71e32d56 (patch)
tree0fc4e96e4436f876d00b285a6f3a5985d28f534f /libglusterfs/src
parent9af36b95976d4e54859c9b60bd2e711518b3be6e (diff)
libglusterfs: Negate all but O_DIRECT flag if present on anon fds
Backport of: This is to prevent any unforeseen problems that might arise due to writevs and readvs being wound with @flag parameter containing O_TRUNC or O_APPEND especially wrt translators like sharding and ec where O_TRUNC write or O_APPEND write on individual shards/fragments is not the same as O_TRUNC write or O_APPEND write as expected by the application. Change-Id: Ib0110731d6099bc888b7ada552a2abbea8e76051 BUG: 1342903 Signed-off-by: Krutika Dhananjay <> Reviewed-on: Smoke: Gluster Build System <> NetBSD-regression: NetBSD Build System <> Reviewed-by: Pranith Kumar Karampuri <> CentOS-regression: Gluster Build System <>
Diffstat (limited to 'libglusterfs/src')
1 files changed, 4 insertions, 10 deletions
diff --git a/libglusterfs/src/fd.c b/libglusterfs/src/fd.c
index 89ba357fc1e..5a3658b5a3e 100644
--- a/libglusterfs/src/fd.c
+++ b/libglusterfs/src/fd.c
@@ -817,17 +817,11 @@ fd_anonymous_with_flags (inode_t *inode, int32_t flags)
LOCK (&inode->lock);
- if (flags == 0)
+ if (flags & O_DIRECT)
+ else
- /* If this API is ever called with O_SYNC or O_DSYNC in @flags,
- * reset the bits associated with these flags before calling
- * __fd_anonymous(). That way, posix will do the open() without
- * these flags. And subsequently, posix_writev() (mostly) will
- * do the write within inode->lock on an fd without O_SYNC or
- * O_DSYNC and in its place to an fsync() outside of the locks
- * to simulate the effect of using these flags.
- */
- flags &= (~(O_SYNC|O_DSYNC));
fd = __fd_anonymous (inode, flags);
UNLOCK (&inode->lock);