From 9e6079e573ebcd55bc15b11e1b7178eb84472e6f Mon Sep 17 00:00:00 2001 From: Utz-Uwe Haus <uhaus@hpe.com> Date: Wed, 17 Aug 2022 13:15:02 +0300 Subject: [PATCH] Fix mstro_endpoint_describe straddr value This function was only sometimes returning the proper string value of the endpoint address. On CXI this made reading addresses impossible; on others if should have been confusing for a long time --- maestro/ofi.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/maestro/ofi.c b/maestro/ofi.c index 07ba3306..1ab77361 100644 --- a/maestro/ofi.c +++ b/maestro/ofi.c @@ -1211,25 +1211,28 @@ mstro_endpoint_describe(const struct mstro_endpoint *ep) char strbuf[EP_DESC_BUF_MAX]; char addrbuf[EP_DESC_BUF_MAX]; - ep_name_buf[0]='\0'; + strncpy(ep_name_buf, "(unprintable)", EP_DESC_BUF_MAX); - size=0; - ret = fi_getname(&ep->ep->fid,NULL,&size); - if(ret!=-FI_ETOOSMALL) { + /* first: fetch address */ + size=EP_DESC_BUF_MAX; + ret = fi_getname(&ep->ep->fid,addrbuf,&size); + DEBUG("addrbuf len %zu, ret %d\n", size, ret); + if(ret<0 && ret!=-FI_ETOOSMALL) { ERR("fi_getname in EP describe failed: %d (%s)\n", ret, fi_strerror(-ret)); goto DONE; } - assert(size<EP_DESC_BUF_MAX); - fi_getname(&ep->ep->fid,addrbuf,&size); - + + /* now translate to string */ + size = EP_DESC_BUF_MAX; + /* may truncate but will 0-terminate the strbuf */ fi_av_straddr(ep->av, addrbuf, strbuf, &size); - assert(size<EP_DESC_BUF_MAX); + DEBUG("strbuf len %zu, val %s\n", size, strbuf); size=snprintf(ep_name_buf, EP_DESC_BUF_MAX, "OFI EP prov %s name %s straddr %s", ep->fi->fabric_attr->prov_name, ep->fi->fabric_attr->name, strbuf); - assert(size<1024); + assert(size<EP_DESC_BUF_MAX); DONE: return ep_name_buf; } -- GitLab