On Sun, Apr 26, 2015 at 03:33:50PM -0400, Hal Rosenstock wrote:
> From: Vladimir Koushnir <[email protected]>
> Date: Sun, 26 Apr 2015 12:24:06 +0300
> 
> Global file descriptor for SMPs and GMPs should be closed before running
> ibnd_discover_fabric() to avoid parallel usage of two SMP file descriptors
> 
> Signed-off-by: Vladimir Koushnir <[email protected]>
> Signed-off-by: Hal Rosenstock <[email protected]>

This patch made the goto labels misleading when reading the code.  I changed
the name of the goto labels.

Please verify I did not break anything on your end.

Applied with fix ups to the goto labels.

Ira

> ---
> Changes since v1:
> Fixed direct route (-D) option
> 
> diff --git a/src/ibqueryerrors.c b/src/ibqueryerrors.c
> index 06fcbac..80436d3 100644
> --- a/src/ibqueryerrors.c
> +++ b/src/ibqueryerrors.c
> @@ -1000,18 +1002,20 @@ int main(int argc, char **argv)
>       config.flags = ibd_ibnetdisc_flags;
>       config.mkey = ibd_mkey;
>  
> -     node_name_map = open_node_name_map(node_name_map_file);
> -
>       if (dr_path && load_cache_file) {
> +             mad_rpc_close_port(ibmad_port);
>               fprintf(stderr, "Cannot specify cache and direct route path\n");
>               exit(-1);
>       }
>  
>       if (resolve_self(ibd_ca, ibd_ca_port, &self_portid, &port, 
> &self_gid.raw) < 0) {
> +             mad_rpc_close_port(ibmad_port);
>               IBEXIT("can't resolve self port %s", argv[0]);
>               goto close_port;
>       }
>  
> +     node_name_map = open_node_name_map(node_name_map_file);
> +
>       /* limit the scan the fabric around the target */
>       if (dr_path) {
>               if ((resolved =
> @@ -1030,10 +1034,13 @@ int main(int argc, char **argv)
>                       lid2sl_table[portid.lid] = portid.sl;
>       }
>  
> +     mad_rpc_close_port(ibmad_port);
> +
>       if (load_cache_file) {
>               if ((fabric = ibnd_load_fabric(load_cache_file, 0)) == NULL) {
>                       fprintf(stderr, "loading cached fabric failed\n");
> -                     exit(-1);
> +                     rc = -1;
> +                     goto close_port;
>               }
>       } else {
>               if (resolved >= 0) {
> @@ -1057,6 +1064,21 @@ int main(int argc, char **argv)
>  
>       set_thresholds(threshold_file);
>  
> +     /* reopen the global ibmad_port */
> +     ibmad_port = mad_rpc_open_port(ibd_ca, ibd_ca_port,
> +                                    mgmt_classes, 4);
> +     if (!ibmad_port) {
> +             ibnd_destroy_fabric(fabric);
> +             close_node_name_map(node_name_map);
> +             IBEXIT("Failed to reopen port: %s:%d\n",
> +                     ibd_ca, ibd_ca_port);
> +     }
> +
> +     smp_mkey_set(ibmad_port, ibd_mkey);
> +
> +     if (ibd_timeout)
> +             mad_rpc_set_timeout(ibmad_port, ibd_timeout);
> +
>       if (port_guid_str) {
>               ibnd_port_t *port = ibnd_find_port_guid(fabric, port_guid);
>               if (port)
> @@ -1067,12 +1089,12 @@ int main(int argc, char **argv)
>       } else if (dr_path) {
>               ibnd_port_t *port = ibnd_find_port_dr(fabric, dr_path);
>               uint8_t ni[IB_SMP_DATA_SIZE] = { 0 };
> -
>               if (!smp_query_via(ni, &portid, IB_ATTR_NODE_INFO, 0,
> -                                ibd_timeout, ibmad_port)) {
> -                     rc = -1;
> -                     goto destroy_fabric;
> +                        ibd_timeout, ibmad_port)) {
> +                             fprintf(stderr, "Failed to query local Node 
> Info\n");
> +                             goto destroy_fabric;
>               }
> +
>               mad_decode_field(ni, IB_NODE_PORT_GUID_F, &(port_guid));
>  
>               port = ibnd_find_port_guid(fabric, port_guid);
> @@ -1087,6 +1109,7 @@ int main(int argc, char **argv)
>               if(obtain_sl)
>                       if(path_record_query(self_gid,0))
>                               goto destroy_fabric;
> +
>               ibnd_iter_nodes(fabric, print_node, NULL);
>       }
>  
> @@ -1095,10 +1118,10 @@ int main(int argc, char **argv)
>               rc = 1;
>  
>  destroy_fabric:
> +     mad_rpc_close_port(ibmad_port);
>       ibnd_destroy_fabric(fabric);
>  
>  close_port:
> -     mad_rpc_close_port(ibmad_port);
>       close_node_name_map(node_name_map);
>       exit(rc);
>  }
> -- 
> 1.7.8.2
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to