summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/afr/src/afr-common.c
diff options
context:
space:
mode:
authorPavan Sondur <pavan@gluster.com>2010-10-01 01:42:46 +0000
committerVijay Bellur <vijay@dev.gluster.com>2010-10-01 01:02:52 -0700
commit9555e5ee7dd2c3a2c98cf505bb198e453ea747d1 (patch)
tree1daa301a747d2b4cb490e5742b364522e8cc2fcc /xlators/cluster/afr/src/afr-common.c
parentd355ecd89427871d8d3f20a99acd284baccef6e1 (diff)
cluster/afr: Recover locks on child_up from source to sink.
Signed-off-by: Pavan Vilas Sondur <pavan@gluster.com> Signed-off-by: Vijay Bellur <vijay@dev.gluster.com> BUG: 865 (Add locks recovery support in GlusterFS) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=865
Diffstat (limited to 'xlators/cluster/afr/src/afr-common.c')
-rw-r--r--xlators/cluster/afr/src/afr-common.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c
index 9d9f5d041..e5a7e87c7 100644
--- a/xlators/cluster/afr/src/afr-common.c
+++ b/xlators/cluster/afr/src/afr-common.c
@@ -1450,8 +1450,24 @@ out:
int
afr_release (xlator_t *this, fd_t *fd)
{
+ afr_locked_fd_t *locked_fd = NULL;
+ afr_locked_fd_t *tmp = NULL;
+ afr_private_t *priv = NULL;
+
+ priv = this->private;
+
afr_cleanup_fd_ctx (this, fd);
+ list_for_each_entry_safe (locked_fd, tmp, &priv->saved_fds,
+ list) {
+
+ if (locked_fd->fd == fd) {
+ list_del_init (&locked_fd->list);
+ GF_FREE (locked_fd);
+ }
+
+ }
+
return 0;
}
@@ -2523,6 +2539,8 @@ afr_notify (xlator_t *this, int32_t event,
case GF_EVENT_CHILD_UP:
i = find_child_index (this, data);
+ afr_attempt_lock_recovery (this, i);
+
child_up[i] = 1;
LOCK (&priv->lock);