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
next 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox