<div dir="ltr"><div>Function drc_compare_reqs use the wrong compare type. This function should use</div><div>type drc_cache_op_t as its input type. Since all rbtree related code (except</div><div>function rpcsvc_drc_lookup) in drc cache pass drc_cache_op_t as compare type.</div>

<div>Only rpcsvc_drc_lookup use type rpcsvc_request_t. It has been modified too.</div><div><br></div><div>Signed-off-by: beback &lt;<a href="mailto:beback198611@gmail.com" target="_blank">beback198611@gmail.com</a>&gt;</div>
<div>---</div>
<div> rpc/rpc-lib/src/rpc-drc.c |   14 ++++++++++----</div><div> 1 files changed, 10 insertions(+), 4 deletions(-)</div><div><br></div><div>diff --git a/rpc/rpc-lib/src/rpc-drc.c b/rpc/rpc-lib/src/rpc-drc.c</div><div>index e7ba114..5693928 100644</div>

<div>--- a/rpc/rpc-lib/src/rpc-drc.c</div><div>+++ b/rpc/rpc-lib/src/rpc-drc.c</div><div>@@ -127,14 +127,14 @@ int</div><div> drc_compare_reqs (const void *item, const void *rb_node_data, void *param)</div><div> {</div><div>

         int               ret      = -1;</div><div>-        rpcsvc_request_t *req      = NULL;</div><div>+        drc_cached_op_t  *req      = NULL;</div><div>         drc_cached_op_t  *reply    = NULL;</div><div> </div>

<div>         GF_ASSERT (item);</div><div>         GF_ASSERT (rb_node_data);</div><div>         GF_ASSERT (param);</div><div> </div><div>-        req = (rpcsvc_request_t *)item;</div><div>+        req = (drc_cached_op_t *)item;</div>

<div>         reply = (drc_cached_op_t *)rb_node_data;</div><div> </div><div>         ret = req-&gt;xid - reply-&gt;xid;</div><div>@@ -143,7 +143,7 @@ drc_compare_reqs (const void *item, const void *rb_node_data, void *param)</div>

<div> </div><div>         if (req-&gt;prognum == reply-&gt;prognum &amp;&amp;</div><div>             req-&gt;procnum == reply-&gt;procnum &amp;&amp;</div><div>-            req-&gt;progver == reply-&gt;progversion)</div><div>

+            req-&gt;progversion == reply-&gt;progversion)</div><div>                 return 0;</div><div> </div><div>         return 1;</div><div>@@ -331,6 +331,12 @@ rpcsvc_drc_lookup (rpcsvc_request_t *req)</div><div>
 {</div>
<div>         drc_client_t           *client = NULL;</div><div>         drc_cached_op_t        *reply  = NULL;</div><div>+        drc_cached_op_t        new = {</div><div>+                .xid            = req-&gt;xid,</div>

<div>+                .prognum        = req-&gt;prognum,</div><div>+                .progversion    = req-&gt;progver,</div><div>+                .procnum        = req-&gt;procnum,</div><div>+        };</div><div> </div>
<div>
         GF_ASSERT (req);</div><div> </div><div>@@ -347,7 +353,7 @@ rpcsvc_drc_lookup (rpcsvc_request_t *req)</div><div>         if (client-&gt;op_count == 0)</div><div>                 goto out;</div><div> </div><div>-        reply = rb_find (client-&gt;rbtree, req);</div>

<div>+        reply = rb_find (client-&gt;rbtree, &amp;new);</div><div> </div><div>  out:</div><div>         if (client)</div><div>-- </div><div>1.7.1</div><div><br></div></div>