From e694887f173b3c0548ff3c1383e3fe954ac62692 Mon Sep 17 00:00:00 2001 From: Amit Shah Date: Fri, 28 Jan 2011 17:27:54 +0530 Subject: auto-guest: Don't return -EAGAIN for all safewrite() callers Some callers are interested in -EAGAIN return in nonblocking mode, like the test that checks for nonblocking functionality. For other tests, like the guest_send_bigfile should retry in case of -EAGAIN since the host might be coping up with our rate of data transfer. This is a hack that's introduced here for completeness. Future work should go to kvm-autotest. Signed-off-by: Amit Shah --- auto-virtserial-guest.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/auto-virtserial-guest.c b/auto-virtserial-guest.c index 03fdeab..52efbe2 100644 --- a/auto-virtserial-guest.c +++ b/auto-virtserial-guest.c @@ -55,7 +55,7 @@ static int g_open_fds[MAX_PORTS]; /* Array to hold poll results of g_open_fds from the sigio_handler() */ static int g_poll_results[MAX_PORTS]; -static ssize_t safewrite(int fd, const void *buf, size_t count) +static ssize_t safewrite(int fd, const void *buf, size_t count, bool eagain_ret) { size_t ret, len; int flags; @@ -74,7 +74,7 @@ static ssize_t safewrite(int fd, const void *buf, size_t count) continue; if (errno == EAGAIN) { - if (nonblock) { + if (nonblock && eagain_ret) { return -EAGAIN; } else { continue; @@ -231,7 +231,7 @@ static int write_port(int nr) buf = malloc(g_length); if (!buf) return -ENOMEM; - ret = safewrite(g_open_fds[nr], buf, g_length); + ret = safewrite(g_open_fds[nr], buf, g_length, true); free(buf); return ret; } @@ -317,7 +317,7 @@ static int recv_bytestream(int val) return -ENOMEM; while((ret = saferead(g_fd, buf, g_length)) > 0) { - ret = safewrite(g_bigfile_fd, buf, ret); + ret = safewrite(g_bigfile_fd, buf, ret, false); if (ret < 0) break; } @@ -349,7 +349,7 @@ static int send_host_csum(int nr) close(csum_fd); if (ret > 0) - ret = safewrite(g_fd, buf, ret); + ret = safewrite(g_fd, buf, ret, false); free(buf); return ret; } @@ -372,7 +372,7 @@ static int send_bytestream(int val) return -ENOMEM; while((ret = saferead(g_bigfile_fd, buf, g_length)) > 0) { - ret = safewrite(g_fd, buf, ret); + ret = safewrite(g_fd, buf, ret, false); if (ret < 0) break; } @@ -405,7 +405,7 @@ static int send_guest_csum(int nr) close(csum_fd); if (ret > 0) - ret = safewrite(g_fd, buf, ret); + ret = safewrite(g_fd, buf, ret, false); free(buf); return ret; } @@ -578,7 +578,7 @@ static void send_report(int cfd, int ret) gpkt.key = KEY_RESULT; gpkt.value = ret; - safewrite(cfd, &gpkt, sizeof(gpkt)); + safewrite(cfd, &gpkt, sizeof(gpkt), false); } int main(int argc, char *argv[]) @@ -614,7 +614,7 @@ back_to_open: gpkt.key = KEY_STATUS_OK; gpkt.value = 1; - ret = safewrite(cfd, &gpkt, sizeof(gpkt)); + ret = safewrite(cfd, &gpkt, sizeof(gpkt), false); if (ret < 0) error(-ret, -ret, "write control port"); -- cgit