On 3/13/19 7:45 AM, Richard W.M. Jones wrote:
This pair of calls allows plugins to describe which extents in the
virtual disk are allocated, holes or zeroes.
---
+ int nbdkit_extents_foreach_range (
+ const struct nbdkit_extents_map *extents_map,
+ uint64_t range_offset, uint64_t range_length,
+ int (*fn) (uint64_t offset, uint64_t length,
+ uint32_t type, void *opaque),
+ void *opaque);
+
+Iterate over the extents in ascending order, calling C<fn> for each.
+C<fn> should return 0 on success or -1 on failure. If a call to C<fn>
+fails then C<nbdkit_extents_foreach*> also fails immediately.
+
+The C<nbdkit_extents_foreach_range> variant only iterates over extents
+overlapping C<[range_offset...range_offset+range_length-1]>.
+
+C<nbdkit_extents_foreach*> returns C<0> on success or C<-1> on
failure.
+However it does not call C<nbdkit_error> or C<nbdkit_set_error> - it
+is expected that C<fn> will call those functions on failure.
expected that either C<fn> or the caller will call those functions on
failure
+++ b/server/extents.c
@@ -0,0 +1,71 @@
+/* nbdkit
+#if 0
+int nbdkit_extents_foreach (const struct nbdkit_extents_map *,
+ int (*fn) (uint64_t offset, uint64_t length,
+ uint32_t type, void *opaque),
+ void *opaque);
+int nbdkit_extents_foreach_range (const struct nbdkit_extents_map *,
+ uint64_t range_offset, uint64_t range_length,
+ int (*fn) (uint64_t offset, uint64_t length,
Indentation glitch?
+ uint32_t type, void
*opaque),
+ void *opaque);
Otherwise I think we're ready for the implementation, because the
framework is looking good.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization:
qemu.org |
libvirt.org