On Wed, Mar 18, 2020 at 06:32:14PM +0100, Michal Privoznik wrote: > The @src is not always a file. It may also be a directory (for > instance qemuDomainCreateDeviceRecursive() assumes that) - even > though it doesn't happen usually. Anyway, mount() can mount only > a dir onto a dir and a file onto a file. > > Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> > --- > src/util/virfile.c | 13 +++++++++++-- > 1 file changed, 11 insertions(+), 2 deletions(-) > > diff --git a/src/util/virfile.c b/src/util/virfile.c > index 0f31554323..9c175b041f 100644 > --- a/src/util/virfile.c > +++ b/src/util/virfile.c > @@ -3743,8 +3743,17 @@ int > virFileBindMountDevice(const char *src, > const char *dst) > { > - if (virFileTouch(dst, 0666) < 0) > - return -1; > + if (!virFileExists(dst)) { > + if (virFileIsDir(src)) { > + if (virFileMakePath(dst)) { Personally, I'd consider if (virFileMakePath(dst) < 0) clearer here for a reader who's not familiar with the function and what exactly it returns. Reviewed-by: Pavel Mores <pmores@xxxxxxxxxx> > + virReportSystemError(errno, _("Unable to make dir %s"), dst); > + return -1; > + } > + } else { > + if (virFileTouch(dst, 0666) < 0) > + return -1; > + } > + } > > if (mount(src, dst, "none", MS_BIND, NULL) < 0) { > virReportSystemError(errno, _("Failed to bind %s on to %s"), src, > -- > 2.24.1 >