summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmit Shah <amit.shah@redhat.com>2011-01-28 17:27:54 +0530
committerAmit Shah <amit.shah@redhat.com>2011-01-28 17:27:54 +0530
commite694887f173b3c0548ff3c1383e3fe954ac62692 (patch)
treed2433f27959677ee63783579dfd7635a9f1847aa
parent0c71cdee96971283c845423622d3d86bac787c89 (diff)
downloadtest-virtserial-e694887f173b3c0548ff3c1383e3fe954ac62692.tar.gz
test-virtserial-e694887f173b3c0548ff3c1383e3fe954ac62692.tar.xz
test-virtserial-e694887f173b3c0548ff3c1383e3fe954ac62692.zip
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 <amit.shah@redhat.com>
-rw-r--r--auto-virtserial-guest.c18
1 files 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");