If partitions.conf is for some reasons invalid or empty, try again with the default configuration.
This will re-use the default configuration created by prtn_make_default(), but osm_prtn_make_new() will automatically overwrite the initial default. Signed-off-by: Bernd Schubert <[email protected]> --- opensm/osm_prtn.c | 11 ++++++++++- opensm/osm_prtn_config.c | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/opensm/osm_prtn.c b/opensm/osm_prtn.c index e76e2e1..4db7e7a 100644 --- a/opensm/osm_prtn.c +++ b/opensm/osm_prtn.c @@ -376,6 +376,7 @@ ib_api_status_t osm_prtn_make_partitions(osm_log_t * p_log, osm_subn_t * p_subn) struct stat statbuf; const char *file_name; boolean_t is_config = TRUE; + boolean_t is_wrong_config = FALSE; ib_api_status_t status = IB_SUCCESS; cl_map_item_t *p_next; osm_prtn_t *p; @@ -389,6 +390,7 @@ ib_api_status_t osm_prtn_make_partitions(osm_log_t * p_log, osm_subn_t * p_subn) is_config = FALSE; } +retry_default: /* clean up current port maps */ p_next = cl_qmap_head(&p_subn->prtn_pkey_tbl); while (p_next != cl_qmap_end(&p_subn->prtn_pkey_tbl)) { @@ -404,9 +406,11 @@ ib_api_status_t osm_prtn_make_partitions(osm_log_t * p_log, osm_subn_t * p_subn) if (status != IB_SUCCESS) goto _err; - if (is_config && osm_prtn_config_parse_file(p_log, p_subn, file_name)) + if (is_config && osm_prtn_config_parse_file(p_log, p_subn, file_name)) { OSM_LOG(p_log, OSM_LOG_VERBOSE, "Partition configuration " "was not fully processed\n"); + is_wrong_config = TRUE; + } /* and now clean up empty partitions */ p_next = cl_qmap_head(&p_subn->prtn_pkey_tbl); @@ -421,6 +425,11 @@ ib_api_status_t osm_prtn_make_partitions(osm_log_t * p_log, osm_subn_t * p_subn) } } + if (is_config && is_wrong_config) { + is_config = FALSE; + goto retry_default; + } + _err: return status; } diff --git a/opensm/osm_prtn_config.c b/opensm/osm_prtn_config.c index 8f4a673..e916582 100644 --- a/opensm/osm_prtn_config.c +++ b/opensm/osm_prtn_config.c @@ -696,6 +696,9 @@ done: return len; } +/** + * @return -1 on error, 0 on success + */ int osm_prtn_config_parse_file(osm_log_t * p_log, osm_subn_t * p_subn, const char *file_name) { @@ -703,6 +706,7 @@ int osm_prtn_config_parse_file(osm_log_t * p_log, osm_subn_t * p_subn, struct part_conf *conf = NULL; FILE *file; int lineno; + boolean_t is_parse_success = FALSE; file = fopen(file_name, "r"); if (!file) { @@ -753,6 +757,8 @@ int osm_prtn_config_parse_file(osm_log_t * p_log, osm_subn_t * p_subn, break; } + is_parse_success = TRUE; + p += len; if (q) { @@ -764,5 +770,8 @@ int osm_prtn_config_parse_file(osm_log_t * p_log, osm_subn_t * p_subn, fclose(file); - return 0; + if (is_parse_success) + return 0; + else + return -1; } -- 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
