From patchwork Tue Sep 11 14:20:25 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: 1438311 X-Patchwork-Delegate: alexne@voltaire.com Return-Path: X-Original-To: patchwork-linux-rdma@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id D8C74DFAF3 for ; Tue, 11 Sep 2012 14:20:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754464Ab2IKOU1 (ORCPT ); Tue, 11 Sep 2012 10:20:27 -0400 Received: from juliette.telenet-ops.be ([195.130.137.74]:42557 "EHLO juliette.telenet-ops.be" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751630Ab2IKOU0 (ORCPT ); Tue, 11 Sep 2012 10:20:26 -0400 Received: from [192.168.1.101] ([178.119.64.133]) by juliette.telenet-ops.be with bizsmtp id xqLR1j00L2sVyXE06qLRiW; Tue, 11 Sep 2012 16:20:25 +0200 Message-ID: <504F48A9.3030802@acm.org> Date: Tue, 11 Sep 2012 16:20:25 +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: "linux-rdma@vger.kernel.org" CC: Alex Netes Subject: [PATCH 5/6] opensm: Add command-line option --pidfile X-Enigmail-Version: 1.4.4 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 --- opensm/main.c | 26 ++++++++++++++++++++++++++ 1 files changed, 26 insertions(+), 0 deletions(-) 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); }