[libvirt] VM creation failed : Permission denied : bind(unix:/var/run/libvirt/qemu//VM.monitor)

Daniel Veillard veillard at redhat.com
Thu Jul 30 08:57:53 UTC 2009


On Thu, Jul 30, 2009 at 05:44:41PM +0900, Ryota Ozaki wrote:
> On Thu, Jul 30, 2009 at 5:33 PM, Pierre-Gilles
> Mialon<pmialon at linagora.com> wrote:
> >        I use Ovirt under Fedora 11 with the latest developpement package and the VM
> > creation failed with :
> > bind(unix:/var/run/libvirt/qemu//VM-4.monitor): Permission denied
> 
> Ugh, this is a regression introduced by my patch...
> (see [PATCH] qemu: fix monitor socket reconnection)
> 
> Eventually we need to add ENOENT to errno checks, not replace EACCES
> with ENOENT, I'm not sure why EACCES happens though. Anyone knows that?
[...]
> > libvirt-0.7.0-0.2.gitf055724.fc11.x86_64
> > libvirt-python-0.7.0-0.2.gitf055724.fc11.x86_64
> > libvirt-client-0.7.0-0.2.gitf055724.fc11.x86_64
> > libvirt-qpid-0.2.17-0.fc11.x86_64

  Unclear, he's using the prerelease code from monday, not the one
with the EACCES -> ENOENT replacement patch.

  One possibility for EACCES could be if the socket creation in qemu was
done with a mode not allowing access and modified in subsequent code,
allowing for a small windows where EACCES would be returned. Someone
should check qemu code.
  I think allowing again retry on EACCES should be fine anyway, I don't
see how that could break things, we would just hit a time out in the
worst case where access is never granted.

  So my take is to just do the enclosed patch,

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/
-------------- next part --------------
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index 9fb8506..1877cc0 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -917,8 +917,9 @@ qemudOpenMonitorUnix(virConnectPtr conn,
         if (ret == 0)
             break;
 
-        if (errno == ENOENT || errno == ECONNREFUSED) {
+        if (errno == ENOENT || errno == EACCES || errno == ECONNREFUSED) {
             /* ENOENT       : Socket may not have shown up yet
+             * EACCES       : acces is not yet granted
              * ECONNREFUSED : Leftover socket hasn't been removed yet */
             continue;
         }


More information about the libvir-list mailing list