[Libguestfs] [PATCH libnbd] lib: Remove cookie parameter from completion callbacks.

Eric Blake eblake at redhat.com
Tue Jul 30 16:51:36 UTC 2019


On 7/30/19 11:28 AM, Richard W.M. Jones wrote:
> On Tue, Jul 30, 2019 at 11:21:25AM -0500, Eric Blake wrote:
>> On 7/30/19 10:36 AM, Richard W.M. Jones wrote:
>>> +When the command completes, C<callback>
>>>  will be invoked as described in L<libnbd(3)/Completion callbacks>.
>>> +
>>
>> Do we need wording anywhere (probably in the .pod, so we only state it
>> once) that mentions that the callback routine is not invoked if
>> nbd_aio_FOO_callback returns -1?
> 
> I guess it's implicit from the fact that returning -1 indicates an
> error.
> 
> In fact the relationship ought to be stronger than that - the command
> should run if and only if nbd_aio_FOO_callback returns >= 0.  (That's
> not actually true at the moment because an error can happen after
> we've enqueued the command.)

Eww, you're right. We return -1 if nbd_internal_run queued the command
but encountered an error moving the state machine along; but that is
much trickier for the user to recover from (if they aren't using the
_callback form, then they NEED to know the cookie id to eventually
retire the command during nbd_aio_command_completed). Maybe we should
guarantee that we return the cookie in that case, even though a failure
was detected?  I don't think it is a good idea to change the API from
'int64 nbd_aio_pread()' to 'int nbd_aio_pread(int64 *cookie)' where
*cookie gets assigned on successful queue whether or not the overall
command returns 0 or -1.

In the long term, if nbd_internal_run() fails, then the next nbd_* call
that tries to manipulate the state machine will see that the state
machine is in the DEAD state; learning that the state machine failed
during nbd_aio_pread probably doesn't buy us much benefit.  So I'm
leaning towards just ignoring nbd_internal_run failure, and guaranteeing
that we return > 0 if we queue the command, no matter whether we then
encounter a state machine error after that point.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20190730/577b3c06/attachment.sig>


More information about the Libguestfs mailing list