mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-03 11:35:19 +00:00
virfile: Report error when changing pipe size fails
When changing the size of pipe that virFileWrapperFdNew() creates we start at 1MiB and if that fails because it's above the system wide limit we get EPERM and continue with half of the size. However, we might get another error in which case we should report proper system error and return failure from virFileWrapperFdNew(). Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
2ddf220718
commit
cd7acb3323
@ -217,7 +217,7 @@ struct _virFileWrapperFd {
|
||||
*
|
||||
* OS note: only for linux, on other OS this is a no-op.
|
||||
*/
|
||||
static void
|
||||
static int
|
||||
virFileWrapperSetPipeSize(int fd)
|
||||
{
|
||||
int sz;
|
||||
@ -230,21 +230,24 @@ virFileWrapperSetPipeSize(int fd)
|
||||
continue; /* retry with half the size */
|
||||
}
|
||||
if (rv < 0) {
|
||||
break;
|
||||
virReportSystemError(errno, "%s",
|
||||
_("unable to set pipe size"));
|
||||
return -1;
|
||||
}
|
||||
VIR_DEBUG("fd %d pipe size adjusted to %d", fd, sz);
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
VIR_WARN("unable to set pipe size, data transfer might be slow: %s",
|
||||
g_strerror(errno));
|
||||
return 0;
|
||||
}
|
||||
|
||||
# else /* !__linux__ */
|
||||
static void
|
||||
static int
|
||||
virFileWrapperSetPipeSize(int fd G_GNUC_UNUSED)
|
||||
{
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
# endif /* !__linux__ */
|
||||
|
||||
@ -323,6 +326,9 @@ virFileWrapperFdNew(int *fd, const char *name, unsigned int flags)
|
||||
if (virPipe(pipefd) < 0)
|
||||
goto error;
|
||||
|
||||
if (virFileWrapperSetPipeSize(pipefd[output]) < 0)
|
||||
goto error;
|
||||
|
||||
if (!(iohelper_path = virFileFindResource("libvirt_iohelper",
|
||||
abs_top_builddir "/src",
|
||||
LIBEXECDIR)))
|
||||
@ -330,8 +336,6 @@ virFileWrapperFdNew(int *fd, const char *name, unsigned int flags)
|
||||
|
||||
ret->cmd = virCommandNewArgList(iohelper_path, name, NULL);
|
||||
|
||||
virFileWrapperSetPipeSize(pipefd[output]);
|
||||
|
||||
if (output) {
|
||||
virCommandSetInputFD(ret->cmd, pipefd[0]);
|
||||
virCommandSetOutputFD(ret->cmd, fd);
|
||||
|
Loading…
Reference in New Issue
Block a user