<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2654.45">
<TITLE>RE: [openib-general] OpenSM: Don't return NO RECORDS status in response to SA GetTable</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2>Hi Hal,</FONT>
</P>

<P><FONT SIZE=2>You wrote:</FONT>
<BR><FONT SIZE=2>" OpenSM: Don't return NO RECORDS status in response to SA GetTable"</FONT>
</P>

<P><FONT SIZE=2>I did find the following section in the table describing MAD errors:</FONT>
</P>

<P><FONT SIZE=2>No records match query. May be returned only by a SubnAdmGetResp().</FONT>
<BR><FONT SIZE=2>Never returned for an RMPP response because an</FONT>
<BR><FONT SIZE=2>RMPP transaction with a payload length of zero is a valid transaction.</FONT>
</P>

<P><FONT SIZE=2>However, isn't the SA supposed to return something in return to a request? </FONT>
<BR><FONT SIZE=2>Is it written somewhere? I thought that for every request a response is required - unless there is some access violation.</FONT></P>
<BR>

<P><FONT SIZE=2>Eitan Zahavi</FONT>
<BR><FONT SIZE=2>Design Technology Director</FONT>
<BR><FONT SIZE=2>Mellanox Technologies LTD</FONT>
<BR><FONT SIZE=2>Tel:+972-4-9097208</FONT>
<BR><FONT SIZE=2>Fax:+972-4-9593245</FONT>
<BR><FONT SIZE=2>P.O. Box 586 Yokneam 20692 ISRAEL</FONT>
</P>
<BR>

<P><FONT SIZE=2>-----Original Message-----</FONT>
<BR><FONT SIZE=2>From: Hal Rosenstock [<A HREF="mailto:halr@voltaire.com">mailto:halr@voltaire.com</A>] </FONT>
<BR><FONT SIZE=2>Sent: Wednesday, January 19, 2005 6:03 PM</FONT>
<BR><FONT SIZE=2>To: openib-general@openib.org</FONT>
<BR><FONT SIZE=2>Subject: [openib-general] OpenSM: Don't return NO RECORDS status in response to SA GetTable</FONT>
</P>

<P><FONT SIZE=2>OpenSM: Don't return NO RECORDS status in response to SA GetTable</FONT>
</P>

<P><FONT SIZE=2>Index: osm_sa_vlarb_record.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- osm_sa_vlarb_record.c       (revision 1582)</FONT>
<BR><FONT SIZE=2>+++ osm_sa_vlarb_record.c       (working copy)</FONT>
<BR><FONT SIZE=2>@@ -509,7 +509,7 @@</FONT>
<BR><FONT SIZE=2>            "osm_vlarb_rec_rcv_process: "</FONT>
<BR><FONT SIZE=2>            "Returning %u records.\n", num_rec );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-  if( num_rec == 0 )</FONT>
<BR><FONT SIZE=2>+  if ((p_rcvd_mad->method == IB_MAD_METHOD_GET) && (num_rec == 0))</FONT>
<BR><FONT SIZE=2>   {</FONT>
<BR><FONT SIZE=2>     osm_sa_send_error( p_rcv->p_resp, p_madw,</FONT>
<BR><FONT SIZE=2>                        IB_SA_MAD_STATUS_NO_RECORDS );</FONT>
<BR><FONT SIZE=2>@@ -603,4 +603,3 @@</FONT>
<BR><FONT SIZE=2>  Exit:</FONT>
<BR><FONT SIZE=2>   OSM_LOG_EXIT( p_rcv->p_log );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>Index: osm_sa_lft_record.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- osm_sa_lft_record.c (revision 1582)</FONT>
<BR><FONT SIZE=2>+++ osm_sa_lft_record.c (working copy)</FONT>
<BR><FONT SIZE=2>@@ -453,7 +453,8 @@</FONT>
<BR><FONT SIZE=2>            "osm_lftr_rcv_process: "</FONT>
<BR><FONT SIZE=2>            "Returning %u records.\n", num_rec );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-  if( num_rec == 0 )</FONT>
<BR><FONT SIZE=2>+  if ((p_rcvd_mad->method != IB_MAD_METHOD_GETTABLE) &&</FONT>
<BR><FONT SIZE=2>+      (num_rec == 0))</FONT>
<BR><FONT SIZE=2>   {</FONT>
<BR><FONT SIZE=2>     osm_sa_send_error( p_rcv->p_resp, p_madw,</FONT>
<BR><FONT SIZE=2>                        IB_SA_MAD_STATUS_NO_RECORDS );</FONT>
<BR><FONT SIZE=2>Index: osm_sa_service_record.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- osm_sa_service_record.c     (revision 1582)</FONT>
<BR><FONT SIZE=2>+++ osm_sa_service_record.c     (working copy)</FONT>
<BR><FONT SIZE=2>@@ -391,7 +391,6 @@</FONT>
<BR><FONT SIZE=2>     goto Exit;</FONT>
<BR><FONT SIZE=2>   }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>   trim_num_rec = 0;</FONT>
<BR><FONT SIZE=2> #ifndef VENDOR_RMPP_SUPPORT</FONT>
<BR><FONT SIZE=2>   trim_num_rec = (MAD_BLOCK_SIZE - IB_SA_MAD_HDR_SIZE) /</FONT>
<BR><FONT SIZE=2>sizeof(ib_service_record_t);</FONT>
<BR><FONT SIZE=2>@@ -468,7 +467,8 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>   p_resp_sr = (ib_service_record_t*)ib_sa_mad_get_payload_ptr(</FONT>
<BR><FONT SIZE=2>p_resp_sa_mad );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-  if( num_rec == 0 )</FONT>
<BR><FONT SIZE=2>+  if( (p_resp_sa_mad->method != IB_MAD_METHOD_GETTABLE_RESP) &&</FONT>
<BR><FONT SIZE=2>+      (num_rec == 0))</FONT>
<BR><FONT SIZE=2>   {</FONT>
<BR><FONT SIZE=2>     p_resp_sa_mad->status = IB_SA_MAD_STATUS_NO_RECORDS;</FONT>
<BR><FONT SIZE=2>     cl_memclr( p_resp_sr, sizeof(*p_resp_sr) );</FONT>
<BR><FONT SIZE=2>@@ -835,7 +835,6 @@</FONT>
<BR><FONT SIZE=2>   p_recvd_service_rec =</FONT>
<BR><FONT SIZE=2>     (ib_service_record_t*)ib_sa_mad_get_payload_ptr( p_sa_mad );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>   cl_qlist_init(&sr_match_item.sr_list);</FONT>
<BR><FONT SIZE=2>   sr_match_item.p_service_rec = p_recvd_service_rec;</FONT>
<BR><FONT SIZE=2>   sr_match_item.comp_mask = p_sa_mad->comp_mask;</FONT>
<BR><FONT SIZE=2>@@ -851,7 +850,8 @@</FONT>
<BR><FONT SIZE=2>                       __get_matching_sr,</FONT>
<BR><FONT SIZE=2>                       &context);</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-  if( cl_qlist_count( &sr_match_item.sr_list ) == 0 )</FONT>
<BR><FONT SIZE=2>+  if ((p_sa_mad->method == IB_MAD_METHOD_GET) &&</FONT>
<BR><FONT SIZE=2>+     (cl_qlist_count( &sr_match_item.sr_list ) == 0))</FONT>
<BR><FONT SIZE=2>   {</FONT>
<BR><FONT SIZE=2>     cl_plock_release(p_rcv->p_lock);</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>Index: osm_sa_portinfo_record.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- osm_sa_portinfo_record.c    (revision 1582)</FONT>
<BR><FONT SIZE=2>+++ osm_sa_portinfo_record.c    (working copy)</FONT>
<BR><FONT SIZE=2>@@ -719,7 +719,7 @@</FONT>
<BR><FONT SIZE=2>            "osm_pir_rcv_process: "</FONT>
<BR><FONT SIZE=2>            "Returning %u records.\n", num_rec );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-  if( num_rec == 0 )</FONT>
<BR><FONT SIZE=2>+  if ((p_rcvd_mad->method == IB_MAD_METHOD_GET) && (num_rec == 0))</FONT>
<BR><FONT SIZE=2>   {</FONT>
<BR><FONT SIZE=2>     osm_sa_send_error( p_rcv->p_resp, p_madw,</FONT>
<BR><FONT SIZE=2>                        IB_SA_MAD_STATUS_NO_RECORDS );</FONT>
<BR><FONT SIZE=2>Index: osm_sa_pkey_record.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- osm_sa_pkey_record.c        (revision 1582)</FONT>
<BR><FONT SIZE=2>+++ osm_sa_pkey_record.c        (working copy)</FONT>
<BR><FONT SIZE=2>@@ -365,7 +365,6 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>   cl_qlist_init( &rec_list );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>   context.p_rcvd_rec = p_rcvd_rec;</FONT>
<BR><FONT SIZE=2>   context.p_list = &rec_list;</FONT>
<BR><FONT SIZE=2>   context.comp_mask = p_rcvd_mad->comp_mask;</FONT>
<BR><FONT SIZE=2>@@ -457,7 +456,7 @@</FONT>
<BR><FONT SIZE=2>            "osm_pkey_rec_rcv_process: "</FONT>
<BR><FONT SIZE=2>            "Returning %u records.\n", num_rec );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-  if( num_rec == 0 )</FONT>
<BR><FONT SIZE=2>+  if((p_rcvd_mad->method == IB_MAD_METHOD_GET) && (num_rec == 0))</FONT>
<BR><FONT SIZE=2>   {</FONT>
<BR><FONT SIZE=2>     osm_sa_send_error( p_rcv->p_resp, p_madw,</FONT>
<BR><FONT SIZE=2>                        IB_SA_MAD_STATUS_NO_RECORDS );</FONT>
<BR><FONT SIZE=2>Index: osm_sa_slvl_record.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- osm_sa_slvl_record.c        (revision 1582)</FONT>
<BR><FONT SIZE=2>+++ osm_sa_slvl_record.c        (working copy)</FONT>
<BR><FONT SIZE=2>@@ -485,7 +485,7 @@</FONT>
<BR><FONT SIZE=2>            "osm_slvl_rec_rcv_process: "</FONT>
<BR><FONT SIZE=2>            "Returning %u records.\n", num_rec );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-  if( num_rec == 0 )</FONT>
<BR><FONT SIZE=2>+  if ((p_rcvd_mad->method == IB_MAD_METHOD_GET) && (num_rec == 0))</FONT>
<BR><FONT SIZE=2>   {</FONT>
<BR><FONT SIZE=2>     osm_sa_send_error( p_rcv->p_resp, p_madw,</FONT>
<BR><FONT SIZE=2>                        IB_SA_MAD_STATUS_NO_RECORDS );</FONT>
<BR><FONT SIZE=2>Index: osm_sa_node_record.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- osm_sa_node_record.c        (revision 1582)</FONT>
<BR><FONT SIZE=2>+++ osm_sa_node_record.c        (working copy)</FONT>
<BR><FONT SIZE=2>@@ -557,7 +557,7 @@</FONT>
<BR><FONT SIZE=2>            "osm_nr_rcv_process: "</FONT>
<BR><FONT SIZE=2>            "Returning %u records.\n", num_rec );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-  if( num_rec == 0 )</FONT>
<BR><FONT SIZE=2>+  if ((p_rcvd_mad->method == IB_MAD_METHOD_GET) && (num_rec == 0))</FONT>
<BR><FONT SIZE=2>   {</FONT>
<BR><FONT SIZE=2>     osm_sa_send_error( p_rcv->p_resp, p_madw,</FONT>
<BR><FONT SIZE=2>                        IB_SA_MAD_STATUS_NO_RECORDS );</FONT>
<BR><FONT SIZE=2>Index: osm_sa_link_record.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- osm_sa_link_record.c        (revision 1582)</FONT>
<BR><FONT SIZE=2>+++ osm_sa_link_record.c        (working copy)</FONT>
<BR><FONT SIZE=2>@@ -130,7 +130,6 @@</FONT>
<BR><FONT SIZE=2>   OSM_LOG_EXIT( p_rcv->p_log );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2> /**********************************************************************</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>**********************************************************************/</FONT>
<BR><FONT SIZE=2> ib_api_status_t</FONT>
<BR><FONT SIZE=2>@@ -284,7 +283,6 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>     }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>   }</FONT>
<BR><FONT SIZE=2>   else</FONT>
<BR><FONT SIZE=2>   {</FONT>
<BR><FONT SIZE=2>@@ -386,8 +384,6 @@</FONT>
<BR><FONT SIZE=2>   OSM_LOG_EXIT( p_rcv->p_log );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2> /**********************************************************************</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>**********************************************************************/</FONT>
<BR><FONT SIZE=2> static void</FONT>
<BR><FONT SIZE=2>@@ -524,8 +520,6 @@</FONT>
<BR><FONT SIZE=2>   OSM_LOG_EXIT( p_rcv->p_log );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2> /**********************************************************************</FONT>
<BR><FONT SIZE=2>    Returns the SA status to return to the client.</FONT>
<BR><FONT SIZE=2> **********************************************************************/</FONT>
<BR><FONT SIZE=2>@@ -552,6 +546,8 @@</FONT>
<BR><FONT SIZE=2>   p_lr = (ib_link_record_t*)ib_sa_mad_get_payload_ptr( p_sa_mad );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>   comp_mask = p_sa_mad->comp_mask;</FONT>
<BR><FONT SIZE=2>+  *pp_src_port = NULL;</FONT>
<BR><FONT SIZE=2>+  *pp_dest_port = NULL;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>   if( p_sa_mad->comp_mask & IB_LR_COMPMASK_FROM_LID )</FONT>
<BR><FONT SIZE=2>   {</FONT>
<BR><FONT SIZE=2>@@ -559,10 +555,11 @@</FONT>
<BR><FONT SIZE=2>                                cl_ntoh16(p_lr->from_lid),</FONT>
<BR><FONT SIZE=2>                                (void**)pp_src_port );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-    if( (status != CL_SUCCESS) || (*pp_src_port == NULL) )</FONT>
<BR><FONT SIZE=2>+    if( ( (status != CL_SUCCESS) || (*pp_src_port == NULL) ) &&</FONT>
<BR><FONT SIZE=2>+          (p_sa_mad->method == IB_MAD_METHOD_GET) )</FONT>
<BR><FONT SIZE=2>     {</FONT>
<BR><FONT SIZE=2>       /*</FONT>
<BR><FONT SIZE=2>-        This 'error' is a the client's fault (bad gid) so</FONT>
<BR><FONT SIZE=2>+        This 'error' is the client's fault (bad lid) so</FONT>
<BR><FONT SIZE=2>         don't enter it as an error in our own log.</FONT>
<BR><FONT SIZE=2>         Return an error response to the client.</FONT>
<BR><FONT SIZE=2>       */</FONT>
<BR><FONT SIZE=2>@@ -582,10 +579,11 @@</FONT>
<BR><FONT SIZE=2>                                cl_ntoh16(p_lr->to_lid),</FONT>
<BR><FONT SIZE=2>                                (void**)pp_dest_port );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-    if( (status != CL_SUCCESS) || (*pp_dest_port == NULL) )</FONT>
<BR><FONT SIZE=2>+    if( ( (status != CL_SUCCESS) || (*pp_dest_port == NULL) ) &&</FONT>
<BR><FONT SIZE=2>+          (p_sa_mad->method == IB_MAD_METHOD_GET) )</FONT>
<BR><FONT SIZE=2>     {</FONT>
<BR><FONT SIZE=2>       /*</FONT>
<BR><FONT SIZE=2>-        This 'error' is a the client's fault (bad gid) so</FONT>
<BR><FONT SIZE=2>+        This 'error' is the client's fault (bad lid) so</FONT>
<BR><FONT SIZE=2>         don't enter it as an error in our own log.</FONT>
<BR><FONT SIZE=2>         Return an error response to the client.</FONT>
<BR><FONT SIZE=2>       */</FONT>
<BR><FONT SIZE=2>@@ -604,7 +602,6 @@</FONT>
<BR><FONT SIZE=2>   return( sa_status );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2> /**********************************************************************</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>**********************************************************************/</FONT>
<BR><FONT SIZE=2> static void</FONT>
<BR><FONT SIZE=2>@@ -703,7 +700,6 @@</FONT>
<BR><FONT SIZE=2>   /* C15-0.1.5 - always return SM_Key = 0 (table 151 p 782) */</FONT>
<BR><FONT SIZE=2>   p_resp_sa_mad->sm_key = 0;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2> #ifndef VENDOR_RMPP_SUPPORT</FONT>
<BR><FONT SIZE=2>   /* we support only one packet RMPP - so we will set the first and</FONT>
<BR><FONT SIZE=2>      last flags for gettable */</FONT>
<BR><FONT SIZE=2>@@ -720,7 +716,7 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>   p_resp_lr = (ib_link_record_t*)ib_sa_mad_get_payload_ptr(</FONT>
<BR><FONT SIZE=2>p_resp_sa_mad );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-  if( num_rec == 0 )</FONT>
<BR><FONT SIZE=2>+  if ((p_rcvd_mad->method == IB_MAD_METHOD_GET) && (num_rec == 0))</FONT>
<BR><FONT SIZE=2>   {</FONT>
<BR><FONT SIZE=2>     p_resp_sa_mad->status = IB_SA_MAD_STATUS_NO_RECORDS;</FONT>
<BR><FONT SIZE=2>     cl_memclr( p_resp_lr, sizeof(*p_resp_lr) );</FONT>
<BR><FONT SIZE=2>@@ -762,7 +758,6 @@</FONT>
<BR><FONT SIZE=2>   OSM_LOG_EXIT( p_rcv->p_log );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2> /**********************************************************************</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>**********************************************************************/</FONT>
<BR><FONT SIZE=2> void</FONT>
<BR><FONT SIZE=2>@@ -810,7 +805,6 @@</FONT>
<BR><FONT SIZE=2>     goto Exit;</FONT>
<BR><FONT SIZE=2>   }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>   if( osm_log_is_active( p_rcv->p_log, OSM_LOG_DEBUG ) )</FONT>
<BR><FONT SIZE=2>     osm_dump_link_record( p_rcv->p_log, p_lr, OSM_LOG_DEBUG );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>@@ -837,7 +831,8 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>   cl_plock_release( p_rcv->p_lock );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-  if( cl_qlist_count( &lr_list ) == 0 )</FONT>
<BR><FONT SIZE=2>+  if( (cl_qlist_count( &lr_list ) == 0) &&</FONT>
<BR><FONT SIZE=2>+      (p_sa_mad->method == IB_MAD_METHOD_GET) )</FONT>
<BR><FONT SIZE=2>   {</FONT>
<BR><FONT SIZE=2>     osm_sa_send_error( p_rcv->p_resp, p_madw,</FONT>
<BR><FONT SIZE=2>                        IB_SA_MAD_STATUS_NO_RECORDS );</FONT>
<BR><FONT SIZE=2>Index: osm_sa_mcmember_record.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- osm_sa_mcmember_record.c    (revision 1582)</FONT>
<BR><FONT SIZE=2>+++ osm_sa_mcmember_record.c    (working copy)</FONT>
<BR><FONT SIZE=2>@@ -1678,16 +1678,16 @@</FONT>
<BR><FONT SIZE=2>            "osm_mcmr_query_mgrp: "</FONT>
<BR><FONT SIZE=2>            "Returning %u records.\n", num_rec );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-  if( num_rec == 0 )</FONT>
<BR><FONT SIZE=2>+  if ((p_rcvd_mad->method == IB_MAD_METHOD_GET) && (num_rec == 0))</FONT>
<BR><FONT SIZE=2>   {</FONT>
<BR><FONT SIZE=2>     osm_sa_send_error( p_rcv->p_resp, p_madw,</FONT>
<BR><FONT SIZE=2>                        IB_SA_MAD_STATUS_NO_RECORDS );</FONT>
<BR><FONT SIZE=2>     goto Exit;</FONT>
<BR><FONT SIZE=2>   }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-  /*  */</FONT>
<BR><FONT SIZE=2>-  /*  Get a MAD to reply. Address of Mad is in the received mad_wrapper</FONT>
<BR><FONT SIZE=2>*/</FONT>
<BR><FONT SIZE=2>-  /*  */</FONT>
<BR><FONT SIZE=2>+  /*</FONT>
<BR><FONT SIZE=2>+   * Get a MAD to reply. Address of Mad is in the received mad_wrapper</FONT>
<BR><FONT SIZE=2>+   */</FONT>
<BR><FONT SIZE=2>   p_resp_madw = osm_mad_pool_get( p_rcv->p_mad_pool,</FONT>
<BR><FONT SIZE=2>                                   p_madw->h_bind,</FONT>
<BR><FONT SIZE=2>                                   num_rec * sizeof(ib_member_rec_t) +</FONT>
<BR><FONT SIZE=2>IB_SA_MAD_HDR_SIZE,</FONT>
<BR><FONT SIZE=2>Index: osm_sa_path_record.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- osm_sa_path_record.c        (revision 1582)</FONT>
<BR><FONT SIZE=2>+++ osm_sa_path_record.c        (working copy)</FONT>
<BR><FONT SIZE=2>@@ -941,7 +941,8 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>   if( comp_mask & IB_PR_COMPMASK_PKEY )</FONT>
<BR><FONT SIZE=2>   {</FONT>
<BR><FONT SIZE=2>-    if( p_pr->pkey != IB_DEFAULT_PKEY )</FONT>
<BR><FONT SIZE=2>+    if ( (p_pr->pkey != IB_DEFAULT_PKEY) &&</FONT>
<BR><FONT SIZE=2>+         (p_sa_mad->method == IB_MAD_METHOD_GET) )</FONT>
<BR><FONT SIZE=2>     {</FONT>
<BR><FONT SIZE=2>       sa_status = IB_SA_MAD_STATUS_NO_RECORDS;</FONT>
<BR><FONT SIZE=2>       goto Exit;</FONT>
<BR><FONT SIZE=2>@@ -950,7 +951,8 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>   if( comp_mask & IB_PR_COMPMASK_SL )</FONT>
<BR><FONT SIZE=2>   {</FONT>
<BR><FONT SIZE=2>-    if( p_pr->sl != OSM_DEFAULT_SL )</FONT>
<BR><FONT SIZE=2>+    if( (p_pr->sl != OSM_DEFAULT_SL) &&</FONT>
<BR><FONT SIZE=2>+        (p_sa_mad->method == IB_MAD_METHOD_GET) )</FONT>
<BR><FONT SIZE=2>     {</FONT>
<BR><FONT SIZE=2>       sa_status = IB_SA_MAD_STATUS_NO_RECORDS;</FONT>
<BR><FONT SIZE=2>       goto Exit;</FONT>
<BR><FONT SIZE=2>@@ -982,15 +984,17 @@</FONT>
<BR><FONT SIZE=2>   }</FONT>
<BR><FONT SIZE=2>   else</FONT>
<BR><FONT SIZE=2>   {</FONT>
<BR><FONT SIZE=2>+    *pp_src_port = 0;</FONT>
<BR><FONT SIZE=2>     if( p_sa_mad->comp_mask & IB_PR_COMPMASK_SLID )</FONT>
<BR><FONT SIZE=2>     {</FONT>
<BR><FONT SIZE=2>       status = cl_ptr_vector_at( &p_rcv->p_subn->port_lid_tbl,</FONT>
<BR><FONT SIZE=2>                                  cl_ntoh16(p_pr->slid),</FONT>
<BR><FONT SIZE=2>(void**)pp_src_port );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-      if( (status != CL_SUCCESS) || (*pp_src_port == NULL) )</FONT>
<BR><FONT SIZE=2>+      if( ( (status != CL_SUCCESS) || (*pp_src_port == NULL) ) &&</FONT>
<BR><FONT SIZE=2>+            (p_sa_mad->method == IB_MAD_METHOD_GET) )</FONT>
<BR><FONT SIZE=2>       {</FONT>
<BR><FONT SIZE=2>         /*</FONT>
<BR><FONT SIZE=2>-          This 'error' is a the client's fault (bad lid) so</FONT>
<BR><FONT SIZE=2>+          This 'error' is the client's fault (bad lid) so</FONT>
<BR><FONT SIZE=2>           don't enter it as an error in our own log.</FONT>
<BR><FONT SIZE=2>           Return an error response to the client.</FONT>
<BR><FONT SIZE=2>         */</FONT>
<BR><FONT SIZE=2>@@ -1002,15 +1006,7 @@</FONT>
<BR><FONT SIZE=2>         sa_status = IB_SA_MAD_STATUS_NO_RECORDS;</FONT>
<BR><FONT SIZE=2>         goto Exit;</FONT>
<BR><FONT SIZE=2>       }</FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>     }</FONT>
<BR><FONT SIZE=2>-    else</FONT>
<BR><FONT SIZE=2>-    {</FONT>
<BR><FONT SIZE=2>-      /*</FONT>
<BR><FONT SIZE=2>-        No source information specified.</FONT>
<BR><FONT SIZE=2>-      */</FONT>
<BR><FONT SIZE=2>-      *pp_src_port = 0;</FONT>
<BR><FONT SIZE=2>-    }</FONT>
<BR><FONT SIZE=2>   }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>   if( p_sa_mad->comp_mask & IB_PR_COMPMASK_DGID )</FONT>
<BR><FONT SIZE=2>@@ -1023,7 +1019,7 @@</FONT>
<BR><FONT SIZE=2>           &p_rcv->p_subn->port_guid_tbl ) )</FONT>
<BR><FONT SIZE=2>     {</FONT>
<BR><FONT SIZE=2>       /*</FONT>
<BR><FONT SIZE=2>-        This 'error' is a the client's fault (bad gid) so</FONT>
<BR><FONT SIZE=2>+        This 'error' is the client's fault (bad gid) so</FONT>
<BR><FONT SIZE=2>         don't enter it as an error in our own log.</FONT>
<BR><FONT SIZE=2>         Return an error response to the client.</FONT>
<BR><FONT SIZE=2>       */</FONT>
<BR><FONT SIZE=2>@@ -1038,15 +1034,17 @@</FONT>
<BR><FONT SIZE=2>   }</FONT>
<BR><FONT SIZE=2>   else</FONT>
<BR><FONT SIZE=2>   {</FONT>
<BR><FONT SIZE=2>+    *pp_dest_port = 0;</FONT>
<BR><FONT SIZE=2>     if( p_sa_mad->comp_mask & IB_PR_COMPMASK_DLID )</FONT>
<BR><FONT SIZE=2>     {</FONT>
<BR><FONT SIZE=2>       status = cl_ptr_vector_at( &p_rcv->p_subn->port_lid_tbl,</FONT>
<BR><FONT SIZE=2>                                  cl_ntoh16(p_pr->dlid), </FONT>
<BR><FONT SIZE=2>(void**)pp_dest_port );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-      if( (status != CL_SUCCESS) || (*pp_dest_port == NULL) )</FONT>
<BR><FONT SIZE=2>+      if( ( (status != CL_SUCCESS) || (*pp_dest_port == NULL) ) &&</FONT>
<BR><FONT SIZE=2>+            (p_sa_mad->method == IB_MAD_METHOD_GET) )</FONT>
<BR><FONT SIZE=2>       {</FONT>
<BR><FONT SIZE=2>         /*</FONT>
<BR><FONT SIZE=2>-          This 'error' is a the client's fault (bad gid) so</FONT>
<BR><FONT SIZE=2>+          This 'error' is the client's fault (bad lid) so</FONT>
<BR><FONT SIZE=2>           don't enter it as an error in our own log.</FONT>
<BR><FONT SIZE=2>           Return an error response to the client.</FONT>
<BR><FONT SIZE=2>         */</FONT>
<BR><FONT SIZE=2>@@ -1058,15 +1056,7 @@</FONT>
<BR><FONT SIZE=2>         sa_status = IB_SA_MAD_STATUS_NO_RECORDS;</FONT>
<BR><FONT SIZE=2>         goto Exit;</FONT>
<BR><FONT SIZE=2>       }</FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>     }</FONT>
<BR><FONT SIZE=2>-    else</FONT>
<BR><FONT SIZE=2>-    {</FONT>
<BR><FONT SIZE=2>-      /*</FONT>
<BR><FONT SIZE=2>-        No destination information specified.</FONT>
<BR><FONT SIZE=2>-      */</FONT>
<BR><FONT SIZE=2>-      *pp_dest_port = 0;</FONT>
<BR><FONT SIZE=2>-    }</FONT>
<BR><FONT SIZE=2>   }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>  Exit:</FONT>
<BR><FONT SIZE=2>@@ -1118,7 +1108,6 @@</FONT>
<BR><FONT SIZE=2>   OSM_LOG_EXIT( p_rcv->p_log );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2> /**********************************************************************</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>**********************************************************************/</FONT>
<BR><FONT SIZE=2> static void</FONT>
<BR><FONT SIZE=2>@@ -1193,7 +1182,6 @@</FONT>
<BR><FONT SIZE=2>   OSM_LOG_EXIT( p_rcv->p_log );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2> /**********************************************************************</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>**********************************************************************/</FONT>
<BR><FONT SIZE=2> static void</FONT>
<BR><FONT SIZE=2>@@ -1260,7 +1248,7 @@</FONT>
<BR><FONT SIZE=2>              "Generating response with %u records.\n", num_rec );</FONT>
<BR><FONT SIZE=2>   }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-  if( num_rec == 0 )</FONT>
<BR><FONT SIZE=2>+  if ((p_rcvd_mad->method == IB_MAD_METHOD_GET) && (num_rec == 0))</FONT>
<BR><FONT SIZE=2>   {</FONT>
<BR><FONT SIZE=2>     osm_sa_send_error( p_rcv->p_resp, p_madw,</FONT>
<BR><FONT SIZE=2>                        IB_SA_MAD_STATUS_NO_RECORDS );</FONT>
<BR><FONT SIZE=2>@@ -1307,9 +1295,10 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>   p_resp_pr = (ib_path_rec_t*)ib_sa_mad_get_payload_ptr( p_resp_sa_mad</FONT>
<BR><FONT SIZE=2>);</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-  if( num_rec == 0 )</FONT>
<BR><FONT SIZE=2>+  if ( num_rec == 0 )</FONT>
<BR><FONT SIZE=2>   {</FONT>
<BR><FONT SIZE=2>-    p_resp_sa_mad->status = IB_SA_MAD_STATUS_NO_RECORDS;</FONT>
<BR><FONT SIZE=2>+    if (p_resp_sa_mad->method == IB_MAD_METHOD_GET_RESP)</FONT>
<BR><FONT SIZE=2>+      p_resp_sa_mad->status = IB_SA_MAD_STATUS_NO_RECORDS;</FONT>
<BR><FONT SIZE=2>     cl_memclr( p_resp_pr, sizeof(*p_resp_pr) );</FONT>
<BR><FONT SIZE=2>   }</FONT>
<BR><FONT SIZE=2>   else</FONT>
</P>
<BR>
<BR>
<BR>

<P><FONT SIZE=2>_______________________________________________</FONT>
<BR><FONT SIZE=2>openib-general mailing list</FONT>
<BR><FONT SIZE=2>openib-general@openib.org</FONT>
<BR><FONT SIZE=2><A HREF="http://openib.org/mailman/listinfo/openib-general" TARGET="_blank">http://openib.org/mailman/listinfo/openib-general</A></FONT>
</P>

<P><FONT SIZE=2>To unsubscribe, please visit <A HREF="http://openib.org/mailman/listinfo/openib-general" TARGET="_blank">http://openib.org/mailman/listinfo/openib-general</A></FONT>
</P>

</BODY>
</HTML>