[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 27/29] tools/xenstored: add helpers for filename handling



Hi Juergen,

On 14/11/2023 06:45, Juergen Gross wrote:
On 13.11.23 23:25, Julien Grall wrote:
Hi Juergen,

On 10/11/2023 16:08, Juergen Gross wrote:
Add some helpers for handling filenames which might need different
implementations between stubdom and daemon environments:

- expansion of relative filenames (those are not really defined today,
   just expand them to be relative to /var/lib/xen/xenstore)
- expansion of xenstore_daemon_rundir() (used e.g. for saving the state
   file in case of live update - needs to be unchanged in the daemon
   case, but should result in /var/lib/xen/xenstore for stubdom)

Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
Reviewed-by: Jason Andryuk <jandryuk@xxxxxxxxx>
---
  tools/xenstored/core.c      | 9 ++++++++-
  tools/xenstored/core.h      | 3 +++
  tools/xenstored/lu_daemon.c | 4 ++--
  tools/xenstored/minios.c    | 5 +++++
  tools/xenstored/posix.c     | 5 +++++
  5 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/tools/xenstored/core.c b/tools/xenstored/core.c
index 4a9d874f17..77befd24c9 100644
--- a/tools/xenstored/core.c
+++ b/tools/xenstored/core.c
@@ -158,6 +158,13 @@ void trace_destroy(const void *data, const char *type)
          trace("obj: DESTROY %s %p\n", type, data);
  }
+char *absolute_filename(const void *ctx, const char *filename)

Can the return be const?

I'll have a look.


+{
+    if (filename[0] != '/')
+        return talloc_asprintf(ctx, XENSTORE_LIB_DIR "/%s", filename);

Looking at the rest of patch, you will be using xenstore_rundir(). I wonder whether it would not be better to switch to xenstore_rundir() so...

+    return talloc_strdup(ctx, filename);
+}
+
  /**
   * 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
@@ -2983,7 +2990,7 @@ int main(int argc, char *argv[])
      signal(SIGHUP, trigger_reopen_log);
      if (tracefile)
-        tracefile = talloc_strdup(NULL, tracefile);
+        tracefile = absolute_filename(NULL, tracefile);
  #ifndef NO_LIVE_UPDATE
      /* Read state in case of live update. */
diff --git a/tools/xenstored/core.h b/tools/xenstored/core.h
index a0d3592961..51e1dddb22 100644
--- a/tools/xenstored/core.h
+++ b/tools/xenstored/core.h
@@ -393,6 +393,9 @@ void early_init(void);
  void mount_9pfs(void);
  #endif
+const char *xenstore_rundir(void);
+char *absolute_filename(const void *ctx, const char *filename);
+
  /* Write out the pidfile */
  void write_pidfile(const char *pidfile);
diff --git a/tools/xenstored/lu_daemon.c b/tools/xenstored/lu_daemon.c
index 71bcabadd3..6351111ab0 100644
--- a/tools/xenstored/lu_daemon.c
+++ b/tools/xenstored/lu_daemon.c
@@ -24,7 +24,7 @@ void lu_get_dump_state(struct lu_dump_state *state)
      state->size = 0;
      state->filename = talloc_asprintf(NULL, "%s/state_dump",
-                      xenstore_daemon_rundir());
+                      xenstore_rundir());

... call and ...

      if (!state->filename)
          barf("Allocation failure");
@@ -65,7 +65,7 @@ FILE *lu_dump_open(const void *ctx)
      int fd;
      filename = talloc_asprintf(ctx, "%s/state_dump",
-                   xenstore_daemon_rundir());
+                   xenstore_rundir());

... this one could be replaced with absolute_filename().

No, I don't think this is a good idea.

I don't want the daemon to store trace files specified as relative files
to be stored in /var/run/xen, while I want all files of the stubdom to be
stored under /var/lib/xen.

Why? This is a bit odd to have a different behavior between stubdom and daemon. It would be much easier for the user if they knew all the files would be at the same place regardless the version used.

Also, regarding the background of my question. You are introducing a function call absolute_filename(). From the name, there is nothing indicating that this should only be used for trace files. If this is only indented for tracefile, then I think this should be renamed to something like absolute_tracefile(...).

Cheers,

--
Julien Grall



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.