提交 29946e3e 编写于 作者: J John Ferlan

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: NJohn Ferlan <jferlan@redhat.com>
上级 8ff38336
...@@ -2125,7 +2125,8 @@ virFileOpenForked(const char *path, int openflags, mode_t mode, ...@@ -2125,7 +2125,8 @@ virFileOpenForked(const char *path, int openflags, mode_t mode,
} while (fd < 0 && errno == EINTR); } while (fd < 0 && errno == EINTR);
VIR_FORCE_CLOSE(pair[0]); /* NB: this preserves errno */ 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; ret = -errno;
while (waitpid(pid, NULL, 0) == -1 && errno == EINTR); while (waitpid(pid, NULL, 0) == -1 && errno == EINTR);
return ret; return ret;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册