All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alex Netes <alexne-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
To: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Aleksey Senin <alekseys-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Subject: [PATCH] opensm: Add support for PID file
Date: Sun, 10 Jul 2011 15:04:42 +0300	[thread overview]
Message-ID: <20110710120442.GA11284@localhost.localdomain> (raw)

When OpenSM executed, opensm.pid created by default in /var/run
and contains PID of the last executed instance of OpenSM.
opensm.pid is used by opensm.init stop, to kill only the last
executed instance of OpenSM.

Signed-off-by: Aleksey Senin <alekseys-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Signed-off-by: Alex Netes <alexne-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
---
 configure.in                |   25 +++++++++++++++++++++++++
 include/opensm/osm_base.h   |   18 ++++++++++++++++++
 include/opensm/osm_subnet.h |    1 +
 man/opensm.8.in             |    5 +++++
 opensm/main.c               |   16 ++++++++++++++++
 opensm/osm_subnet.c         |    2 ++
 scripts/opensm.init.in      |    5 ++++-
 7 files changed, 71 insertions(+), 1 deletions(-)

diff --git a/configure.in b/configure.in
index 7c5eb65..c6f5d53 100644
--- a/configure.in
+++ b/configure.in
@@ -231,6 +231,31 @@ dnl Checks for headers and libraries
 OPENIB_APP_OSMV_CHECK_HEADER
 OPENIB_APP_OSMV_CHECK_LIB
 
+dnl Where to place opensm.pid
+piddir=/var/run
+dnl make sure the directory exists
+if test ! -d $piddir ; then
+	piddir=`eval echo ${sysconfdir}`
+	case $piddir in
+		NONE/*) piddir=`echo $piddir | sed "s~NONE~$ac_default_prefix~"` ;;
+	esac
+fi
+
+AC_ARG_WITH(pid-dir,
+	[  --with-pid-dir=<dir>    define the dir of opensm.pid file (default is /var/run)],
+	[
+		if test -n "$withval"  &&  test "x$withval" != "xno"  &&  \
+		    test "x${withval}" != "xyes"; then
+			piddir=$withval
+			if test ! -d $piddir ; then
+			AC_MSG_WARN([** no $piddir directory on this system **])
+			fi
+		fi
+	]
+)
+AC_DEFINE_UNQUOTED(OPENSM_PID_DIR, "$piddir", [Specify location of opensm.pid])
+AC_SUBST(piddir)
+
 AC_CONFIG_FILES([man/opensm.8 man/torus-2QoS.8 man/torus-2QoS.conf.5 scripts/opensm.init scripts/redhat-opensm.init scripts/sldd.sh])
 
 dnl Create the following Makefiles
diff --git a/include/opensm/osm_base.h b/include/opensm/osm_base.h
index c1a52b5..13bfbb0 100644
--- a/include/opensm/osm_base.h
+++ b/include/opensm/osm_base.h
@@ -318,6 +318,24 @@ BEGIN_C_DECLS
 #endif
 /***********/
 
+/****d* OpenSM: Base/OSM_DEFAULT_PID_FILE
+* NAME
+*	OSM_DEFAULT_PID_FILE
+*
+* DESCRIPTION
+*	Specifies the default pid file name
+*
+* SYNOPSIS
+*/
+#if defined(HAVE_DEFAULT_PID_FILE)
+#define OSM_DEFAULT_PID_FILE HAVE_DEFAULT_PID_FILE
+#elif defined(OPENSM_PID_DIR)
+#define OSM_DEFAULT_PID_FILE OPENSM_PID_DIR "/opensm.pid"
+#else
+#define OSM_DEFAULT_PID_FILE "/var/run/opensm.pid"
+#endif
+/***********/
+
 /****d* OpenSM: Base/OSM_DEFAULT_SWEEP_INTERVAL_SECS
 * NAME
 *	OSM_DEFAULT_SWEEP_INTERVAL_SECS
diff --git a/include/opensm/osm_subnet.h b/include/opensm/osm_subnet.h
index 6d17c31..9bbbd2f 100644
--- a/include/opensm/osm_subnet.h
+++ b/include/opensm/osm_subnet.h
@@ -208,6 +208,7 @@ typedef struct osm_subn_opt {
 	char *sa_db_file;
 	boolean_t sa_db_dump;
 	char *torus_conf_file;
+	char *pid_file;
 	boolean_t do_mesh_analysis;
 	boolean_t exit_on_fatal;
 	boolean_t honor_guid2lid_file;
diff --git a/man/opensm.8.in b/man/opensm.8.in
index f360739..76096c0 100644
--- a/man/opensm.8.in
+++ b/man/opensm.8.in
@@ -55,6 +55,7 @@ opensm \- InfiniBand subnet manager and administration (SM/SA)
 [\-\-consolidate_ipv6_snm_req]
 [\-\-log_prefix <prefix text>]
 [\-\-torus_config <path to file>]
+[\-\-pid_file <path to file>]
 [\-v(erbose)] [\-V] [\-D <flags>] [\-d(ebug) <number>]
 [\-h(elp)] [\-?]
 
@@ -407,6 +408,10 @@ This option defines the file name for the extra configuration
 information needed for the torus-2QoS routing engine.   The default
 name is \fB\%@OPENSM_CONFIG_DIR@/@TORUS2QOS_CONF_FILE@\fP
 .TP
+\fB\-\-pid_file\fR <path to pid file>
+Specifies the file that contains the process ID of the opensm daemon.
+The default is \fB/var/run/opensm.pid\fP
+.TP
 \fB\-v\fR, \fB\-\-verbose\fR
 This option increases the log verbosity level.
 The -v option may be specified multiple times
diff --git a/opensm/main.c b/opensm/main.c
index 798cb20..30594bf 100644
--- a/opensm/main.c
+++ b/opensm/main.c
@@ -347,6 +347,9 @@ static void show_usage(void)
 	printf("--consolidate_ipv6_snm_req\n"
 	       "          Use shared MLID for IPv6 Solicited Node Multicast groups\n"
 	       "          per MGID scope and P_Key.\n\n");
+	printf("--pid_file <path to file>\n"
+	       "          Specifies the file that contains the process ID of the\n"
+	       "          opensm daemon.The default is /var/run/opensm.pid\n");
 	printf("--log_prefix <prefix text>\n"
 	       "          Prefix to syslog messages from OpenSM.\n\n");
 	printf("--verbose, -v\n"
@@ -638,6 +641,7 @@ int main(int argc, char *argv[])
 		{"retries", 1, NULL, 8},
 		{"log_prefix", 1, NULL, 9},
 		{"torus_config", 1, NULL, 10},
+		{"pid_file", 1, NULL, 15},
 		{NULL, 0, NULL, 0}	/* Required at the end of the array */
 	};
 
@@ -1047,6 +1051,9 @@ int main(int argc, char *argv[])
 			SET_STR_OPT(opt.torus_conf_file, optarg);
 			printf("Torus-2QoS config file = %s\n", opt.torus_conf_file);
 			break;
+		case 15:
+			SET_STR_OPT(opt.pid_file, optarg);
+			break;
 		case 'h':
 		case '?':
 		case ':':
@@ -1116,6 +1123,14 @@ int main(int argc, char *argv[])
 
 	setup_signals();
 
+	FILE *f = fopen(opt.pid_file, "w");
+	if (f == NULL)
+		printf("Couldn't create pid file \"%s\"\n", opt.pid_file);
+	else {
+		fprintf(f, "%ld\n", (long) getpid());
+		fclose(f);
+	}
+
 	osm_opensm_sweep(&osm);
 
 	if (run_once_flag == TRUE) {
@@ -1147,6 +1162,7 @@ int main(int argc, char *argv[])
 	}
 
 Exit:
+	unlink(opt.pid_file);
 	osm_opensm_destroy(&osm);
 	complib_exit();
 
diff --git a/opensm/osm_subnet.c b/opensm/osm_subnet.c
index 0b79d3a..3de622e 100644
--- a/opensm/osm_subnet.c
+++ b/opensm/osm_subnet.c
@@ -404,6 +404,7 @@ static const opt_rec_t opt_tbl[] = {
 	{ "no_clients_rereg", OPT_OFFSET(no_clients_rereg), opts_parse_boolean, NULL, 1 },
 	{ "prefix_routes_file", OPT_OFFSET(prefix_routes_file), opts_parse_charp, NULL, 0 },
 	{ "consolidate_ipv6_snm_req", OPT_OFFSET(consolidate_ipv6_snm_req), opts_parse_boolean, NULL, 1 },
+	{ "pid_file", OPT_OFFSET(pid_file), opts_parse_charp, NULL, 0},
 	{ "lash_start_vl", OPT_OFFSET(lash_start_vl), opts_parse_uint8, NULL, 1 },
 	{ "sm_sl", OPT_OFFSET(sm_sl), opts_parse_uint8, NULL, 1 },
 	{ "log_prefix", OPT_OFFSET(log_prefix), opts_parse_charp, NULL, 1 },
@@ -791,6 +792,7 @@ void osm_subn_set_default_opt(IN osm_subn_opt_t * p_opt)
 	p_opt->no_clients_rereg = FALSE;
 	p_opt->prefix_routes_file = strdup(OSM_DEFAULT_PREFIX_ROUTES_FILE);
 	p_opt->consolidate_ipv6_snm_req = FALSE;
+	p_opt->pid_file = strdup(OSM_DEFAULT_PID_FILE);
 	p_opt->lash_start_vl = 0;
 	p_opt->sm_sl = OSM_DEFAULT_SL;
 	p_opt->log_prefix = NULL;
diff --git a/scripts/opensm.init.in b/scripts/opensm.init.in
index 0c84bd3..f8bbfb1 100644
--- a/scripts/opensm.init.in
+++ b/scripts/opensm.init.in
@@ -42,6 +42,9 @@
 
 prefix=@prefix@
 exec_prefix=@exec_prefix@
+piddir=@piddir@
+
+PIDFILE=${piddir}/opensm.pid
 
 # Source function library.
 if [[ -s /etc/init.d/functions ]]; then
@@ -74,7 +77,7 @@ start () {
 
 stop () {
     echo -n "Shutting down opensm: "
-    killproc opensm
+    killproc -p $PIDFILE opensm
     if [[ $RETVAL -eq 0 ]]; then
         rm -f /var/lock/subsys/opensm
         success
-- 
1.7.6

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

             reply	other threads:[~2011-07-10 12:04 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-10 12:04 Alex Netes [this message]
     [not found] ` <20110710120442.GA11284-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2011-07-12 23:27   ` [PATCH] opensm: Add support for PID file Ira Weiny
     [not found]     ` <20110712162740.29e2d7d1.weiny2-i2BcT+NCU+M@public.gmane.org>
2011-07-12 23:52       ` Jason Gunthorpe
     [not found]         ` <20110712235222.GG10216-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2011-07-12 23:58           ` Ira Weiny
     [not found]             ` <20110712165817.16076a3d.weiny2-i2BcT+NCU+M@public.gmane.org>
2011-07-13  4:14               ` Jason Gunthorpe
     [not found]                 ` <20110713041441.GA26663-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2011-07-13  8:26                   ` Alex Netes
     [not found]                     ` <20110713082640.GA2024-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2011-07-13 16:48                       ` Jason Gunthorpe
2011-07-14  0:40                       ` Roland Dreier
     [not found]                         ` <CAL1RGDVXJd7Sq0-CcYR6heN_HCsrmc1CtrkKfxLWxYe3WN=ghA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-07-14 16:10                           ` Jason Gunthorpe
     [not found]                             ` <20110714161056.GB4502-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2011-07-14 16:21                               ` Ira Weiny
     [not found]                                 ` <20110714092129.b29a7ca0.weiny2-i2BcT+NCU+M@public.gmane.org>
2011-07-26 12:57                                   ` Alex Netes

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110710120442.GA11284@localhost.localdomain \
    --to=alexne-vpraknaxozvwk0htik3j/w@public.gmane.org \
    --cc=alekseys-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.