]> xenbits.xensource.com Git - libvirt.git/commitdiff
virfile: Need to check for ENOTCONN from recvfd failure
authorJohn Ferlan <jferlan@redhat.com>
Wed, 28 Jan 2015 00:03:12 +0000 (19:03 -0500)
committerJohn Ferlan <jferlan@redhat.com>
Thu, 29 Jan 2015 20:37:09 +0000 (15:37 -0500)
A gnulib change (commit id 'beae0bdc') causes ENOTCONN to be returned
from recvfd which causes us to fall into the throwaway waitpid() call
and return ENOTCONN to the caller, this then gets displayed during
a 'virsh save' when using a root squashed NFS environment that's trying
to save the file as something other than root:root.

This patch will add the additional check for ENOTCONN to force the code
into the waitpid loop looking for the actual status from the _exit()'d
child fork.

Signed-off-by: John Ferlan <jferlan@redhat.com>
src/util/virfile.c

index 5f56005ea1c57a79618fa4ad8239332c2f34a869..4024f3da9d8ee644ed65143de04f78738f8fa05f 100644 (file)
@@ -2125,7 +2125,8 @@ virFileOpenForked(const char *path, int openflags, mode_t mode,
     } while (fd < 0 && errno == EINTR);
     VIR_FORCE_CLOSE(pair[0]); /* NB: this preserves errno */
 
-    if (fd < 0 && errno != EACCES) {
+    /* gnulib will return ENOTCONN in certain instances */
+    if (fd < 0 && !(errno == EACCES || errno == ENOTCONN)) {
         ret = -errno;
         while (waitpid(pid, NULL, 0) == -1 && errno == EINTR);
         return ret;