diff options
| author | Anand Avati <avati@gluster.com> | 2010-09-29 01:08:05 +0000 | 
|---|---|---|
| committer | Vijay Bellur <vijay@dev.gluster.com> | 2010-09-29 01:43:28 -0700 | 
| commit | 34a635c43fa4e33df29be2141348b6c360fcacc9 (patch) | |
| tree | 7821dfb7953933943c5202651e4368b0eea0d18f /xlators | |
| parent | aee339605337916aaa1e38a0e9ed2422f0f0dcfb (diff) | |
replicate: use new style (un)locking in self heal of missing entries
Signed-off-by: Anand V. Avati <avati@amp.gluster.com>
Signed-off-by: Vijay Bellur <vijay@dev.gluster.com>
BUG: 960 ()
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=960
Diffstat (limited to 'xlators')
| -rw-r--r-- | xlators/cluster/afr/src/afr-self-heal-common.c | 67 | 
1 files changed, 5 insertions, 62 deletions
diff --git a/xlators/cluster/afr/src/afr-self-heal-common.c b/xlators/cluster/afr/src/afr-self-heal-common.c index 2e677d77518..d19f389ef13 100644 --- a/xlators/cluster/afr/src/afr-self-heal-common.c +++ b/xlators/cluster/afr/src/afr-self-heal-common.c @@ -793,75 +793,18 @@ afr_sh_missing_entries_done (call_frame_t *frame, xlator_t *this)  } -int -sh_missing_entries_unlck_cbk (call_frame_t *frame, void *cookie, -			      xlator_t *this, -			      int32_t op_ret, int32_t op_errno) -{ -	afr_local_t     *local = NULL; -	int              call_count = 0; - -	local = frame->local; - -	LOCK (&frame->lock); -	{ -	} -	UNLOCK (&frame->lock); - -	call_count = afr_frame_return (frame); - -	if (call_count == 0) { -		afr_sh_missing_entries_done (frame, this); -	} - -	return 0; -} - -  static int  sh_missing_entries_finish (call_frame_t *frame, xlator_t *this)  { -	afr_private_t      *priv = NULL; -	afr_local_t        *local = NULL; -	int                 i = 0; -	int                 call_count = 0; -	afr_self_heal_t    *sh = NULL; - +        afr_internal_lock_t *int_lock = NULL; +        afr_local_t         *local    = NULL;  	local = frame->local; -	sh = &local->self_heal; -	priv = this->private; - -        for (i = 0; i < priv->child_count; i++) { -                if (sh->locked_nodes[i]) -                        call_count++; -        } - -        if (call_count == 0) { -                afr_sh_missing_entries_done (frame, this); -                return 0; -        } - -	local->call_count = call_count; - -	for (i = 0; i < priv->child_count; i++) { -		if (sh->locked_nodes[i]) { -			gf_log (this->name, GF_LOG_TRACE, -				"unlocking %"PRId64"/%s on subvolume %s", -				sh->parent_loc.inode->ino, local->loc.name, -				priv->children[i]->name); +        int_lock = &local->internal_lock; -			STACK_WIND (frame, sh_missing_entries_unlck_cbk, -				    priv->children[i], -				    priv->children[i]->fops->entrylk, -                                    this->name, -				    &sh->parent_loc, local->loc.name, -				    ENTRYLK_UNLOCK, ENTRYLK_WRLCK); +        int_lock->lock_cbk = afr_sh_missing_entries_done; +        afr_unlock (frame, this); -			if (!--call_count) -				break; -		} -	}  	return 0;  }  | 
