On Sun, Dec 19, 2021 at 10:27:48AM +0000, Richard W.M. Jones wrote:
 On Sun, Dec 19, 2021 at 09:09:39AM +0200, Nir Soffer wrote:
 > The plugin used "i" (int32) instead of "I" (uint32) for the
count, so
 > when the client asks for 4294966784 bytes, the python plugin got -512.
 > 
 >     nbdkit: python.0: debug: python: extents count=4294966784 offset=0 req_one=0
 >     ...
 >     nbdkit: python.0: debug: extents: count=-512 offset=0 flags=0
 > 
 > With this fix I can get extents from rhv-upload-plugin using nbdinfo.
 > ---
 >  plugins/python/plugin.c | 2 +-
 >  1 file changed, 1 insertion(+), 1 deletion(-)
 > 
 > diff --git a/plugins/python/plugin.c b/plugins/python/plugin.c
 > index f85512b4..366619f9 100644
 > --- a/plugins/python/plugin.c
 > +++ b/plugins/python/plugin.c
 > @@ -957,21 +957,21 @@ py_extents (void *handle, uint32_t count, uint64_t offset,
 >    ACQUIRE_PYTHON_GIL_FOR_CURRENT_SCOPE;
 >    struct handle *h = handle;
 >    PyObject *fn;
 >    PyObject *r;
 >    PyObject *iter, *t;
 >    size_t size;
 >  
 >    if (callback_defined ("extents", &fn)) {
 >      PyErr_Clear ();
 >  
 > -    r = PyObject_CallFunction (fn, "OiLI", h->py_h, count, offset,
flags);
 > +    r = PyObject_CallFunction (fn, "OILI", h->py_h, count, offset,
flags);
 >      Py_DECREF (fn);
 >      if (check_python_failure ("extents") == -1)
 >        return -1;
 >  
 >      iter = PyObject_GetIter (r);
 >      if (iter == NULL) {
 >        nbdkit_error ("extents method did not return "
 >                      "something which is iterable");
 >        Py_DECREF (r);
 >        return -1;
 
 ACKed and pushed, thanks.
 
 I think we're going to need this one in RHEL ... 
Included in nbdkit-1.28.3-3.el9
Rich.
-- 
Richard Jones, Virtualization Group, Red Hat 
http://people.redhat.com/~rjones
Read my programming and virtualization blog: 
http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW