From f46a54326871bed28c64cd5312b250c7c8207e4f Mon Sep 17 00:00:00 2001 From: Ravishankar N Date: Wed, 18 Nov 2015 08:30:48 +0530 Subject: 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 Reviewed-on: http://review.gluster.org/12653 Tested-by: Gluster Build System Tested-by: NetBSD Build System Reviewed-by: Vijay Bellur --- xlators/cluster/afr/src/afr-self-heal-data.c | 18 ------------------ 1 file changed, 18 deletions(-) (limited to 'xlators/cluster') 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, -- cgit