[libvirt RFCv6 03/27] iohelper: move runIO function to virfile.c

Daniel P. Berrangé berrange at redhat.com
Fri May 6 11:52:41 UTC 2022


On Fri, May 06, 2022 at 01:29:57PM +0200, Claudio Fontana wrote:
> 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.
> > 
> >> Signed-off-by: Claudio Fontana <cfontana at suse.de>
> >> ---
> >>  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
> > 
> 
> Should I go back and put this stuff outside virFile.c then, would simplify things in my view,
> this is a very specialized use anyway no?

It is fine in virfile, I'd just ifdef the header + source together
using !WIN32.

I've found the bug wrt posix_memalign mis-detection

https://github.com/mesonbuild/meson/issues/1083

which i'll fix separately

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|


More information about the libvir-list mailing list