From patchwork Fri Sep 21 14:42:04 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bart Van Assche X-Patchwork-Id: 1491831 X-Patchwork-Delegate: alexne@voltaire.com Return-Path: X-Original-To: patchwork-linux-rdma@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id 633F03FE65 for ; Fri, 21 Sep 2012 14:42:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755206Ab2IUOmS (ORCPT ); Fri, 21 Sep 2012 10:42:18 -0400 Received: from [178.239.52.149] ([178.239.52.149]:55715 "EHLO wimaserver10.be" rhost-flags-FAIL-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1754880Ab2IUOmS (ORCPT ); Fri, 21 Sep 2012 10:42:18 -0400 Received: from 178-119-64-133.access.telenet.be ([178.119.64.133] helo=[192.168.1.100]) by wimaserver10.be with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.72) (envelope-from ) id 1TF4XJ-0005q7-L6; Fri, 21 Sep 2012 16:48:57 +0200 Message-ID: <505C7CBC.3050803@acm.org> Date: Fri, 21 Sep 2012 16:42:04 +0200 From: Bart Van Assche User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120825 Thunderbird/15.0 MIME-Version: 1.0 To: Alex Netes , "linux-rdma@vger.kernel.org" Subject: [PATCH 1/4 for opensm] Add command-line option --pidfile Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org This option is necessary to control opensm from an LSB-compliant init script. Signed-off-by: Bart Van Assche --- man/opensm.8.in | 5 +++++ opensm/main.c | 26 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/man/opensm.8.in b/man/opensm.8.in index 4e61c2e..37e2eee 100644 --- a/man/opensm.8.in +++ b/man/opensm.8.in @@ -52,6 +52,7 @@ opensm \- InfiniBand subnet manager and administration (SM/SA) [\-\-cckey ] [\-y | \-\-stay_on_fatal] [\-B | \-\-daemon] +[\-J | \-\-pidfile ] [\-I | \-\-inactive] [\-\-perfmgr] [\-\-perfmgr_sweep_time_s ] @@ -403,6 +404,10 @@ By default, the SM will exit on these errors. \fB\-B\fR, \fB\-\-daemon\fR Run in daemon mode - OpenSM will run in the background. .TP +\fB\-J\fR, \fB\-\-pidfile \fR +Makes the SM write its own PID to the specified file when started in daemon +mode. +.TP \fB\-I\fR, \fB\-\-inactive\fR Start SM in inactive rather than init SM state. This option can be used in conjunction with the perfmgr so as to diff --git a/opensm/main.c b/opensm/main.c index e9a0b4c..1a061a8 100644 --- a/opensm/main.c +++ b/opensm/main.c @@ -68,6 +68,7 @@ volatile unsigned int osm_exit_flag = 0; static volatile unsigned int osm_hup_flag = 0; static volatile unsigned int osm_usr1_flag = 0; +static char *pidfile; #define MAX_LOCAL_IBPORTS 64 #define INVALID_GUID (0xFFFFFFFFFFFFFFFFULL) @@ -498,10 +499,17 @@ static ib_net64_t get_port_guid(IN osm_opensm_t * p_osm, uint64_t port_guid) return attr_array[choice].port_guid; } +static void remove_pidfile(void) +{ + if (pidfile) + unlink(pidfile); +} + static int daemonize(osm_opensm_t * osm) { pid_t pid; int fd; + FILE *f; fd = open("/dev/null", O_WRONLY); if (fd < 0) { @@ -523,6 +531,18 @@ static int daemonize(osm_opensm_t * osm) } else if (pid > 0) exit(0); + if (pidfile) { + remove_pidfile(); + f = fopen(pidfile, "w"); + if (f) { + fprintf(f, "%d\n", getpid()); + fclose(f); + } else { + perror("fopen"); + exit(1); + } + } + close(0); close(1); close(2); @@ -649,6 +669,7 @@ int main(int argc, char *argv[]) {"console-port", 1, NULL, 'C'}, #endif {"daemon", 0, NULL, 'B'}, + {"pidfile", 1, NULL, 'J'}, {"inactive", 0, NULL, 'I'}, #ifdef ENABLE_OSM_PERF_MGR {"perfmgr", 0, NULL, 1}, @@ -887,6 +908,10 @@ int main(int argc, char *argv[]) printf(" Creating new log file\n"); break; + case 'J': + pidfile = optarg; + break; + case 'P': SET_STR_OPT(opt.partition_config_file, optarg); break; @@ -1212,6 +1237,7 @@ int main(int argc, char *argv[]) Exit: osm_opensm_destroy(&osm); complib_exit(); + remove_pidfile(); exit(0); }