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@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
Redirect syslog to console if running in mini-OS stub domain
instead of just disabling syslog.
Signed-off-by: <alex.zeffertt@xxxxxxxxxxxxx>
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
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|