From 29946e3e53c6719a99b476dbab56b49d3d94f1ca Mon Sep 17 00:00:00 2001 From: John Ferlan Date: Tue, 27 Jan 2015 19:03:12 -0500 Subject: [PATCH] virfile: Need to check for ENOTCONN from recvfd failure 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 --- src/util/virfile.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/util/virfile.c b/src/util/virfile.c index 5f56005ea1..4024f3da9d 100644 --- a/src/util/virfile.c +++ b/src/util/virfile.c @@ -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; -- GitLab