[ofa-general] [PATCH] infiniband-diags: some code consolidation

Sasha Khapyorsky sashak at voltaire.com
Wed Feb 11 11:55:25 PST 2009


Consolidate repeated code using helper functions
get_and_dump_any_records() and get_and_dump_all_records().

Signed-off-by: Sasha Khapyorsky <sashak at voltaire.com>
---
 infiniband-diags/src/saquery.c |  172 +++++++++++++++-------------------------
 1 files changed, 65 insertions(+), 107 deletions(-)

diff --git a/infiniband-diags/src/saquery.c b/infiniband-diags/src/saquery.c
index a94a015..9726d22 100644
--- a/infiniband-diags/src/saquery.c
+++ b/infiniband-diags/src/saquery.c
@@ -796,6 +796,21 @@ static int get_any_records(bind_handle_t h,
 	return ret;
 }
 
+static int get_and_dump_any_records(bind_handle_t h, uint16_t attr_id,
+				    uint32_t attr_mod, ib_net64_t comp_mask,
+				    void *attr, uint64_t sm_key,
+				    void (*dump_func) (void *))
+{
+	int ret = get_any_records(h, attr_id, attr_mod, comp_mask, attr,
+				  sm_key);
+	if (ret)
+		return ret;
+
+	dump_results(&result, dump_func);
+
+	return 0;
+}
+
 /**
  * Get all the records available for requested query type.
  */
@@ -804,6 +819,18 @@ static int get_all_records(bind_handle_t h, uint16_t attr_id, int trusted)
 	return get_any_records(h, attr_id, 0, 0, NULL, trusted ? smkey : 0);
 }
 
+static int get_and_dump_all_records(bind_handle_t h, uint16_t attr_id,
+				    int trusted, void (*dump_func) (void *))
+{
+	int ret = get_all_records(h, attr_id, 0);
+	if (ret)
+		return ret;
+
+	dump_results(&result, dump_func);
+	return_mad();
+	return ret;
+}
+
 /**
  * return the lid from the node descriptor (name) supplied
  */
@@ -989,7 +1016,6 @@ static int query_path_records(const struct query_cmd *q, bind_handle_t h,
 {
 	ib_path_rec_t pr;
 	ib_net64_t comp_mask = 0;
-	int ret;
 	uint32_t flow = 0;
 	uint16_t qos_class = 0;
 	uint8_t reversible = 0;
@@ -1014,13 +1040,8 @@ static int query_path_records(const struct query_cmd *q, bind_handle_t h,
 	CHECK_AND_SET_VAL_AND_SEL(p->rate, pr.rate, PR, RATE, SELEC);
 	CHECK_AND_SET_VAL_AND_SEL(p->pkt_life, pr.pkt_life, PR, PKTLIFETIME, SELEC);
 
-	ret = get_any_records(h, IB_SA_ATTR_PATHRECORD, 0, comp_mask, &pr, 0);
-	if (ret)
-		return ret;
-
-	dump_results(&result, dump_path_record);
-	return_mad();
-	return ret;
+	return get_and_dump_any_records(h, IB_SA_ATTR_PATHRECORD, 0, comp_mask,
+					&pr, 0, dump_path_record);
 }
 
 static ib_api_status_t print_issm_records(bind_handle_t h)
@@ -1075,13 +1096,8 @@ return_mc:
 
 static int print_multicast_group_records(bind_handle_t h)
 {
-	int ret = get_all_records(h, IB_SA_ATTR_MCRECORD, 0);
-	if (ret)
-		return ret;
-
-	dump_results(&result, dump_multicast_group_record);
-	return_mad();
-	return ret;
+	return get_and_dump_all_records(h, IB_SA_ATTR_MCRECORD, 0,
+					dump_multicast_group_record);
 }
 
 static int query_class_port_info(const struct query_cmd *q, bind_handle_t h,
@@ -1095,7 +1111,7 @@ static int query_node_records(const struct query_cmd *q, bind_handle_t h,
 {
 	ib_node_record_t nr;
 	ib_net64_t comp_mask = 0;
-	int lid = 0, ret;
+	int lid = 0;
 
 	if (argc > 0)
 		parse_lid_and_ports(h, argv[0], &lid, NULL, NULL);
@@ -1103,14 +1119,8 @@ static int query_node_records(const struct query_cmd *q, bind_handle_t h,
 	memset(&nr, 0, sizeof(nr));
 	CHECK_AND_SET_VAL(lid, 16, 0, nr.lid, NR, LID);
 
-	ret = get_any_records(h, IB_SA_ATTR_NODERECORD, 0, comp_mask, &nr, 0);
-	if (ret)
-		return ret;
-
-	dump_results(&result, dump_node_record);
-	return_mad();
-
-	return 0;
+	return get_and_dump_any_records(h, IB_SA_ATTR_NODERECORD, 0, comp_mask,
+					&nr, 0, dump_node_record);
 }
 
 static int query_portinfo_records(const struct query_cmd *q,
@@ -1119,7 +1129,7 @@ static int query_portinfo_records(const struct query_cmd *q,
 {
 	ib_portinfo_record_t pir;
 	ib_net64_t comp_mask = 0;
-	int lid = 0, port = -1, ret;
+	int lid = 0, port = -1;
 
 	if (argc > 0)
 		parse_lid_and_ports(h, argv[0], &lid, &port, NULL);
@@ -1128,15 +1138,9 @@ static int query_portinfo_records(const struct query_cmd *q,
 	CHECK_AND_SET_VAL(lid, 16, 0, pir.lid, PIR, LID);
 	CHECK_AND_SET_VAL(port, 8, -1, pir.port_num, PIR, PORTNUM);
 
-	ret = get_any_records(h, IB_SA_ATTR_PORTINFORECORD, 0, comp_mask,
-			      &pir, 0);
-	if (ret)
-		return ret;
-
-	dump_results(&result, dump_one_portinfo_record);
-	return_mad();
-
-	return 0;
+	return get_and_dump_any_records(h, IB_SA_ATTR_PORTINFORECORD, 0,
+					comp_mask, &pir, 0,
+					dump_one_portinfo_record);
 }
 
 static int query_mcmember_records(const struct query_cmd *q,
@@ -1145,7 +1149,6 @@ static int query_mcmember_records(const struct query_cmd *q,
 {
 	ib_member_rec_t mr;
 	ib_net64_t comp_mask = 0;
-	int ret;
 	uint32_t flow = 0;
 	uint8_t sl = 0, hop = 0, scope = 0;
 
@@ -1168,38 +1171,23 @@ static int query_mcmember_records(const struct query_cmd *q,
 	mr.scope_state |= scope << 4;
 	CHECK_AND_SET_VAL(p->proxy_join, 8, -1, mr.proxy_join, MCR, PROXY);
 
-	ret = get_any_records(h, IB_SA_ATTR_MCRECORD, 0, comp_mask, &mr, smkey);
-	if (ret)
-		return ret;
-
-	dump_results(&result, dump_one_mcmember_record);
-	return_mad();
-	return 0;
+	return get_and_dump_any_records(h, IB_SA_ATTR_MCRECORD, 0, comp_mask,
+					&mr, smkey, dump_one_mcmember_record);
 }
 
 static int query_service_records(const struct query_cmd *q, bind_handle_t h,
 				 struct query_params *p, int argc, char *argv[])
 {
-	int ret = get_all_records(h, IB_SA_ATTR_SERVICERECORD, 0);
-	if (ret)
-		return ret;
-
-	dump_results(&result, dump_service_record);
-	return_mad();
-	return 0;
+	return get_and_dump_all_records(h, IB_SA_ATTR_SERVICERECORD, 0,
+					dump_service_record);
 }
 
 static int query_informinfo_records(const struct query_cmd *q,
 				    bind_handle_t h, struct query_params *p,
 				    int argc, char *argv[])
 {
-	int ret = get_all_records(h, IB_SA_ATTR_INFORMINFORECORD, 0);
-	if (ret)
-		return ret;
-
-	dump_results(&result, dump_inform_info_record);
-	return_mad();
-	return 0;
+	return get_and_dump_all_records(h, IB_SA_ATTR_INFORMINFORECORD, 0,
+					dump_inform_info_record);
 }
 
 static int query_link_records(const struct query_cmd *q, bind_handle_t h,
@@ -1207,7 +1195,7 @@ static int query_link_records(const struct query_cmd *q, bind_handle_t h,
 {
 	ib_link_record_t lr;
 	ib_net64_t comp_mask = 0;
-	int from_lid = 0, to_lid = 0, from_port = -1, to_port = -1, ret;
+	int from_lid = 0, to_lid = 0, from_port = -1, to_port = -1;
 
 	if (argc > 0)
 		parse_lid_and_ports(h, argv[0], &from_lid, &from_port, NULL);
@@ -1221,13 +1209,8 @@ static int query_link_records(const struct query_cmd *q, bind_handle_t h,
 	CHECK_AND_SET_VAL(to_lid, 16, 0, lr.to_lid, LR, TO_LID);
 	CHECK_AND_SET_VAL(to_port, 8, -1, lr.to_port_num, LR, TO_PORT);
 
-	ret = get_any_records(h, IB_SA_ATTR_LINKRECORD, 0, comp_mask, &lr, 0);
-	if (ret)
-		return ret;
-
-	dump_results(&result, dump_one_link_record);
-	return_mad();
-	return 0;
+	return get_and_dump_any_records(h, IB_SA_ATTR_LINKRECORD, 0, comp_mask,
+					&lr, 0, dump_one_link_record);
 }
 
 static int query_sl2vl_records(const struct query_cmd *q, bind_handle_t h,
@@ -1235,7 +1218,7 @@ static int query_sl2vl_records(const struct query_cmd *q, bind_handle_t h,
 {
 	ib_slvl_table_record_t slvl;
 	ib_net64_t comp_mask = 0;
-	int lid = 0, in_port = -1, out_port = -1, ret;
+	int lid = 0, in_port = -1, out_port = -1;
 
 	if (argc > 0)
 		parse_lid_and_ports(h, argv[0], &lid, &in_port, &out_port);
@@ -1245,14 +1228,9 @@ static int query_sl2vl_records(const struct query_cmd *q, bind_handle_t h,
 	CHECK_AND_SET_VAL(in_port, 8, -1, slvl.in_port_num, SLVL, IN_PORT);
 	CHECK_AND_SET_VAL(out_port, 8, -1, slvl.out_port_num, SLVL, OUT_PORT);
 
-	ret = get_any_records(h, IB_SA_ATTR_SL2VLTABLERECORD, 0, comp_mask,
-			      &slvl, 0);
-	if (ret)
-		return ret;
-
-	dump_results(&result, dump_one_slvl_record);
-	return_mad();
-	return 0;
+	return get_and_dump_any_records(h, IB_SA_ATTR_SL2VLTABLERECORD, 0,
+					comp_mask, &slvl, 0,
+					dump_one_slvl_record);
 }
 
 static int query_vlarb_records(const struct query_cmd *q, bind_handle_t h,
@@ -1260,7 +1238,7 @@ static int query_vlarb_records(const struct query_cmd *q, bind_handle_t h,
 {
 	ib_vl_arb_table_record_t vlarb;
 	ib_net64_t comp_mask = 0;
-	int lid = 0, port = -1, block = -1, ret;
+	int lid = 0, port = -1, block = -1;
 
 	if (argc > 0)
 		parse_lid_and_ports(h, argv[0], &lid, &port, &block);
@@ -1270,14 +1248,9 @@ static int query_vlarb_records(const struct query_cmd *q, bind_handle_t h,
 	CHECK_AND_SET_VAL(port, 8, -1, vlarb.port_num, VLA, OUT_PORT);
 	CHECK_AND_SET_VAL(block, 8, -1, vlarb.block_num, VLA, BLOCK);
 
-	ret = get_any_records(h, IB_SA_ATTR_VLARBTABLERECORD, 0, comp_mask,
-			      &vlarb, 0);
-	if (ret)
-		return ret;
-
-	dump_results(&result, dump_one_vlarb_record);
-	return_mad();
-	return 0;
+	return get_and_dump_any_records(h, IB_SA_ATTR_VLARBTABLERECORD, 0,
+					comp_mask, &vlarb, 0,
+					dump_one_vlarb_record);
 }
 
 static int query_pkey_tbl_records(const struct query_cmd *q,
@@ -1286,7 +1259,7 @@ static int query_pkey_tbl_records(const struct query_cmd *q,
 {
 	ib_pkey_table_record_t pktr;
 	ib_net64_t comp_mask = 0;
-	int lid = 0, port = -1, block = -1, ret;
+	int lid = 0, port = -1, block = -1;
 
 	if (argc > 0)
 		parse_lid_and_ports(h, argv[0], &lid, &port, &block);
@@ -1296,14 +1269,9 @@ static int query_pkey_tbl_records(const struct query_cmd *q,
 	CHECK_AND_SET_VAL(port, 8, -1, pktr.port_num, PKEY, PORT);
 	CHECK_AND_SET_VAL(block, 16, -1, pktr.port_num, PKEY, BLOCK);
 
-	ret = get_any_records(h, IB_SA_ATTR_PKEYTABLERECORD, 0, comp_mask,
-			      &pktr, smkey);
-	if (ret)
-		return ret;
-
-	dump_results(&result, dump_one_pkey_tbl_record);
-	return_mad();
-	return 0;
+	return get_and_dump_any_records(h, IB_SA_ATTR_PKEYTABLERECORD, 0,
+					comp_mask, &pktr, smkey,
+					dump_one_pkey_tbl_record);
 }
 
 static int query_lft_records(const struct query_cmd *q, bind_handle_t h,
@@ -1311,7 +1279,7 @@ static int query_lft_records(const struct query_cmd *q, bind_handle_t h,
 {
 	ib_lft_record_t lftr;
 	ib_net64_t comp_mask = 0;
-	int lid = 0, block = -1, ret;
+	int lid = 0, block = -1;
 
 	if (argc > 0)
 		parse_lid_and_ports(h, argv[0], &lid, &block, NULL);
@@ -1320,13 +1288,8 @@ static int query_lft_records(const struct query_cmd *q, bind_handle_t h,
 	CHECK_AND_SET_VAL(lid, 16, 0, lftr.lid, LFTR, LID);
 	CHECK_AND_SET_VAL(block, 16, -1, lftr.block_num, LFTR, BLOCK);
 
-	ret = get_any_records(h, IB_SA_ATTR_LFTRECORD, 0, comp_mask, &lftr, 0);
-	if (ret)
-		return ret;
-
-	dump_results(&result, dump_one_lft_record);
-	return_mad();
-	return 0;
+	return get_and_dump_any_records(h, IB_SA_ATTR_LFTRECORD, 0, comp_mask,
+					&lftr, 0, dump_one_lft_record);
 }
 
 static int query_mft_records(const struct query_cmd *q, bind_handle_t h,
@@ -1334,7 +1297,7 @@ static int query_mft_records(const struct query_cmd *q, bind_handle_t h,
 {
 	ib_mft_record_t mftr;
 	ib_net64_t comp_mask = 0;
-	int lid = 0, block = -1, position = -1, ret;
+	int lid = 0, block = -1, position = -1;
 	uint16_t pos = 0;
 
 	if (argc > 0)
@@ -1347,13 +1310,8 @@ static int query_mft_records(const struct query_cmd *q, bind_handle_t h,
 	CHECK_AND_SET_VAL(position, 8, -1, pos, MFTR, POSITION);
 	mftr.position_block_num |= cl_hton16(pos << 12);
 
-	ret = get_any_records(h, IB_SA_ATTR_MFTRECORD, 0, comp_mask, &mftr, 0);
-	if (ret)
-		return ret;
-
-	dump_results(&result, dump_one_mft_record);
-	return_mad();
-	return 0;
+	return get_and_dump_any_records(h, IB_SA_ATTR_MFTRECORD, 0, comp_mask,
+					&mftr, 0, dump_one_mft_record);
 }
 
 static bind_handle_t get_bind_handle(void)
-- 
1.6.1.rc1.45.g123ed




More information about the general mailing list