diff options
| author | Pranith Kumar K <pranithk@gluster.com> | 2012-07-20 15:49:42 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2012-07-25 17:45:22 -0700 | 
| commit | c2a7a22bfe18316eab441d49e515726e53f74582 (patch) | |
| tree | 6b3a1be9c79ef6106b452b29dc37b5c2f749c5f7 | |
| parent | 22e4e55ecf65764812cfb76cd0b14a40b4161f25 (diff) | |
cluster/afr: Filter O_TRUNC in afr-fix-open
RCA:
When open was done while a brick is down, afr opens the file after
the brick comes backup. If this happens after the self-heal on the file
is completed by self-heald etc, the file will end up in truncated state.
Fix:
Filter O_TRUNC while afr-fix-open because afr_open turns O_TRUNC
into truncate transaction, so there will be pending changelog for
the subvolume on which open fails.
Testing:
Had to simulate the race by stopping fix-open until self-heald completes
self-heal on the file after brick online.
Change-Id: I32759cc37f4bb34f206d01606a279f17b246dba4
BUG: 841840
Signed-off-by: Pranith Kumar K <pranithk@gluster.com>
Reviewed-on: http://review.gluster.com/3705
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
Reviewed-by: Anand Avati <avati@redhat.com>
| -rw-r--r-- | xlators/cluster/afr/src/afr-open.c | 3 | 
1 files changed, 2 insertions, 1 deletions
diff --git a/xlators/cluster/afr/src/afr-open.c b/xlators/cluster/afr/src/afr-open.c index 35090d80e..c0be197f2 100644 --- a/xlators/cluster/afr/src/afr-open.c +++ b/xlators/cluster/afr/src/afr-open.c @@ -429,7 +429,8 @@ afr_fix_open (call_frame_t *frame, xlator_t *this, afr_fd_ctx_t *fd_ctx,                                             (void *)(long) i,                                             priv->children[i],                                             priv->children[i]->fops->open, -                                           &open_local->loc, fd_ctx->flags, +                                           &open_local->loc, +                                           fd_ctx->flags & (~O_TRUNC),                                             open_local->fd, NULL);                  }  | 
