libnbd/0001-ocaml-Fix-bug-in-asynch-copy-test.patch

53 lines
2.2 KiB
Diff
Raw Normal View History

From 0475bfe04a527051c0a37af59a733c4c8554e427 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Fri, 17 Apr 2020 22:23:56 +0100
Subject: [PATCH] ocaml: Fix bug in asynch copy test.
This program had a subtle bug: If we've read everything from the
source, but there are still source commands in flight, AND it happens
that there are no destination commands in flight, then the loop
finishes prematurely. This is particularly evident when you run the
test on a slow machine (armv7 in Koji is illustrative). The fix is to
check that there are no commands in flight either from the source or
to the destination.
(I actually discovered this when writing the golang bindings which
copied from the OCaml version, but forgot to make the correction to
the original.)
---
ocaml/examples/asynch_copy.ml | 3 ++-
ocaml/tests/test_590_aio_copy.ml | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/ocaml/examples/asynch_copy.ml b/ocaml/examples/asynch_copy.ml
index d5dcc60..7132f57 100644
--- a/ocaml/examples/asynch_copy.ml
+++ b/ocaml/examples/asynch_copy.ml
@@ -41,7 +41,8 @@ let asynch_copy src dst =
(* The main loop which runs until we have finished reading and
* there are no more commands in flight.
*)
- while !soff < size || NBD.aio_in_flight dst > 0 do
+ while !soff < size || NBD.aio_in_flight src > 0 || NBD.aio_in_flight dst > 0
+ do
(* If we're able to submit more reads from the source then do so now. *)
if !soff < size && NBD.aio_in_flight src < max_reads_in_flight then (
let bs = min bs (size -^ !soff) in
diff --git a/ocaml/tests/test_590_aio_copy.ml b/ocaml/tests/test_590_aio_copy.ml
index ac490ef..e3cd59d 100644
--- a/ocaml/tests/test_590_aio_copy.ml
+++ b/ocaml/tests/test_590_aio_copy.ml
@@ -64,7 +64,8 @@ let asynch_copy src dst =
(* The main loop which runs until we have finished reading and
* there are no more commands in flight.
*)
- while !soff < size || NBD.aio_in_flight dst > 0 do
+ while !soff < size || NBD.aio_in_flight src > 0 || NBD.aio_in_flight dst > 0
+ do
(* If we're able to submit more reads from the source then do so now. *)
if !soff < size && NBD.aio_in_flight src < max_reads_in_flight then (
let bs = min bs (size -^ !soff) in
--
2.25.0