diff options
author | Amit Shah <amit.shah@redhat.com> | 2011-01-28 17:27:54 +0530 |
---|---|---|
committer | Amit Shah <amit.shah@redhat.com> | 2011-01-28 17:27:54 +0530 |
commit | e694887f173b3c0548ff3c1383e3fe954ac62692 (patch) | |
tree | d2433f27959677ee63783579dfd7635a9f1847aa | |
parent | 0c71cdee96971283c845423622d3d86bac787c89 (diff) | |
download | test-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.c | 18 |
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"); |