From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Price Date: Wed, 07 May 2014 16:15:27 +0100 Subject: [Cluster-devel] [PATCH 1/5] fsck.gfs2: Log to syslog on start and exit In-Reply-To: <536A458A.2080507@redhat.com> References: <1399473221-28521-1-git-send-email-anprice@redhat.com> <536A458A.2080507@redhat.com> Message-ID: <536A4E0F.8030408@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit On 07/05/14 15:39, Steven Whitehouse wrote: > Hi, > > On 07/05/14 15:33, Andrew Price wrote: >> In order to piece together the order in which fsck.gfs2 runs and >> gfs2_edit savemeta were done it's useful to keep a log of the command >> line options used and the fsck.gfs2 start and end times. Log these to >> syslog. >> >> Signed-off-by: Andrew Price >> --- >> gfs2/fsck/main.c | 35 +++++++++++++++++++++++++++++++++++ >> gfs2/man/fsck.gfs2.8 | 2 ++ >> 2 files changed, 37 insertions(+) >> >> diff --git a/gfs2/fsck/main.c b/gfs2/fsck/main.c >> index 346e580..0031ec0 100644 >> --- a/gfs2/fsck/main.c >> +++ b/gfs2/fsck/main.c >> @@ -12,6 +12,7 @@ >> #include >> #include >> #define _(String) gettext(String) >> +#include >> #include "copyright.cf" >> #include "libgfs2.h" >> @@ -261,6 +262,36 @@ static int fsck_pass(const struct fsck_pass *p, >> struct gfs2_sbd *sdp) >> return 0; >> } >> +static void exitlog(void) >> +{ >> + syslog(LOG_INFO, "exiting."); >> +} >> + > Would be nice if it was possible to log the exit status too here... Agreed. It's a shame the exit handlers don't take a status argument really. We're going to have to do something like extern int fsck_status; #define fsck_exit(s) exit(fsck_status = (s)) and then change all the exit() callers to make it work. There might be a lot of churn but it should be fairly mechanical so I'll whip up a patch for that shortly. >> +static void startlog(int argc, char **argv) >> +{ >> + int i; >> + char *cmd, *p; >> + size_t len; >> + >> + for (len = i = 0; i < argc; i++) >> + len += strlen(argv[i]); >> + len += argc; /* Add spaces and '\0' */ >> + >> + cmd = malloc(len); >> + if (cmd == NULL) { >> + perror(argv[0]); >> + exit(FSCK_ERROR); >> + } >> + p = cmd; >> + for (i = 0; i < argc; i++, p++) { >> + p = stpcpy(p, argv[i]); >> + *p = ' '; >> + } >> + *(--p) = '\0'; >> + syslog(LOG_INFO, "started: %s", cmd); > If you use vsyslog rather than syslog I wonder if its possible to make > this a bit neater? I've looked into it but I can't see an obvious way to do this. vsyslog would be useful if we knew how many format specifiers to use beforehand but in this case I think we're stuck with "%s". Andy