From: Rusty Russell <rusty@rustcorp.com.au>
Date: Sat, 13 Jun 2009 04:27:05 +0000 (-0600)
Subject: lguest: fix writev returning short on console output
X-Git-Tag: firefly_0821_release~13958^2~16
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=7b5c806c35f6ff76b2e36a8b5b1513c8a83fcff7;p=firefly-linux-kernel-4.4.55.git

lguest: fix writev returning short on console output

I've never seen it here, but I can't find anywhere that says writev
will write everything.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
---

diff --git a/Documentation/lguest/lguest.c b/Documentation/lguest/lguest.c
index 8704600c5e42..02fa524cf4ad 100644
--- a/Documentation/lguest/lguest.c
+++ b/Documentation/lguest/lguest.c
@@ -836,7 +836,12 @@ static void handle_console_output(struct virtqueue *vq, bool timeout)
 	while ((head = get_vq_desc(vq, iov, &out, &in)) != vq->vring.num) {
 		if (in)
 			errx(1, "Input buffers in output queue?");
-		writev(STDOUT_FILENO, iov, out);
+		while (!iov_empty(iov, out)) {
+			int len = writev(STDOUT_FILENO, iov, out);
+			if (len <= 0)
+				err(1, "Write to stdout gave %i", len);
+			iov_consume(iov, out, len);
+		}
 		add_used_and_trigger(vq, head, 0);
 	}
 }