When an SM assigned guid is rerequested and one has already been assigned
at that index for that port, allow this and return the guid in the proper
index in the SA response rather than indicating ERR 5108 due to duplicate.

Signed-off-by: Hal Rosenstock <[email protected]>
---
diff --git a/opensm/osm_sa_guidinfo_record.c b/opensm/osm_sa_guidinfo_record.c
index a1bb166..e363e81 100644
--- a/opensm/osm_sa_guidinfo_record.c
+++ b/opensm/osm_sa_guidinfo_record.c
@@ -537,7 +537,28 @@ static void set_guidinfo(IN osm_sa_t *sa, IN osm_madw_t 
*p_madw,
                                set_alias_guid = 
p_assigned_guids->assigned_guid[i];
                                if (set_alias_guid) {
                                        p_rcvd_rec->guid_info.guid[i % 8] = 
set_alias_guid;
-                                       goto add_alias_guid;
+                                       p_item = 
cl_qmap_get(&sa->sm->p_subn->alias_port_guid_tbl,
+                                                            set_alias_guid);
+                                       if (p_item == 
cl_qmap_end(&sa->sm->p_subn->alias_port_guid_tbl))
+                                               goto add_alias_guid;
+                                       else {
+                                               p_alias_guid = 
(osm_alias_guid_t *) p_item;
+                                               if (p_alias_guid->p_base_port 
!= p_port) {
+                                                       OSM_LOG(sa->p_log,
+                                                               OSM_LOG_ERROR,
+                                                               "ERR 5110: "
+                                                               " Assigned 
alias port GUID 0x%" PRIx64
+                                                               " index %d base 
port GUID 0x%" PRIx64
+                                                               " now attempted 
on port GUID 0x%" PRIx64
+                                                               "\n",
+                                                               
cl_ntoh64(p_alias_guid->alias_guid), i,
+                                                               
cl_ntoh64(p_alias_guid->p_base_port->guid),
+                                                               
cl_ntoh64(p_port->guid));
+                                                       /* clear response guid 
at index to indicate duplicate */
+                                                       
p_rcvd_rec->guid_info.guid[i % 8] = 0;
+                                               }
+                                               continue;
+                                       }
                                }
                        }
                }
-- 
1.7.6.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

Reply via email to