From patchwork Mon Jan 11 08:47:47 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yevgeny Kliteynik X-Patchwork-Id: 72120 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.3/8.14.2) with ESMTP id o0B8mCv6022410 for ; Mon, 11 Jan 2010 08:48:12 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752172Ab0AKIsL (ORCPT ); Mon, 11 Jan 2010 03:48:11 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752669Ab0AKIsL (ORCPT ); Mon, 11 Jan 2010 03:48:11 -0500 Received: from mail.mellanox.co.il ([194.90.237.43]:56225 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752172Ab0AKIsK (ORCPT ); Mon, 11 Jan 2010 03:48:10 -0500 Received: from Internal Mail-Server by MTLPINE1 (envelope-from kliteyn@dev.mellanox.co.il) with SMTP; 11 Jan 2010 10:48:03 +0200 Received: from [10.4.1.29] ([10.4.1.29]) by mtlexch01.mtl.com with Microsoft SMTPSVC(6.0.3790.3959); Mon, 11 Jan 2010 10:48:03 +0200 Message-ID: <4B4AE5B3.10504@dev.mellanox.co.il> Date: Mon, 11 Jan 2010 10:47:47 +0200 From: Yevgeny Kliteynik Reply-To: kliteyn@dev.mellanox.co.il User-Agent: Thunderbird 1.5.0.5 (X11/20060719) MIME-Version: 1.0 To: Sasha Khapyorsky CC: Linux RDMA Subject: [PATCH] opensm SA DB: dump only if modified X-OriginalArrivalTime: 11 Jan 2010 08:48:03.0432 (UTC) FILETIME=[C95B8E80:01CA929A] X-TM-AS-Product-Ver: SMEX-8.0.0.1181-6.000.1038-17124.005 X-TM-AS-Result: No--15.279300-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org diff --git a/opensm/include/opensm/osm_sa.h b/opensm/include/opensm/osm_sa.h index c3484f9..9229d1a 100644 --- a/opensm/include/opensm/osm_sa.h +++ b/opensm/include/opensm/osm_sa.h @@ -125,6 +125,7 @@ typedef struct osm_sa { atomic32_t sa_trans_id; osm_sa_mad_ctrl_t mad_ctrl; cl_timer_t sr_timer; + boolean_t dirty; cl_disp_reg_handle_t cpi_disp_h; cl_disp_reg_handle_t nr_disp_h; cl_disp_reg_handle_t pir_disp_h; @@ -178,6 +179,10 @@ typedef struct osm_sa { * mad_ctrl * Mad Controller * +* dirty +* A flag that denotes that SA DB is dirty and needs +* to be written to the dump file (if dumping is enabled) +* * SEE ALSO * SM object *********/ diff --git a/opensm/opensm/osm_inform.c b/opensm/opensm/osm_inform.c index acbaf38..8108213 100644 --- a/opensm/opensm/osm_inform.c +++ b/opensm/opensm/osm_inform.c @@ -248,6 +248,7 @@ void osm_infr_insert_to_db(IN osm_subn_t * p_subn, IN osm_log_t * p_log, #endif cl_qlist_insert_head(&p_subn->sa_infr_list, &p_infr->list_item); + p_subn->p_osm->sa.dirty = TRUE; OSM_LOG(p_log, OSM_LOG_DEBUG, "Dump after insertion (size %d)\n", cl_qlist_count(&p_subn->sa_infr_list)); @@ -271,6 +272,7 @@ void osm_infr_remove_from_db(IN osm_subn_t * p_subn, IN osm_log_t * p_log, OSM_LOG_DEBUG); cl_qlist_remove_item(&p_subn->sa_infr_list, &p_infr->list_item); + p_subn->p_osm->sa.dirty = TRUE; osm_infr_delete(p_infr); diff --git a/opensm/opensm/osm_multicast.c b/opensm/opensm/osm_multicast.c index 89f4b28..843b6ce 100644 --- a/opensm/opensm/osm_multicast.c +++ b/opensm/opensm/osm_multicast.c @@ -243,6 +243,7 @@ osm_mcm_port_t *osm_mgrp_add_port(IN osm_subn_t * subn, osm_log_t * log, ++mgrp->full_members == 1) mgrp_send_notice(subn, log, mgrp, 66); + subn->p_osm->sa.dirty = TRUE; return mcm_port; } @@ -297,6 +298,8 @@ void osm_mgrp_remove_port(osm_subn_t * subn, osm_log_t * log, osm_mgrp_t * mgrp, mgrp_send_notice(subn, log, mgrp, 67); osm_mgrp_cleanup(subn, mgrp); } + + subn->p_osm->sa.dirty = TRUE; } void osm_mgrp_delete_port(osm_subn_t * subn, osm_log_t * log, osm_mgrp_t * mgrp, diff --git a/opensm/opensm/osm_sa.c b/opensm/opensm/osm_sa.c index 6fbea8d..0d203ad 100644 --- a/opensm/opensm/osm_sa.c +++ b/opensm/opensm/osm_sa.c @@ -704,7 +704,13 @@ static void sa_dump_all_sa(osm_opensm_t * p_osm, FILE * file) int osm_sa_db_file_dump(osm_opensm_t * p_osm) { - return opensm_dump_to_file(p_osm, "opensm-sa.dump", sa_dump_all_sa); + int res = 0; + if (p_osm->sa.dirty) { + res = opensm_dump_to_file( + p_osm, "opensm-sa.dump", sa_dump_all_sa); + p_osm->sa.dirty = FALSE; + } + return res; } /* @@ -1110,6 +1116,9 @@ int osm_sa_db_file_load(osm_opensm_t * p_osm) if (rereg_clients) p_osm->subn.opt.no_clients_rereg = FALSE; + /* We've just finished loading SA DB file - clear the "dirty" flag */ + p_osm->sa.dirty = FALSE; + _error: fclose(file); return ret; diff --git a/opensm/opensm/osm_service.c b/opensm/opensm/osm_service.c index ceb8aad..91715e6 100644 --- a/opensm/opensm/osm_service.c +++ b/opensm/opensm/osm_service.c @@ -46,6 +46,7 @@ #include #include #include +#include void osm_svcr_delete(IN osm_svcr_t * p_svcr) { @@ -122,6 +123,7 @@ void osm_svcr_insert_to_db(IN osm_subn_t * p_subn, IN osm_log_t * p_log, "Inserting new Service Record into Database\n"); cl_qlist_insert_head(&p_subn->sa_sr_list, &p_svcr->list_item); + p_subn->p_osm->sa.dirty = TRUE; OSM_LOG_EXIT(p_log); } @@ -137,6 +139,7 @@ void osm_svcr_remove_from_db(IN osm_subn_t * p_subn, IN osm_log_t * p_log, p_svcr->service_record.service_id); cl_qlist_remove_item(&p_subn->sa_sr_list, &p_svcr->list_item); + p_subn->p_osm->sa.dirty = TRUE; OSM_LOG_EXIT(p_log); }