From nobody Mon Sep 16 19:43:42 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=quarantine dis=quarantine) header.from=suse.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1707130669698707.2043800589668; Mon, 5 Feb 2024 02:57:49 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.675835.1051443 (Exim 4.92) (envelope-from ) id 1rWwfP-0002bd-9F; Mon, 05 Feb 2024 10:57:35 +0000 Received: by outflank-mailman (output) from mailman id 675835.1051443; Mon, 05 Feb 2024 10:57:35 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1rWwfP-0002bU-5l; Mon, 05 Feb 2024 10:57:35 +0000 Received: by outflank-mailman (input) for mailman id 675835; Mon, 05 Feb 2024 10:57:34 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1rWwa3-0002wU-3F for xen-devel@lists.xenproject.org; Mon, 05 Feb 2024 10:52:03 +0000 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 97ed90f9-c414-11ee-8a45-1f161083a0e0; Mon, 05 Feb 2024 11:52:02 +0100 (CET) Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 2E0BD1F8BF; Mon, 5 Feb 2024 10:52:02 +0000 (UTC) Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id E5098132DD; Mon, 5 Feb 2024 10:52:01 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id S2JXNtG9wGW/NgAAD6G6ig (envelope-from ); Mon, 05 Feb 2024 10:52:01 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 97ed90f9-c414-11ee-8a45-1f161083a0e0 From: Juergen Gross To: xen-devel@lists.xenproject.org Cc: Juergen Gross , Wei Liu , Julien Grall , Anthony PERARD , Jason Andryuk , Julien Grall Subject: [PATCH v4 21/32] tools/xenstored: add early_init() function Date: Mon, 5 Feb 2024 11:49:50 +0100 Message-Id: <20240205105001.24171-22-jgross@suse.com> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20240205105001.24171-1-jgross@suse.com> References: <20240205105001.24171-1-jgross@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Level: Authentication-Results: smtp-out2.suse.de; none X-Rspamd-Server: rspamd2.dmz-prg2.suse.org X-Spamd-Result: default: False [-4.00 / 50.00]; REPLY(-4.00)[] X-Spam-Score: -4.00 X-Rspamd-Queue-Id: 2E0BD1F8BF X-Spam-Flag: NO X-ZM-MESSAGEID: 1707130671342100001 Content-Type: text/plain; charset="utf-8" Some xenstored initialization needs to be done in the daemon case only, so split it out into a new early_init() function being a stub in the stubdom case. Remove the call of talloc_enable_leak_report_full(), as it serves no real purpose: the daemon only ever exits due to a crash, in which case a log of talloc()ed memory hardly has any value. Signed-off-by: Juergen Gross Reviewed-by: Jason Andryuk Reviewed-by: Julien Grall --- V2: - rename function - move patch earlier in the series V3: - add more init code for the daemon to early_init() - move mkdir(XENSTORE_LIB_DIR) into a later patch (Julien Grall) - remove stale stubs in minios.c --- tools/xenstored/core.c | 30 +++--------------------------- tools/xenstored/core.h | 7 +++---- tools/xenstored/minios.c | 11 +++-------- tools/xenstored/posix.c | 31 +++++++++++++++++++++++++++++-- 4 files changed, 38 insertions(+), 41 deletions(-) diff --git a/tools/xenstored/core.c b/tools/xenstored/core.c index d4c76d71dc..eba7744fde 100644 --- a/tools/xenstored/core.c +++ b/tools/xenstored/core.c @@ -79,7 +79,7 @@ char **orig_argv; LIST_HEAD(connections); int tracefd =3D -1; bool keep_orphans =3D false; -static int reopen_log_pipe[2]; +int reopen_log_pipe[2]; static int reopen_log_pipe0_pollfd_idx =3D -1; char *tracefile =3D NULL; static struct hashtable *nodes; @@ -2612,7 +2612,7 @@ static void destroy_fds(void) close(sock); } =20 -static void init_sockets(void) +void init_sockets(void) { struct sockaddr_un addr; const char *soc_str =3D xenstore_daemon_path(); @@ -2903,34 +2903,10 @@ int main(int argc, char *argv[]) if (optind !=3D argc) barf("%s: No arguments desired", argv[0]); =20 - reopen_log(); - - /* Make sure xenstored directory exists. */ - /* Errors ignored here, will be reported when we open files */ - mkdir(xenstore_daemon_rundir(), 0755); - - if (dofork) { - openlog("xenstored", 0, LOG_DAEMON); - if (!live_update) - daemonize(); - } - if (pidfile) - write_pidfile(pidfile); - - /* Talloc leak reports go to stderr, which is closed if we fork. */ - if (!dofork) - talloc_enable_leak_report_full(); - - /* Don't kill us with SIGPIPE. */ - signal(SIGPIPE, SIG_IGN); + early_init(live_update, dofork, pidfile); =20 talloc_enable_null_tracking(); =20 -#ifndef NO_SOCKETS - if (!live_update) - init_sockets(); -#endif - init_pipe(reopen_log_pipe); =20 /* Listen to hypervisor. */ diff --git a/tools/xenstored/core.h b/tools/xenstored/core.h index 480b0f5f7b..72173f1684 100644 --- a/tools/xenstored/core.h +++ b/tools/xenstored/core.h @@ -384,12 +384,11 @@ static inline bool domain_is_unprivileged(const struc= t connection *conn) =20 /* Return the event channel used by xenbus. */ evtchn_port_t get_xenbus_evtchn(void); +void early_init(bool live_update, bool dofork, const char *pidfile); =20 -/* Write out the pidfile */ -void write_pidfile(const char *pidfile); +void init_sockets(void); +extern int reopen_log_pipe[2]; =20 -/* Fork but do not close terminal FDs */ -void daemonize(void); /* Close stdin/stdout/stderr to complete daemonize */ void finish_daemonize(void); =20 diff --git a/tools/xenstored/minios.c b/tools/xenstored/minios.c index 0779efbf91..4f48f63083 100644 --- a/tools/xenstored/minios.c +++ b/tools/xenstored/minios.c @@ -20,14 +20,6 @@ #include "core.h" #include =20 -void write_pidfile(const char *pidfile) -{ -} - -void daemonize(void) -{ -} - void finish_daemonize(void) { } @@ -54,3 +46,6 @@ void unmap_xenbus(void *interface) xengnttab_unmap(*xgt_handle, interface, 1); } =20 +void early_init(bool live_update, bool dofork, const char *pidfile) +{ +} diff --git a/tools/xenstored/posix.c b/tools/xenstored/posix.c index 7e03dd982d..9463ef5c8d 100644 --- a/tools/xenstored/posix.c +++ b/tools/xenstored/posix.c @@ -20,14 +20,17 @@ #include #include #include +#include #include +#include #include +#include =20 #include "utils.h" #include "core.h" #include "osdep.h" =20 -void write_pidfile(const char *pidfile) +static void write_pidfile(const char *pidfile) { char buf[100]; int len; @@ -49,7 +52,7 @@ void write_pidfile(const char *pidfile) } =20 /* Stevens. */ -void daemonize(void) +static void daemonize(void) { pid_t pid; =20 @@ -157,3 +160,27 @@ void *xenbus_map(void) =20 return addr; } + +void early_init(bool live_update, bool dofork, const char *pidfile) +{ + reopen_log(); + + /* Make sure xenstored directory exists. */ + /* Errors ignored here, will be reported when we open files */ + mkdir(xenstore_daemon_rundir(), 0755); + + if (dofork) { + openlog("xenstored", 0, LOG_DAEMON); + if (!live_update) + daemonize(); + } + + if (pidfile) + write_pidfile(pidfile); + + /* Don't kill us with SIGPIPE. */ + signal(SIGPIPE, SIG_IGN); + + if (!live_update) + init_sockets(); +} --=20 2.35.3