ibqueryerrors: Close global file descriptor before running ibnd_discover_fabric
PATCH v2 2/4 ibqueryerrors: Close global file descriptor before running ibnd_discover_fabric
From: Vladimir Koushnir <vladimirk-VPRAkNaXOzVWk0Htik3J/[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
---
Changes since v1:
Fixed direct route (-D) option
src/ibqueryerrors.c +29 -8
@@ -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); }
Signature · 6 lines
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
A message that is not in the archive (sent off-list or not yet received): 553D3D9E.3020804-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org
Quoted 8 lines · Hal Rosenstock
From: Vladimir Koushnir <vladimirk-VPRAkNaXOzVWk0Htik3J/[email protected]>
Date: Sun, 26 Apr 2015 12:24:06 +0300Global file descriptor for SMPs and GMPs should be closed before running
ibnd_discover_fabric()to avoid parallel usage of two SMP file descriptors
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
Quoted 108 lines
---
Changes since v1:
Fixed direct route (-D) optionsrc/ibqueryerrors.c +29
-8@@ -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); }Signature · 1 line
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
A message that is not in the archive (sent off-list or not yet received): 20150703152421.GF15224-W4f6Xiosr+yv7QzWx2u06xL4W9x8LtSr@public.gmane.org
Quoted 4 lines · ira.weiny
Quoted 3 lines · Hal Rosenstock
From: Vladimir Koushnir <vladimirk-VPRAkNaXOzVWk0Htik3J/[email protected]>
Date: Sun, 26 Apr 2015 12:24:06 +0300
Quoted 8 lines
Quoted 5 lines
Global file descriptor for SMPs and GMPs should be closed before running
ibnd_discover_fabric()to avoid parallel usage of two SMP file descriptorsThis patch made the goto labels misleading when reading the code. I changed the name of the goto labels.
These label name changes look fine to me. Thanks.
-- Hal
Quoted 106 lines
Please verify I did not break anything on your end.
Applied with fix ups to the goto labels.
Ira
Quoted 100 lines
---
Changes since v1:
Fixed direct route (-D) optionsrc/ibqueryerrors.c +29
-7@@ -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);
Quoted 9 lines
Quoted 8 lines
src/ibqueryerrors.c +0
-1close_port: -mad_rpc_close_port (ibmad_port);close_node_name_map (node_name_map);exit (rc); }Signature · 1 line
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