Skip to contentSkip to conversation

Close additional file descriptor in iblinkinfo in advance

PATCH In review Hal Rosenstock 2 participants 5 messages Apr 16, 2015 – Jul 3, 2015 4 messages not in the archive InfiniBand

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Close additional file descriptor in iblinkinfo in advance

From: Vladimir Koushnir <vladimirk-VPRAkNaXOzVWk0Htik3J/[email protected]>
Date: Tue, 14 Apr 2015 18:14:48 +0300

Additional file descriptor for SMP MADs should be closed before running ibnd_discover_fabric() to avoid parallel usage of two SMP file descriptors

---
 src/iblinkinfo.c |   16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)
src/iblinkinfo.c +10 -6
index 92ff3c6..9dcf698 100644
@@ -594,6 +594,7 @@ int main(int argc, char **argv)
 	ibnd_fabric_t *diff_fabric = NULL;
 	struct ibmad_port *ibmad_port;
 	ib_portid_t port_id = { 0 };
+	uint8_t ni[IB_SMP_DATA_SIZE] = { 0 };
 	int mgmt_classes[3] =
 	    { IB_SMI_CLASS, IB_SMI_DIRECT_CLASS, IB_SA_CLASS };
 
@@ -653,12 +654,20 @@ int main(int argc, char **argv)
 		config.timeout_ms = ibd_timeout;
 	}
 
+	if (!smp_query_via(ni, &port_id, IB_ATTR_NODE_INFO, 0,
+				   ibd_timeout, ibmad_port)){
+			mad_rpc_close_port(ibmad_port);
+			fprintf(stderr,
+				"Failed to get local Node Info\n");
+			exit(1);
+	}
 	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);
 	}
@@ -678,6 +687,7 @@ int main(int argc, char **argv)
 			IBWARN("Failed to resolve %s; attempting full scan\n",
 			       guid_str);
 	}
+	mad_rpc_close_port(ibmad_port);
 
 	if (diff_cache_file &&
 	    !(diff_fabric = ibnd_load_fabric(diff_cache_file, 0)))
@@ -723,11 +733,6 @@ int main(int argc, char **argv)
 			fprintf(stderr, "Failed to find port: %s\n", guid_str);
 	} else if (!all && dr_path) {
 		ibnd_port_t *p = NULL;
-		uint8_t ni[IB_SMP_DATA_SIZE] = { 0 };
-
-		if (!smp_query_via(ni, &port_id, IB_ATTR_NODE_INFO, 0,
-				   ibd_timeout, ibmad_port))
-			return -1;
 		mad_decode_field(ni, IB_NODE_PORT_GUID_F, &(guid));
 
 		p = ibnd_find_port_guid(fabric, guid);
@@ -758,6 +763,5 @@ int main(int argc, char **argv)
 
 close_port:
 	close_node_name_map(node_name_map);
-	mad_rpc_close_port(ibmad_port);
 	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): 552FB794.7080503-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org

#2 lore raw
Quoted 8 lines · Hal Rosenstock

From: Vladimir Koushnir <vladimirk-VPRAkNaXOzVWk0Htik3J/[email protected]>
Date: Tue, 14 Apr 2015 18:14:48 +0300

Additional file descriptor for SMP MADs should be closed before running ibnd_discover_fabric() to avoid parallel usage of two SMP file descriptors

I'm not quite sure why but this patch breaks the DR processing of iblinkinfo.

Please test iblinkinfo -D <path>

I don't have the time to figure this out at the moment.

Ira

Quoted 67 lines
---
 src/iblinkinfo.c |   16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)
src/iblinkinfo.c +10 -6
index 92ff3c6..9dcf698 100644
@@ -594,6 +594,7 @@ int main(int argc, char **argv)
 	ibnd_fabric_t *diff_fabric = NULL;
 	struct ibmad_port *ibmad_port;
 	ib_portid_t port_id = { 0 };
+	uint8_t ni[IB_SMP_DATA_SIZE] = { 0 };
 	int mgmt_classes[3] =
 	    { IB_SMI_CLASS, IB_SMI_DIRECT_CLASS, IB_SA_CLASS };
 
@@ -653,12 +654,20 @@ int main(int argc, char **argv)
 		config.timeout_ms = ibd_timeout;
 	}
 
+	if (!smp_query_via(ni, &port_id, IB_ATTR_NODE_INFO, 0,
+				   ibd_timeout, ibmad_port)){
+			mad_rpc_close_port(ibmad_port);
+			fprintf(stderr,
+				"Failed to get local Node Info\n");
+			exit(1);
+	}
 	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);
 	}
@@ -678,6 +687,7 @@ int main(int argc, char **argv)
 			IBWARN("Failed to resolve %s; attempting full scan\n",
 			       guid_str);
 	}
+	mad_rpc_close_port(ibmad_port);
 
 	if (diff_cache_file &&
 	    !(diff_fabric = ibnd_load_fabric(diff_cache_file, 0)))
@@ -723,11 +733,6 @@ int main(int argc, char **argv)
 			fprintf(stderr, "Failed to find port: %s\n", guid_str);
 	} else if (!all && dr_path) {
 		ibnd_port_t *p = NULL;
-		uint8_t ni[IB_SMP_DATA_SIZE] = { 0 };
-
-		if (!smp_query_via(ni, &port_id, IB_ATTR_NODE_INFO, 0,
-				   ibd_timeout, ibmad_port))
-			return -1;
 		mad_decode_field(ni, IB_NODE_PORT_GUID_F, &(guid));
 
 		p = ibnd_find_port_guid(fabric, guid);
@@ -758,6 +763,5 @@ int main(int argc, char **argv)
 
 close_port:
 	close_node_name_map(node_name_map);
-	mad_rpc_close_port(ibmad_port);
 	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): [email protected]

A message that is not in the archive (sent off-list or not yet received): fx82yx4y90ielsvlcgq06v5k.1429713777113-2ueSQiBKiTY7tOexoI0I+QC/[email protected]

#5 lore raw

I may have incorrectly acked a patch on the list which I did not apply...

If so please ignore.

Sorry for the noise,
Ira

Quoted 93 lines

-----Original Message-----
From: Vladimir Koushnir [mailto:vladimirk-VPRAkNaXOzVWk0Htik3J/[email protected]]
Sent: Wednesday, April 22, 2015 7:43 AM
To: Weiny, Ira; Hal Rosenstock
Cc: [email protected]
Subject: Re: [PATCH infiniband-diags] Close additional file descriptor in iblinkinfo in advance

Thanks for figuring this out.
I'll test on Sun and update.

"ira.weiny" <[email protected]> wrote:

Quoted 10 lines · Hal Rosenstock

From: Vladimir Koushnir <vladimirk-VPRAkNaXOzVWk0Htik3J/[email protected]>
Date: Tue, 14 Apr 2015 18:14:48 +0300

Additional file descriptor for SMP MADs should be closed before running
ibnd_discover_fabric() to avoid parallel usage of two SMP file descriptors

I'm not quite sure why but this patch breaks the DR processing of iblinkinfo.

Please test iblinkinfo -D <path>

I don't have the time to figure this out at the moment.

Ira

Quoted 59 lines
---
 src/iblinkinfo.c |   16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)
src/iblinkinfo.c index renamed from src/iblinkinfo.c +0 -0

92ff3c6..9dcf698 100644

src/iblinkinfo.c +10 -6
@@ -594,6 +594,7 @@ int main(int argc, char **argv)
      ibnd_fabric_t *diff_fabric = NULL;
      struct ibmad_port *ibmad_port;
      ib_portid_t port_id = { 0 };
+     uint8_t ni[IB_SMP_DATA_SIZE] = { 0 };
      int mgmt_classes[3] =
          { IB_SMI_CLASS, IB_SMI_DIRECT_CLASS, IB_SA_CLASS };
 
@@ -653,12 +654,20 @@ int main(int argc, char **argv)
              config.timeout_ms = ibd_timeout;
      }
 
+     if (!smp_query_via(ni, &port_id, IB_ATTR_NODE_INFO, 0,
+                                ibd_timeout, ibmad_port)){
+                     mad_rpc_close_port(ibmad_port);
+                     fprintf(stderr,
+                             "Failed to get local Node Info\n");
+                     exit(1);
+     }
      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);
      }
@@ -678,6 +687,7 @@ int main(int argc, char **argv)
                      IBWARN("Failed to resolve %s; attempting full scan\n",
                             guid_str);
      }
+     mad_rpc_close_port(ibmad_port);
 
      if (diff_cache_file &&
          !(diff_fabric = ibnd_load_fabric(diff_cache_file, 0))) @@
-723,11 +733,6 @@ int main(int argc, char **argv)
                      fprintf(stderr, "Failed to find port: %s\n", guid_str);
      } else if (!all && dr_path) {
              ibnd_port_t *p = NULL;
-             uint8_t ni[IB_SMP_DATA_SIZE] = { 0 };
-
-             if (!smp_query_via(ni, &port_id, IB_ATTR_NODE_INFO, 0,
-                                ibd_timeout, ibmad_port))
-                     return -1;
              mad_decode_field(ni, IB_NODE_PORT_GUID_F, &(guid));
 
              p = ibnd_find_port_guid(fabric, guid); @@ -758,6 +763,5

@@ int main(int argc, char **argv)

Quoted 8 lines
Quoted 8 lines

close_port:

      close_node_name_map(node_name_map);
-     mad_rpc_close_port(ibmad_port);
      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

#6 lore raw

PATCH 1/1 Close additional file descriptor in iblinkinfo in advance

In reply to a message not in the archive

From: Vladimir Koushnir <vladimirk-VPRAkNaXOzVWk0Htik3J/[email protected]>
Date: Tue, 14 Apr 2015 18:14:48 +0300

Additional file descriptor for SMP MADs should be closed before running ibnd_discover_fabric() to avoid parallel usage of two SMP file descriptors

---
 src/iblinkinfo.c |   16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)
src/iblinkinfo.c +10 -6
index 92ff3c6..9dcf698 100644
@@ -594,6 +594,7 @@ int main(int argc, char **argv)
 	ibnd_fabric_t *diff_fabric = NULL;
 	struct ibmad_port *ibmad_port;
 	ib_portid_t port_id = { 0 };
+	uint8_t ni[IB_SMP_DATA_SIZE] = { 0 };
 	int mgmt_classes[3] =
 	    { IB_SMI_CLASS, IB_SMI_DIRECT_CLASS, IB_SA_CLASS };
 
@@ -653,12 +654,20 @@ int main(int argc, char **argv)
 		config.timeout_ms = ibd_timeout;
 	}
 
+	if (!smp_query_via(ni, &port_id, IB_ATTR_NODE_INFO, 0,
+				   ibd_timeout, ibmad_port)){
+			mad_rpc_close_port(ibmad_port);
+			fprintf(stderr,
+				"Failed to get local Node Info\n");
+			exit(1);
+	}
 	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);
 	}
@@ -678,6 +687,7 @@ int main(int argc, char **argv)
 			IBWARN("Failed to resolve %s; attempting full scan\n",
 			       guid_str);
 	}
+	mad_rpc_close_port(ibmad_port);
 
 	if (diff_cache_file &&
 	    !(diff_fabric = ibnd_load_fabric(diff_cache_file, 0)))
@@ -723,11 +733,6 @@ int main(int argc, char **argv)
 			fprintf(stderr, "Failed to find port: %s\n", guid_str);
 	} else if (!all && dr_path) {
 		ibnd_port_t *p = NULL;
-		uint8_t ni[IB_SMP_DATA_SIZE] = { 0 };
-
-		if (!smp_query_via(ni, &port_id, IB_ATTR_NODE_INFO, 0,
-				   ibd_timeout, ibmad_port))
-			return -1;
 		mad_decode_field(ni, IB_NODE_PORT_GUID_F, &(guid));
 
 		p = ibnd_find_port_guid(fabric, guid);
@@ -758,6 +763,5 @@ int main(int argc, char **argv)
 
 close_port:
 	close_node_name_map(node_name_map);
-	mad_rpc_close_port(ibmad_port);
 	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): 5550F731.9070005-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org

#8 lore raw
Quoted 25 lines · Hal Rosenstock

From: Vladimir Koushnir <vladimirk-VPRAkNaXOzVWk0Htik3J/[email protected]>
Date: Tue, 14 Apr 2015 18:14:48 +0300

Additional file descriptor for SMP MADs should be closed before running ibnd_discover_fabric() to avoid parallel usage of two SMP file descriptors

---
 src/iblinkinfo.c |   16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)
src/iblinkinfo.c +1 -0
index 92ff3c6..9dcf698 100644
@@ -594,6 +594,7 @@ int main(int argc, char **argv)
 	ibnd_fabric_t *diff_fabric = NULL;
 	struct ibmad_port *ibmad_port;
 	ib_portid_t port_id = { 0 };
+	uint8_t ni[IB_SMP_DATA_SIZE] = { 0 };
 	int mgmt_classes[3] =
 	    { IB_SMI_CLASS, IB_SMI_DIRECT_CLASS, IB_SA_CLASS };
 

src/iblinkinfo.c int main(int argc, char **argv) · line 663

Quoted 10 lines
src/iblinkinfo.c +7 -0
@@ -653,12 +654,20 @@ int main(int argc, char **argv)
 		config.timeout_ms = ibd_timeout;
 	}
 
+	if (!smp_query_via(ni, &port_id, IB_ATTR_NODE_INFO, 0,
+				   ibd_timeout, ibmad_port)){
+			mad_rpc_close_port(ibmad_port);
+			fprintf(stderr,
+				"Failed to get local Node Info\n");
+			exit(1);
+	}

You can't do this here. This results in the Node Info being incorrect for a partial fabric DR query. For example,

[root@phcppriv12 sbin]# ./iblinkinfo -D 0,1,1
Failed to find port: 0,1,1

Please fix the DR query,
Ira

Quoted 40 lines
src/iblinkinfo.c +2 -6
 	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);
 	}
@@ -678,6 +687,7 @@ int main(int argc, char **argv)
 			IBWARN("Failed to resolve %s; attempting full scan\n",
 			       guid_str);
 	}
+	mad_rpc_close_port(ibmad_port);
 
 	if (diff_cache_file &&
 	    !(diff_fabric = ibnd_load_fabric(diff_cache_file, 0)))
@@ -723,11 +733,6 @@ int main(int argc, char **argv)
 			fprintf(stderr, "Failed to find port: %s\n", guid_str);
 	} else if (!all && dr_path) {
 		ibnd_port_t *p = NULL;
-		uint8_t ni[IB_SMP_DATA_SIZE] = { 0 };
-
-		if (!smp_query_via(ni, &port_id, IB_ATTR_NODE_INFO, 0,
-				   ibd_timeout, ibmad_port))
-			return -1;
 		mad_decode_field(ni, IB_NODE_PORT_GUID_F, &(guid));
 
 		p = ibnd_find_port_guid(fabric, guid);
@@ -758,6 +763,5 @@ int main(int argc, char **argv)
 
 close_port:
 	close_node_name_map(node_name_map);
-	mad_rpc_close_port(ibmad_port);
 	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