diff options
| author | Anand Avati <avati@redhat.com> | 2012-03-12 16:55:43 -0700 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2012-03-12 19:37:45 -0700 | 
| commit | dbed7dcdbd0f8906c11ea4ee4d88f47059db7126 (patch) | |
| tree | c1093d214e5eceb90334c47952b047e593b41eb6 | |
| parent | 154a59a6e0988194c6a6e17527a30cca47a697f9 (diff) | |
replicate: backport of 0783ca994d9ea95fd9ab3dd95d6407918f19f255
This is a backport of patch 0783ca994d9ea95fd9ab3dd95d6407918f19f255
which is a fix for bug 798874
Change-Id: I0edac430b2f22dce121ff4889b563cbef14b09cd
BUG: 798874
Reviewed-on: http://review.gluster.com/2928
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
| -rw-r--r-- | xlators/cluster/afr/src/afr-self-heal-common.c | 42 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-self-heal-common.h | 2 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-self-heal-entry.c | 14 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-self-heal-metadata.c | 17 | 
4 files changed, 30 insertions, 45 deletions
diff --git a/xlators/cluster/afr/src/afr-self-heal-common.c b/xlators/cluster/afr/src/afr-self-heal-common.c index db39512d227..f1fc0ff1fc7 100644 --- a/xlators/cluster/afr/src/afr-self-heal-common.c +++ b/xlators/cluster/afr/src/afr-self-heal-common.c @@ -27,6 +27,32 @@  #include "afr-self-heal.h"  #include "pump.h" + +void +afr_sh_reset (call_frame_t *frame, xlator_t *this) +{ +        afr_local_t     *local = NULL; +        afr_self_heal_t *sh = NULL; +        afr_private_t   *priv = NULL; + +        local = frame->local; +        sh = &local->self_heal; +        priv = this->private; + +        memset (sh->child_errno, 0, +                sizeof (*sh->child_errno) * priv->child_count); +        memset (sh->buf, 0, sizeof (*sh->buf) * priv->child_count); +        memset (sh->parentbufs, 0, +                sizeof (*sh->parentbufs) * priv->child_count); +        memset (sh->success, 0, sizeof (*sh->success) * priv->child_count); +        memset (sh->locked_nodes, 0, +                sizeof (*sh->locked_nodes) * priv->child_count); +        sh->active_sinks = 0; + +        afr_reset_xattr (sh->xattr, priv->child_count); +} + +  //Intersection[child]=1 if child is part of intersection  void  afr_children_intersection_get (int32_t *set1, int32_t *set2, @@ -927,25 +953,11 @@ afr_sh_missing_entries_done (call_frame_t *frame, xlator_t *this)  {          afr_local_t     *local = NULL;          afr_self_heal_t *sh = NULL; -        afr_private_t   *priv = NULL; -        int              i = 0;          local = frame->local;          sh = &local->self_heal; -        priv = this->private; - -//      memset (sh->child_errno, 0, sizeof (int) * priv->child_count); -        memset (sh->buf, 0, sizeof (struct iatt) * priv->child_count); -        for (i = 0; i < priv->child_count; i++) { -                sh->locked_nodes[i] = 0; -        } - -        for (i = 0; i < priv->child_count; i++) { -                if (sh->xattr[i]) -                        dict_unref (sh->xattr[i]); -                sh->xattr[i] = NULL; -        } +	afr_sh_reset (frame, this);          if (local->govinda_gOvinda || sh->op_failed) {                  gf_log (this->name, GF_LOG_INFO, diff --git a/xlators/cluster/afr/src/afr-self-heal-common.h b/xlators/cluster/afr/src/afr-self-heal-common.h index 1e325685d57..56ab2efd084 100644 --- a/xlators/cluster/afr/src/afr-self-heal-common.h +++ b/xlators/cluster/afr/src/afr-self-heal-common.h @@ -113,4 +113,6 @@ int  afr_impunge_frame_create (call_frame_t *frame, xlator_t *this,                            int active_source, int ret_child, mode_t entry_mode,                            call_frame_t **impunge_frame); +void +afr_sh_reset (call_frame_t *frame, xlator_t *this);  #endif /* __AFR_SELF_HEAL_COMMON_H__ */ diff --git a/xlators/cluster/afr/src/afr-self-heal-entry.c b/xlators/cluster/afr/src/afr-self-heal-entry.c index c7a4c2b2897..952a88f977b 100644 --- a/xlators/cluster/afr/src/afr-self-heal-entry.c +++ b/xlators/cluster/afr/src/afr-self-heal-entry.c @@ -63,23 +63,9 @@ afr_sh_entry_done (call_frame_t *frame, xlator_t *this)  {          afr_local_t     *local = NULL;          afr_self_heal_t *sh = NULL; -        afr_private_t   *priv = NULL;          local = frame->local;          sh = &local->self_heal; -        priv = this->private; - -        /* -          TODO: cleanup sh->* -        */ - -        if (sh->healing_fd) -                fd_unref (sh->healing_fd); -        sh->healing_fd = NULL; - -        /* for (i = 0; i < priv->child_count; i++) { */ -        /*        sh->locked_nodes[i] = 0; */ -        /* } */          sh->completion_cbk (frame, this); diff --git a/xlators/cluster/afr/src/afr-self-heal-metadata.c b/xlators/cluster/afr/src/afr-self-heal-metadata.c index 0dc55593722..2eb72cf5979 100644 --- a/xlators/cluster/afr/src/afr-self-heal-metadata.c +++ b/xlators/cluster/afr/src/afr-self-heal-metadata.c @@ -54,26 +54,11 @@ afr_sh_metadata_done (call_frame_t *frame, xlator_t *this)  {          afr_local_t     *local = NULL;          afr_self_heal_t *sh = NULL; -        afr_private_t   *priv = NULL; -        int              i = 0;          local = frame->local;          sh = &local->self_heal; -        priv = this->private; - -//      memset (sh->child_errno, 0, sizeof (int) * priv->child_count); -        memset (sh->buf, 0, sizeof (struct iatt) * priv->child_count); -        memset (sh->success, 0, sizeof (int) * priv->child_count); -/*         for (i = 0; i < priv->child_count; i++) { */ -/*                 sh->locked_nodes[i] = 1; */ -/*         } */ - -        for (i = 0; i < priv->child_count; i++) { -                if (sh->xattr[i]) -                        dict_unref (sh->xattr[i]); -                sh->xattr[i] = NULL; -        } +	afr_sh_reset (frame, this);          if (local->govinda_gOvinda) {                  gf_log (this->name, GF_LOG_INFO,  | 
