diff --git a/src/util/virfile.c b/src/util/virfile.c
index a04f888e06..fdacd17890 100644
--- a/src/util/virfile.c
+++ b/src/util/virfile.c
@@ -282,6 +282,18 @@ virFileWrapperFdNew(int *fd, const char *name, unsigned int flags)
ret->cmd = virCommandNewArgList(iohelper_path, name, NULL);
+ if (flags & VIR_FILE_WRAPPER_BIG_PIPE) {
+ /*
+ * virsh save/resume would slow to a crawl with a default pipe size (usually
64k).
+ * This improves the situation by 400%, although going through io_helper still
incurs
+ * in a performance penalty compared with a direct qemu migration to a socket.
+ */
+ int pipe_sz, rv = virFileReadValueInt(&pipe_sz,
"/proc/sys/fs/pipe-max-size");
+ if (rv != 0) {
+ pipe_sz = 1024 * 1024; /* common default for pipe-max-size */
+ }
+ fcntl(pipefd[output ? 0 : 1], F_SETPIPE_SZ, pipe_sz);
+ }
I believe this entire hunk of code should be ifdef'd within #ifdef
__linux__. non-windows does not necessarily mean only linux.