[Libguestfs] [libnbd PATCH 4/6] states: Prepare for aio notify callback
Eric Blake
eblake at redhat.com
Thu Jul 18 14:38:50 UTC 2019
On 7/18/19 9:22 AM, Eric Blake wrote:
> On 6/29/19 8:28 AM, Eric Blake wrote:
>
>>
>> We also want the client to be aware of any issued/in-flight commands
>> that failed because they were stranded when the state machine moved to
>> CLOSED or DEAD. Previously, nbd_aio_command_completed() would never
>> locate such stranded commands, but adding a common point to fire the
>> notifier for such commands makes it also possible to move those
>> commands to the completion queue.
>>
>
>> +++ b/generator/states.c
>> @@ -111,6 +111,31 @@ send_from_wbuf (struct nbd_handle *h)
>> return 0; /* move to next state */
>> }
>>
>> +/* Forcefully fail any remaining in-flight commands in list */
>> +void abort_commands (struct nbd_handle *h,
>> + struct command_in_flight **list)
>> +{
>> + struct command_in_flight *prev_cmd, *cmd;
>> +
>> + for (cmd = *list, prev_cmd = NULL;
>> + cmd != NULL;
>> + prev_cmd = cmd, cmd = cmd->next) {
>> + if (cmd->cb.notify && cmd->type != NBD_CMD_DISC) {
>> + int error = cmd->error ? cmd->error : ENOTCONN;
>> +
>> + if (cmd->cb.notify (cmd->cb.opaque, cmd->handle, &error) == -1 && error)
>> + cmd->error = error;
>> + }
>> + if (cmd->error == 0)
>> + cmd->error = ENOTCONN;
>> + }
>> + if (prev_cmd) {
>> + prev_cmd->next = h->cmds_done;
>> + h->cmds_done = *list;
>> + *list = NULL;
>> + }
>
> This inserts the list to the head of cmds_done, which breaks its use as
> a FIFO queue for clients using nbd_aio_peek_command_completed to process
> messages in server order. I'll post a fix that keeps things in order.
It also failed to keep in_flight up-to-date.
--
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/20190718/9abbd82d/attachment.sig>
More information about the Libguestfs
mailing list