diff options
author | Atin Mukherjee <amukherj@redhat.com> | 2014-04-23 17:21:41 +0530 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2014-05-03 07:28:16 -0700 |
commit | 11b0ea3d79445e3773d450132121387b67d7bc9a (patch) | |
tree | de7ed2a0db5f38c45c3a8788cbacbb2a0b9e7aa4 | |
parent | 0088e318c1218191535ea0baa04b4fe858412f54 (diff) |
barrier : barrier O_SYNC write incorrect flag check
barrier_writev function was doing the following check to determine whether its a
O_SYNC write or not:
if (!(flags & O_SYNC))
The problem here is this flag is not fd's flag and gfapi write does not copy
open call fd's flag into write flag because of which O_SYNC writes were not
getting barriered even if barrier was enabled.
The check has been modified as:
if (!(fd->flags & (O_SYNC | O_DSYNC)))
Change-Id: I07b23852d150b81c7317100ca6d22d082ad897cd
BUG: 1090488
Signed-off-by: Atin Mukherjee <amukherj@redhat.com>
Reviewed-on: http://review.gluster.org/7549
Reviewed-by: Varun Shastry <vshastry@redhat.com>
Reviewed-by: Santosh Pradhan <spradhan@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
-rw-r--r-- | xlators/features/barrier/src/barrier.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/xlators/features/barrier/src/barrier.c b/xlators/features/barrier/src/barrier.c index 5edb9cdd392..5b48184d4c7 100644 --- a/xlators/features/barrier/src/barrier.c +++ b/xlators/features/barrier/src/barrier.c @@ -125,7 +125,7 @@ barrier_writev (call_frame_t *frame, xlator_t *this, fd_t *fd, struct iovec *vector, int32_t count, off_t off, uint32_t flags, struct iobref *iobref, dict_t *xdata) { - if (!(flags & O_SYNC)) { + if (!(fd->flags & (O_SYNC | O_DSYNC))) { STACK_WIND_TAIL (frame, FIRST_CHILD(this), FIRST_CHILD(this)->fops->writev, fd, vector, count, off, flags, iobref, xdata); |