[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v4 5/6] xenstore: make memory report available via XS_CONTROL
Add a XS_CONTROL command to xenstored for doing a talloc report to a file. Right now this is supported by specifying a command line option when starting xenstored and sending a signal to the daemon to trigger the report. To dump the report to the standard log file call: xenstore-control memreport To dump the report to a new file call: xenstore-control memreport <file> Signed-off-by: Juergen Gross <jgross@xxxxxxxx> Reviewed-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- tools/xenstore/xenstored_control.c | 40 ++++++++++++++++++++++++++++++++++++++ tools/xenstore/xenstored_core.c | 2 +- tools/xenstore/xenstored_core.h | 1 + 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/tools/xenstore/xenstored_control.c b/tools/xenstore/xenstored_control.c index c3587ad..7c14911 100644 --- a/tools/xenstore/xenstored_control.c +++ b/tools/xenstore/xenstored_control.c @@ -76,6 +76,45 @@ static int do_control_logfile(void *ctx, struct connection *conn, return 0; } +static int do_control_memreport(void *ctx, struct connection *conn, + char **vec, int num) +{ + FILE *fp; + int fd; + + if (num > 1) + return EINVAL; + + if (num == 0) { + if (tracefd < 0) { + if (!tracefile) + return EBADF; + fp = fopen(tracefile, "a"); + } else { + /* + * Use dup() in order to avoid closing the file later + * with fclose() which will release stream resources. + */ + fd = dup(tracefd); + if (fd < 0) + return EBADF; + fp = fdopen(fd, "a"); + if (!fp) + close(fd); + } + } else + fp = fopen(vec[0], "a"); + + if (!fp) + return EBADF; + + talloc_report_full(NULL, fp); + fclose(fp); + + send_ack(conn, XS_CONTROL); + return 0; +} + static int do_control_print(void *ctx, struct connection *conn, char **vec, int num) { @@ -94,6 +133,7 @@ static struct cmd_s cmds[] = { { "check", do_control_check, "" }, { "log", do_control_log, "on|off" }, { "logfile", do_control_logfile, "<file>" }, + { "memreport", do_control_memreport, "[<file>]" }, { "print", do_control_print, "<string>" }, { "help", do_control_help, "" }, }; diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c index 1b79a48..b1f8fbc 100644 --- a/tools/xenstore/xenstored_core.c +++ b/tools/xenstore/xenstored_core.c @@ -76,7 +76,7 @@ static unsigned int nr_fds; static bool verbose = false; LIST_HEAD(connections); -static int tracefd = -1; +int tracefd = -1; static bool recovery = true; static int reopen_log_pipe[2]; static int reopen_log_pipe0_pollfd_idx = -1; diff --git a/tools/xenstore/xenstored_core.h b/tools/xenstore/xenstored_core.h index d315568..92cccb6 100644 --- a/tools/xenstore/xenstored_core.h +++ b/tools/xenstore/xenstored_core.h @@ -172,6 +172,7 @@ void reopen_log(void); void close_log(void); extern char *tracefile; +extern int tracefd; extern int dom0_domid; extern int dom0_event; extern int priv_domid; -- 2.10.2 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |