diff options
author | Ravishankar N <ravishankar@redhat.com> | 2015-11-18 08:30:48 +0530 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2015-11-23 10:59:36 -0800 |
commit | f46a54326871bed28c64cd5312b250c7c8207e4f (patch) | |
tree | 85adda5bc0ef1a2209718cc26beb345b176aefde | |
parent | 164a8dda2cbf10862483e0333ebf7e727fc87f07 (diff) |
afr: Drop compatibility lock for data self-heal
Backport of http://review.gluster.org/#/c/12602/
In glusterfs 3.4 and older, AFR did not take locks in self-heal domain
during data self-heal. So this compat lock in data domain was added to prevent
older clients from trying to heal a file while an existing self-heal was going
on by a newer client. But the side effect was that all appending writes (which
take full locks in data domain) from mounts would be stalled until self-heal
was complete.
Since glusterfs 3.4 is not supported anymore, remove the compat lock.
Change-Id: I20bb2edf7527ce5d8291d13eb8b9149e66e9bcac
BUG: 1283478
Signed-off-by: Ravishankar N <ravishankar@redhat.com>
Reviewed-on: http://review.gluster.org/12653
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
-rw-r--r-- | xlators/cluster/afr/src/afr-self-heal-data.c | 18 |
1 files changed, 0 insertions, 18 deletions
diff --git a/xlators/cluster/afr/src/afr-self-heal-data.c b/xlators/cluster/afr/src/afr-self-heal-data.c index 1a97778944c..9a92ce35cdb 100644 --- a/xlators/cluster/afr/src/afr-self-heal-data.c +++ b/xlators/cluster/afr/src/afr-self-heal-data.c @@ -672,9 +672,7 @@ __afr_selfheal_data (call_frame_t *frame, xlator_t *this, fd_t *fd, unsigned char *healed_sinks = NULL; struct afr_reply *locked_replies = NULL; int source = -1; - gf_boolean_t compat = _gf_false; gf_boolean_t did_sh = _gf_true; - unsigned char *compat_lock = NULL; priv = this->private; @@ -682,7 +680,6 @@ __afr_selfheal_data (call_frame_t *frame, xlator_t *this, fd_t *fd, sinks = alloca0 (priv->child_count); healed_sinks = alloca0 (priv->child_count); data_lock = alloca0 (priv->child_count); - compat_lock = alloca0 (priv->child_count); locked_replies = alloca0 (sizeof (*locked_replies) * priv->child_count); @@ -727,18 +724,6 @@ __afr_selfheal_data (call_frame_t *frame, xlator_t *this, fd_t *fd, ret = 0; - if (priv->arbiter_count == 0) {/*TODO: delete this code after - 3.5.x goes out of support*/ - /* Locking from (LLONG_MAX - 2) to (LLONG_MAX - 1) is - for compatibility with older self-heal clients which - do not hold a lock in the @priv->sh_domain domain to - guard against concurrent ongoing self-heals - */ - afr_selfheal_inodelk (frame, this, fd->inode, - this->name, LLONG_MAX - 2, 1, - compat_lock); - compat = _gf_true; - } } unlock: afr_selfheal_uninodelk (frame, this, fd->inode, this->name, 0, 0, @@ -758,9 +743,6 @@ unlock: healed_sinks, AFR_DATA_TRANSACTION, locked_replies, data_lock); out: - if (compat) - afr_selfheal_uninodelk (frame, this, fd->inode, this->name, - LLONG_MAX - 2, 1, compat_lock); if (did_sh) afr_log_selfheal (fd->inode->gfid, this, ret, "data", source, |