[ofa-general] [PATCH] opensm/osm_sa_mcmember_record: improve __cleanup_mgrp()
Sasha Khapyorsky
sashak at voltaire.com
Sat Dec 13 12:38:52 PST 2008
Improve __cleanup_mgrp() function it is called from context where mgrp
pointer is known and additional by mlid resolving is not needed.
Signed-off-by: Sasha Khapyorsky <sashak at voltaire.com>
---
opensm/opensm/osm_sa_mcmember_record.c | 26 ++++++++++----------------
1 files changed, 10 insertions(+), 16 deletions(-)
diff --git a/opensm/opensm/osm_sa_mcmember_record.c b/opensm/opensm/osm_sa_mcmember_record.c
index 99aee1b..4561808 100644
--- a/opensm/opensm/osm_sa_mcmember_record.c
+++ b/opensm/opensm/osm_sa_mcmember_record.c
@@ -142,16 +142,13 @@ static ib_net16_t __get_new_mlid(osm_sa_t *sa, ib_net16_t requested_mlid)
we silently drop it. Since it was an intermediate group no need to
re-route it.
**********************************************************************/
-static void __cleanup_mgrp(IN osm_sa_t * sa, IN ib_net16_t const mlid)
+static void __cleanup_mgrp(IN osm_sa_t * sa, osm_mgrp_t *mgrp)
{
- osm_mgrp_t *p_mgrp = osm_get_mgrp_by_mlid(sa->p_subn, mlid);
-
/* Remove MGRP only if osm_mcm_port_t count is 0 and
not a well known group */
- if (p_mgrp && cl_is_qmap_empty(&p_mgrp->mcm_port_tbl) &&
- p_mgrp->well_known == FALSE) {
- sa->p_subn->mgroups[cl_ntoh16(mlid) - IB_LID_MCAST_START_HO] = NULL;
- osm_mgrp_delete(p_mgrp);
+ if (cl_is_qmap_empty(&mgrp->mcm_port_tbl) && !mgrp->well_known) {
+ sa->p_subn->mgroups[cl_ntoh16(mgrp->mlid) - IB_LID_MCAST_START_HO] = NULL;
+ osm_mgrp_delete(mgrp);
}
}
@@ -1273,7 +1270,7 @@ __osm_mcmr_rcv_join_mgrp(IN osm_sa_t * sa, IN osm_madw_t * const p_madw)
|| !__validate_port_caps(sa->p_log, p_mgrp, p_physp)
|| !(join_state != 0)) {
/* since we might have created the new group we need to cleanup */
- __cleanup_mgrp(sa, mlid);
+ __cleanup_mgrp(sa, p_mgrp);
CL_PLOCK_RELEASE(sa->p_lock);
@@ -1312,7 +1309,7 @@ __osm_mcmr_rcv_join_mgrp(IN osm_sa_t * sa, IN osm_madw_t * const p_madw)
if (status != IB_SUCCESS) {
/* we fail to add the port so we might need to delete the group */
- __cleanup_mgrp(sa, mlid);
+ __cleanup_mgrp(sa, p_mgrp);
CL_PLOCK_RELEASE(sa->p_lock);
@@ -1345,13 +1342,10 @@ __osm_mcmr_rcv_join_mgrp(IN osm_sa_t * sa, IN osm_madw_t * const p_madw)
CL_PLOCK_EXCL_ACQUIRE(sa->p_lock);
/* the request for routing failed so we need to remove the port */
- p_mgrp = osm_get_mgrp_by_mlid(sa->p_subn, mlid);
- if (p_mgrp != NULL) {
- osm_mgrp_delete_port(sa->p_subn, sa->p_log, p_mgrp,
- p_recvd_mcmember_rec->port_gid.
- unicast.interface_id);
- __cleanup_mgrp(sa, mlid);
- }
+ osm_mgrp_delete_port(sa->p_subn, sa->p_log, p_mgrp,
+ p_recvd_mcmember_rec->port_gid.
+ unicast.interface_id);
+ __cleanup_mgrp(sa, p_mgrp);
CL_PLOCK_RELEASE(sa->p_lock);
osm_sa_send_error(sa, p_madw, IB_SA_MAD_STATUS_NO_RESOURCES);
goto Exit;
--
1.6.0.4.766.g6fc4a
More information about the general
mailing list