On 5/6/22 1:02 PM, Daniel P. Berrangé wrote: > On Thu, May 05, 2022 at 02:52:17PM +0200, Claudio Fontana wrote: >> where it can be reused by other helpers. >> No changes other than the move. >> >> Note that this makes iohelper now dependent on -lutil, because unused >> (for iohelper) parts of virfile.c contain calls to openpty(3). > > Needs -lacl too on F35 at least. do we end up needing the whole of the virt_util_lib dependencies for this? dependencies: [ acl_dep, audit_dep, capng_dep, devmapper_dep, gnutls_dep, intl_dep, libm_dep, libnl_dep, libutil_dep, numactl_dep, secdriver_dep, src_dep, thread_dep, win32_dep, yajl_dep, ] iohelper did not need -lutil or anything else before, just a file. going back to just a separate helper_runio.c/h would make sense to me, but let me know. Thanks, Claudio > >> Signed-off-by: Claudio Fontana <cfontana@xxxxxxx> >> --- >> src/util/iohelper.c | 175 ------------------------------------------- >> src/util/meson.build | 4 + >> src/util/virfile.c | 172 ++++++++++++++++++++++++++++++++++++++++++ >> src/util/virfile.h | 2 + >> 4 files changed, 178 insertions(+), 175 deletions(-) >> > >> diff --git a/src/util/meson.build b/src/util/meson.build >> index 24350a3e67..84ef13ba32 100644 >> --- a/src/util/meson.build >> +++ b/src/util/meson.build >> @@ -175,6 +175,7 @@ keycode_dep = declare_dependency( >> >> io_helper_sources = [ >> 'iohelper.c', >> + 'virfile.c', >> ] >> >> virt_util_lib = static_library( >> @@ -213,6 +214,9 @@ if conf.has('WITH_LIBVIRTD') >> files(io_helper_sources), >> dtrace_gen_headers, >> ], >> + 'deps': [ > > Adding 'acl_dep' here is needed > >> + libutil_dep, >> + ], >> } >> endif >> >> diff --git a/src/util/virfile.c b/src/util/virfile.c >> index 130b0fbace..b033a27264 100644 >> --- a/src/util/virfile.c >> +++ b/src/util/virfile.c >> @@ -4577,3 +4577,175 @@ virFileSetCOW(const char *path, >> return 0; >> #endif /* ! __linux__ */ >> } >> + >> +struct runIOParams { >> + bool isBlockDev; >> + bool isDirect; >> + bool isWrite; >> + int fdin; >> + const char *fdinname; >> + int fdout; >> + const char *fdoutname; >> +}; >> + >> +/** >> + * runIOCopy: execute the IO copy based on the passed parameters >> + * @p: the IO parameters >> + * >> + * Execute the copy based on the passed parameters. >> + * >> + * Returns: size transfered, or < 0 on error. >> + */ >> + >> +static off_t >> +runIOCopy(const struct runIOParams p) >> +{ >> + g_autofree void *base = NULL; /* Location to be freed */ >> + char *buf = NULL; /* Aligned location within base */ >> + size_t buflen = 1024*1024; >> + intptr_t alignMask = 64*1024 - 1; >> + off_t total = 0; >> + >> +#if WITH_POSIX_MEMALIGN >> + if (posix_memalign(&base, alignMask + 1, buflen)) >> + abort(); >> + buf = base; >> +#else >> + buf = g_new0(char, buflen + alignMask); >> + base = buf; >> + buf = (char *) (((intptr_t) base + alignMask) & ~alignMask); >> +#endif > > For reasons I don't understand 'WITH_POSIX_MEMALIGN' is defined > on mingw, but posix_memalign doesn't exist in header files and > thus we fail to compile. > > THe original iohelper.c file is not compiled at all unless > WITH_LIBVIRTD is set, which is not on mingw, so we didn't > see this problem before WITH_POSIX_MEMALIGN. > > > With regards, > Daniel >