Hi Hraban,<br><br>If you are resubmitting the patches, please make sure to mark the patch as &quot;superseded&quot; at <a href="http://patches.gluster.com">patches.gluster.com</a>. It will help the maintainer :).<br><br>regards,<br>
<div class="gmail_quote">On Mon, Dec 21, 2009 at 10:59 AM, Hraban Luyat <span dir="ltr">&lt;<a href="mailto:hraban@0brg.net">hraban@0brg.net</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
The previous patch I submitted for this file (afr&#39;s self-heal code)<br>
introduced a terrible error. I overlooked the error checking in the<br>
original code and misplaced the memcpy (too early).<br>
<br>
So, please disregard the last one, this one is better :) hopefully.<br>
<br>
Apologies.<br>
<br>
Signed-off-by: Hraban Luyat &lt;<a href="mailto:hraban@0brg.net">hraban@0brg.net</a>&gt;<br>
---<br>
 xlators/cluster/afr/src/afr-self-heal-common.c |   54 +++++++++++++----------<br>
 1 files changed, 30 insertions(+), 24 deletions(-)<br>
<br>
diff --git a/xlators/cluster/afr/src/afr-self-heal-common.c b/xlators/cluster/afr/src/afr-self-heal-common.c<br>
index ef36be1..61c3d2b 100644<br>
--- a/xlators/cluster/afr/src/afr-self-heal-common.c<br>
+++ b/xlators/cluster/afr/src/afr-self-heal-common.c<br>
@@ -122,7 +122,9 @@ afr_sh_build_pending_matrix (afr_private_t *priv,<br>
 {<br>
        int i, j, k;<br>
<br>
-       int32_t *pending = NULL;<br>
+       /* Indexable by result of afr_index_for_transaction_type(): 0 -- 2. */<br>
+       int32_t pending[3];<br>
+       void *pending_raw = NULL;<br>
        int ret = -1;<br>
<br>
         unsigned char *ignorant_subvols = NULL;<br>
@@ -137,11 +139,11 @@ afr_sh_build_pending_matrix (afr_private_t *priv,<br>
        }<br>
<br>
        for (i = 0; i &lt; child_count; i++) {<br>
-               pending = NULL;<br>
+               pending_raw = NULL;<br>
<br>
                 for (j = 0; j &lt; child_count; j++) {<br>
                         ret = dict_get_ptr (xattr[i], priv-&gt;pending_key[j],<br>
-                                            VOID(&amp;pending));<br>
+                                            &amp;pending_raw);<br>
<br>
                         if (ret != 0) {<br>
                                 /*<br>
@@ -154,6 +156,7 @@ afr_sh_build_pending_matrix (afr_private_t *priv,<br>
                                 continue;<br>
                         }<br>
<br>
+                       memcpy (pending, pending_raw, sizeof(pending));<br>
                         k = afr_index_for_transaction_type (type);<br>
<br>
                         pending_matrix[i][j] = ntoh32 (pending[k]);<br>
@@ -527,8 +530,10 @@ afr_sh_pending_to_delta (afr_private_t *priv, dict_t **xattr,<br>
        int j = 0;<br>
         int k = 0;<br>
<br>
-        int32_t * pending = NULL;<br>
-        int       ret     = 0;<br>
+       /* Indexable by result of afr_index_for_transaction_type(): 0 -- 2. */<br>
+       int32_t   pending[3];<br>
+       void    * pending_raw = NULL;<br>
+        int       ret         = 0;<br>
<br>
        /* start clean */<br>
        for (i = 0; i &lt; child_count; i++) {<br>
@@ -538,18 +543,19 @@ afr_sh_pending_to_delta (afr_private_t *priv, dict_t **xattr,<br>
        }<br>
<br>
        for (i = 0; i &lt; child_count; i++) {<br>
-                pending = NULL;<br>
+                pending_raw = NULL;<br>
<br>
                 for (j = 0; j &lt; child_count; j++) {<br>
                         ret = dict_get_ptr (xattr[i], priv-&gt;pending_key[j],<br>
-                                            VOID(&amp;pending));<br>
-<br>
+                                            &amp;pending_raw);<br>
+<br>
                         if (!success[j])<br>
                                 continue;<br>
<br>
                         k = afr_index_for_transaction_type (type);<br>
<br>
-                        if (pending) {<br>
+                        if (pending_raw) {<br>
+                               memcpy (pending, pending_raw, sizeof(pending));<br>
                                 delta_matrix[i][j] = -(ntoh32 (pending[k]));<br>
                         } else {<br>
                                 delta_matrix[i][j]  = 0;<br>
@@ -599,8 +605,9 @@ int<br>
 afr_sh_has_metadata_pending (dict_t *xattr, int child_count, xlator_t *this)<br>
 {<br>
        afr_private_t *priv = NULL;<br>
-       int32_t       *pending = NULL;<br>
-       void          *tmp_pending = NULL; /* This is required to remove &#39;type-punned&#39; warnings from gcc */<br>
+       /* Indexable by result of afr_index_for_transaction_type(): 0 -- 2. */<br>
+       int32_t       pending[3];<br>
+       void          *pending_raw = NULL;<br>
<br>
        int           ret = -1;<br>
        int            i  = 0;<br>
@@ -610,13 +617,12 @@ afr_sh_has_metadata_pending (dict_t *xattr, int child_count, xlator_t *this)<br>
<br>
         for (i = 0; i &lt; priv-&gt;child_count; i++) {<br>
                 ret = dict_get_ptr (xattr, priv-&gt;pending_key[i],<br>
-                                    &amp;tmp_pending);<br>
+                                    &amp;pending_raw);<br>
<br>
                 if (ret != 0)<br>
                         return 0;<br>
-<br>
-                pending = tmp_pending;<br>
<br>
+               memcpy (pending, pending_raw, sizeof(pending));<br>
                 j = afr_index_for_transaction_type (AFR_METADATA_TRANSACTION);<br>
<br>
                 if (pending[j])<br>
@@ -631,8 +637,9 @@ int<br>
 afr_sh_has_data_pending (dict_t *xattr, int child_count, xlator_t *this)<br>
 {<br>
        afr_private_t *priv = NULL;<br>
-       int32_t       *pending = NULL;<br>
-       void          *tmp_pending = NULL; /* This is required to remove &#39;type-punned&#39; warnings from gcc */<br>
+       /* Indexable by result of afr_index_for_transaction_type(): 0 -- 2. */<br>
+       int32_t       pending[3];<br>
+       void          *pending_raw = NULL;<br>
<br>
        int           ret = -1;<br>
        int            i  = 0;<br>
@@ -642,13 +649,12 @@ afr_sh_has_data_pending (dict_t *xattr, int child_count, xlator_t *this)<br>
<br>
         for (i = 0; i &lt; priv-&gt;child_count; i++) {<br>
                 ret = dict_get_ptr (xattr, priv-&gt;pending_key[i],<br>
-                                    &amp;tmp_pending);<br>
+                                    &amp;pending_raw);<br>
<br>
                 if (ret != 0)<br>
                         return 0;<br>
<br>
-                pending = tmp_pending;<br>
-<br>
+               memcpy (pending, pending_raw, sizeof(pending));<br>
                 j = afr_index_for_transaction_type (AFR_DATA_TRANSACTION);<br>
<br>
                 if (pending[j])<br>
@@ -663,8 +669,9 @@ int<br>
 afr_sh_has_entry_pending (dict_t *xattr, int child_count, xlator_t *this)<br>
 {<br>
         afr_private_t *priv = NULL;<br>
-       int32_t       *pending = NULL;<br>
-       void          *tmp_pending = NULL; /* This is required to remove &#39;type-punned&#39; warnings from gcc */<br>
+       /* Indexable by result of afr_index_for_transaction_type(): 0 -- 2. */<br>
+       int32_t       pending[3];<br>
+       void          *pending_raw = NULL;<br>
<br>
        int           ret = -1;<br>
        int            i  = 0;<br>
@@ -674,13 +681,12 @@ afr_sh_has_entry_pending (dict_t *xattr, int child_count, xlator_t *this)<br>
<br>
         for (i = 0; i &lt; priv-&gt;child_count; i++) {<br>
                 ret = dict_get_ptr (xattr, priv-&gt;pending_key[i],<br>
-                                    &amp;tmp_pending);<br>
+                                    &amp;pending_raw);<br>
<br>
                 if (ret != 0)<br>
                         return 0;<br>
<br>
-                pending = tmp_pending;<br>
-<br>
+               memcpy (pending, pending_raw, sizeof(pending));<br>
                 j = afr_index_for_transaction_type (AFR_ENTRY_TRANSACTION);<br>
<br>
                 if (pending[j])<br>
--<br>
1.6.5<br>
<br>
<br>
<br>
_______________________________________________<br>
Gluster-devel mailing list<br>
<a href="mailto:Gluster-devel@nongnu.org">Gluster-devel@nongnu.org</a><br>
<a href="http://lists.nongnu.org/mailman/listinfo/gluster-devel" target="_blank">http://lists.nongnu.org/mailman/listinfo/gluster-devel</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>Raghavendra G<br><br>