From: Alex Zeffertt <alex.zeffertt@eu.citrix.com>
To: Alex Zeffertt <alex.zeffertt@eu.citrix.com>
Cc: "xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>
Subject: Re: [PATCH 0/24] [xen-unstable.hg] support for xenstore stubdom
Date: Wed, 10 Jun 2009 16:29:15 +0100 [thread overview]
Message-ID: <4A2FD14B.2030601@eu.citrix.com> (raw)
In-Reply-To: <49C7A8B0.6000808@eu.citrix.com>
[-- Attachment #1: Type: text/plain, Size: 1091 bytes --]
Hi,
I'd like to append a 25th patch to this patchqueue.
The attached patch causes all syslog to be redirected to the console when
xenstore is running in a mini-OS stubdomain. The console messages can be viewed
using xenconsole_dump, or with "/etc/init.d/xenstored console" which just calls
xenconsole_dump with the appropriate parameters.
Without this patch all syslog messages are just lost when running in a stubdomain.
Regards,
Alex
Alex Zeffertt wrote:
> These are the xen/ tools/ and stubdom/ patches that enable the option of
> starting xenstored in a seperate stub domain.
>
> Applying these patches does not change the behaviour unless 'STUBDOM=yes' is
> written into /etc/sysconfig/xenstore. If you do this then you need to also
> apply the previous set of patches to the linux-2.6.18-xen kernel and reboot.
>
> Please consider these patches for application into xen-unstable.
>
> Regards,
>
> Alex Zeffertt
>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
>
[-- Attachment #2: xenstore-stubdom-logging-enable --]
[-- Type: text/plain, Size: 7330 bytes --]
Redirect syslog to console if running in mini-OS stub domain
instead of just disabling syslog.
Signed-off-by: <alex.zeffertt@eu.citrix.com>
diff -r 64e700f5429a tools/xenstore/Makefile
--- a/tools/xenstore/Makefile Wed May 06 15:16:53 2009 +0100
+++ b/tools/xenstore/Makefile Thu May 07 10:46:48 2009 +0100
@@ -27,7 +27,7 @@
endif
ifdef CONFIG_STUBDOM
-CFLAGS += -DNO_SOCKETS=1 -DNO_LOCAL_XENBUS=1 -DNO_SYSLOG=1 -DNO_REOPEN_LOG=1
+CFLAGS += -DNO_SOCKETS=1 -DNO_LOCAL_XENBUS=1 -DNO_TRACEFILE=1
endif
ALL_TARGETS = libxenstore.so libxenstore.a clients xs_tdb_dump
diff -r 64e700f5429a tools/xenstore/xenstored_core.c
--- a/tools/xenstore/xenstored_core.c Wed May 06 15:16:53 2009 +0100
+++ b/tools/xenstore/xenstored_core.c Thu May 07 10:46:48 2009 +0100
@@ -32,8 +32,8 @@
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
-#ifndef NO_SYSLOG
-#include <syslog.h>
+#ifndef __MINIOS__
+# include <syslog.h>
#endif
#include <string.h>
#include <errno.h>
@@ -64,32 +64,31 @@
static bool verbose = false;
LIST_HEAD(connections);
-static int tracefd = -1;
static bool recovery = true;
static bool remove_local = true;
-#ifndef NO_REOPEN_LOG
-static int reopen_log_pipe[2];
+#ifndef NO_TRACEFILE
+static int reopen_tracefile_pipe[2];
+static char *tracefile = NULL;
+static int tracefd = -1;
#endif
-static char *tracefile = NULL;
static TDB_CONTEXT *tdb_ctx;
static void corrupt(struct connection *conn, const char *fmt, ...);
static void check_store(void);
#ifdef __MINIOS__
-#define lockf(...) (-ENOSYS)
-#endif
-
-#ifdef NO_SYSLOG
-#define openlog(...) ((void) 0)
-#define syslog(...) ((void) 0)
+# define log_init() do {} while(0)
+# define __log(s) printf("%s\n", s);
+#else
+# define log_init() openlog("xenstored", 0, LOG_DAEMON)
+# define __log(s) syslog(LOG_ERR, "%s", s);
#endif
#define log(...) \
do { \
char *s = talloc_asprintf(NULL, __VA_ARGS__); \
trace("%s\n", s); \
- syslog(LOG_ERR, "%s", s); \
+ __log(s) \
talloc_free(s); \
} while (0)
@@ -146,6 +145,15 @@
}
}
+#ifdef NO_TRACEFILE
+void trace(const char *fmt, ...) {}
+static void trace_io(const struct connection *conn,
+ const struct buffered_data *data,
+ int out) {}
+void trace_create(const void *data, const char *type) {}
+void trace_destroy(const void *data, const char *type) {}
+
+#else
void trace(const char *fmt, ...)
{
va_list arglist;
@@ -213,21 +221,20 @@
trace("DESTROY %s %p\n", type, data);
}
-#ifndef NO_REOPEN_LOG
/**
* Signal handler for SIGHUP, which requests that the trace log is reopened
- * (in the main loop). A single byte is written to reopen_log_pipe, to awaken
+ * (in the main loop). A single byte is written to reopen_tracefile_pipe, to awaken
* the select() in the main loop.
*/
-static void trigger_reopen_log(int signal __attribute__((unused)))
+static void trigger_reopen_tracefile(int signal __attribute__((unused)))
{
char c = 'A';
int dummy;
- dummy = write(reopen_log_pipe[1], &c, 1);
+ dummy = write(reopen_tracefile_pipe[1], &c, 1);
}
-static void reopen_log(void)
+static void reopen_tracefile(void)
{
if (tracefile) {
if (tracefd > 0)
@@ -241,7 +248,7 @@
trace("\n***\n");
}
}
-#endif
+#endif /* NO_TRACEFILE */
static bool write_messages(struct connection *conn)
{
@@ -348,8 +355,8 @@
set_fd(sock, inset, &max);
set_fd(ro_sock, inset, &max);
#endif
-#ifndef NO_REOPEN_LOG
- set_fd(reopen_log_pipe[0], inset, &max);
+#ifndef NO_TRACEFILE
+ set_fd(reopen_tracefile_pipe[0], inset, &max);
#endif
if (xce_handle != -1)
@@ -1313,8 +1320,7 @@
return;
if (in->hdr.msg.len > XENSTORE_PAYLOAD_MAX) {
- syslog(LOG_ERR, "Client tried to feed us %i",
- in->hdr.msg.len);
+ log("Client tried to feed us %i", in->hdr.msg.len);
goto bad_client;
}
@@ -1694,7 +1700,7 @@
check_store();
}
-
+#ifndef __MINIOS__
static void write_pidfile(const char *pidfile)
{
char buf[100];
@@ -1713,6 +1719,7 @@
if (write(fd, buf, len) != len)
barf_perror("Writing pid file %s", pidfile);
}
+#endif
/* Stevens. */
static void daemonize(void)
@@ -1769,15 +1776,19 @@
}
-static struct option options[] = {
+static struct option options_long[] = {
{ "no-domain-init", 0, NULL, 'D' },
{ "entry-nb", 1, NULL, 'E' },
+#ifndef __MINIOS__
{ "pid-file", 1, NULL, 'F' },
+#endif
{ "help", 0, NULL, 'H' },
{ "no-fork", 0, NULL, 'N' },
{ "output-pid", 0, NULL, 'P' },
{ "entry-size", 1, NULL, 'S' },
+#ifndef NO_TRACEFILE
{ "trace-file", 1, NULL, 'T' },
+#endif
{ "transaction", 1, NULL, 't' },
{ "no-recovery", 0, NULL, 'R' },
{ "preserve-local", 0, NULL, 'L' },
@@ -1788,6 +1799,16 @@
{ "dom0-port", 1, NULL, 'z' },
{ NULL, 0, NULL, 0 } };
+static const char *options_short = "DE:HNPS:t:RLVW:"
+#ifndef NO_TRACEFILE
+ "T:"
+#endif
+#ifndef __MINIOS__
+ "F:"
+#endif
+ ;
+
+
extern void dump_conn(struct connection *conn);
int main(int argc, char *argv[])
@@ -1801,14 +1822,16 @@
bool dofork = true;
bool outputpid = false;
bool no_domain_init = false;
+#ifndef __MINIOS__
const char *pidfile = NULL;
+#endif
int evtchn_fd = -1;
struct timeval *timeout;
sleep(5);
fprintf(stderr, "xenstored_core.c:main()\n");
- while ((opt = getopt_long(argc, argv, "DE:F:HNPS:t:T:RLVW:", options,
+ while ((opt = getopt_long(argc, argv, options_short, options_long,
NULL)) != -1) {
switch (opt) {
case 'D':
@@ -1817,9 +1840,11 @@
case 'E':
quota_nb_entry_per_domain = strtol(optarg, NULL, 10);
break;
+#ifndef __MINIOS__
case 'F':
pidfile = optarg;
break;
+#endif
case 'H':
usage();
return 0;
@@ -1841,9 +1866,11 @@
case 't':
quota_max_transaction = strtol(optarg, NULL, 10);
break;
+#ifndef NO_TRACEFILE
case 'T':
tracefile = optarg;
break;
+#endif
case 'V':
verbose = true;
break;
@@ -1864,8 +1891,8 @@
if (optind != argc)
barf("%s: No arguments desired", argv[0]);
-#ifndef NO_REOPEN_LOG
- reopen_log();
+#ifndef NO_TRACEFILE
+ reopen_tracefile();
#endif
#ifndef __MINIOS__
@@ -1886,12 +1913,13 @@
#endif
if (dofork) {
- openlog("xenstored", 0, LOG_DAEMON);
+ log_init();
daemonize();
}
+#ifndef __MINIOS__
if (pidfile)
write_pidfile(pidfile);
-
+#endif
/* Talloc leak reports go to stderr, which is closed if we fork. */
if (!dofork)
talloc_enable_leak_report_full();
@@ -1935,8 +1963,8 @@
barf_perror("Could not listen on sockets");
#endif
-#ifndef NO_REOPEN_LOG
- if (pipe(reopen_log_pipe)) {
+#ifndef NO_TRACEFILE
+ if (pipe(reopen_tracefile_pipe)) {
barf_perror("pipe");
}
#endif
@@ -1968,8 +1996,8 @@
xprintf = trace;
}
-#ifndef NO_REOPEN_LOG
- signal(SIGHUP, trigger_reopen_log);
+#ifndef NO_TRACEFILE
+ signal(SIGHUP, trigger_reopen_tracefile);
#endif
if (xce_handle != -1)
@@ -1997,12 +2025,12 @@
barf_perror("Select failed");
}
-#ifndef NO_REOPEN_LOG
- if (FD_ISSET(reopen_log_pipe[0], &inset)) {
+#ifndef NO_TRACEFILE
+ if (FD_ISSET(reopen_tracefile_pipe[0], &inset)) {
char c;
- if (read(reopen_log_pipe[0], &c, 1) != 1)
+ if (read(reopen_tracefile_pipe[0], &c, 1) != 1)
barf_perror("read failed");
- reopen_log();
+ reopen_tracefile();
}
#endif
[-- Attachment #3: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
prev parent reply other threads:[~2009-06-10 15:29 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-23 15:20 [PATCH 0/24] [xen-unstable.hg] support for xenstore stubdom Alex Zeffertt
2009-06-10 15:29 ` Alex Zeffertt [this message]
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=4A2FD14B.2030601@eu.citrix.com \
--to=alex.zeffertt@eu.citrix.com \
--cc=xen-devel@lists.xensource.com \
/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.