Laszlo Ersek
2022-Jan-14 13:50 UTC
[Libguestfs] [v2v PATCH 0/2] lib/utils: get_disk_allocated: adopt the int64 element type for "entries"
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2027598
This small series (esp. the second patch) is necessary in virt-v2v, for
putting the just-posted libnbd patch
[Libguestfs] [libnbd PATCH] ocaml: map C's uint32_t to OCaml's int64
https://listman.redhat.com/archives/libguestfs/2022-January/msg00093.html
Message-Id: <20220114133833.24835-1-lersek at redhat.com>
to use.
Thanks,
Laszlo
Laszlo Ersek (2):
lib/utils: get_disk_allocated: assert that NBD block length is
positive
lib/utils: get_disk_allocated: adopt the int64 element type for
"entries"
lib/utils.ml | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
base-commit: 4578887821d8c70190f5f8c3edf4779f1d502d06
--
2.19.1.3.g30247aa5d201
Laszlo Ersek
2022-Jan-14 13:50 UTC
[Libguestfs] [v2v PATCH 1/2] lib/utils: get_disk_allocated: assert that NBD block length is positive
It makes no sense for the NBD server to return a zero-length block, plus
it used to be a bug in the libnbd OCaml bindings to wrap 32-bit block
lengths with the MSB set around to negative (signed) 32-bit integers
(which would then be widened to negative (signed) 64-bit integers).
Any non-positive "len" value breaks the progression of
"fetch_offset",
potentially leading to an infinite loop.
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2027598
Signed-off-by: Laszlo Ersek <lersek at redhat.com>
---
lib/utils.ml | 1 +
1 file changed, 1 insertion(+)
diff --git a/lib/utils.ml b/lib/utils.ml
index 4c43a4b5161d..f599b0e32450 100644
--- a/lib/utils.ml
+++ b/lib/utils.ml
@@ -197,6 +197,7 @@ let get_disk_allocated ~dir ~disknr for i
= 0 to Array.length entries / 2 - 1 do
let len = Int64.of_int32 entries.(i * 2)
and typ = entries.(i * 2 + 1) in
+ assert (len > 0_L);
if Int32.logand typ 1_l = 0_l then
allocated := !allocated +^ len;
fetch_offset := !fetch_offset +^ len
--
2.19.1.3.g30247aa5d201
Laszlo Ersek
2022-Jan-14 13:50 UTC
[Libguestfs] [v2v PATCH 2/2] lib/utils: get_disk_allocated: adopt the int64 element type for "entries"
Adapt our "Utils.get_disk_allocated" function to the changed signature
of
"NBD.block_status", coming from libnbd patch
ocaml: map C's uint32_t to OCaml's int64
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2027598
Signed-off-by: Laszlo Ersek <lersek at redhat.com>
---
lib/utils.ml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/utils.ml b/lib/utils.ml
index f599b0e32450..4c8998c28a3c 100644
--- a/lib/utils.ml
+++ b/lib/utils.ml
@@ -195,10 +195,10 @@ let get_disk_allocated ~dir ~disknr (fun
ctx offset entries err ->
assert (ctx = alloc_ctx);
for i = 0 to Array.length entries / 2 - 1 do
- let len = Int64.of_int32 entries.(i * 2)
+ let len = entries.(i * 2)
and typ = entries.(i * 2 + 1) in
assert (len > 0_L);
- if Int32.logand typ 1_l = 0_l then
+ if typ &^ 1_L = 0_L then
allocated := !allocated +^ len;
fetch_offset := !fetch_offset +^ len
done;
--
2.19.1.3.g30247aa5d201
Laszlo Ersek
2022-Jan-17 14:31 UTC
[Libguestfs] [v2v PATCH 0/2] lib/utils: get_disk_allocated: adopt the int64 element type for "entries"
On 01/14/22 14:50, Laszlo Ersek wrote:> Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2027598 > > This small series (esp. the second patch) is necessary in virt-v2v, for > putting the just-posted libnbd patch > > [Libguestfs] [libnbd PATCH] ocaml: map C's uint32_t to OCaml's int64 > https://listman.redhat.com/archives/libguestfs/2022-January/msg00093.html > Message-Id: <20220114133833.24835-1-lersek at redhat.com> > > to use. > > Thanks, > Laszlo > > Laszlo Ersek (2): > lib/utils: get_disk_allocated: assert that NBD block length is > positive > lib/utils: get_disk_allocated: adopt the int64 element type for > "entries" > > lib/utils.ml | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > > base-commit: 4578887821d8c70190f5f8c3edf4779f1d502d06 >Commit range 4578887821d8..a2afed32d8b1. Thanks! Laszlo