qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 4/4] linux-aio: simplify removal of completed io


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH 4/4] linux-aio: simplify removal of completed iocbs from the list
Date: Thu, 11 Dec 2014 14:15:18 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.3.0


On 11/12/2014 14:13, Kevin Wolf wrote:
>> > +#define QSIMPLEQ_SPLIT_AFTER(head1, head2, elm, field) do {             \
>> > +    if (((head1)->sqh_first = (head2)->sqh_first) == NULL) {            \
>> > +        (head1)->sqh_last = &(head1)->sqh_first;                        \
>> > +    } else {                                                            \
>> > +        (head1)->sqh_last = &(elm)->field.sqe_next;                     \
>> > +        if (((head2)->sqh_first = (elm)->field.sqe_next) == NULL) {     \
>> > +            (head2)->sqh_last = &(head2)->sqh_first;                    \
>> > +        }                                                               \
>> > +    }                                                                   \
>> > +} while (/*CONSTCOND*/0)
> Wouldn't it be easier to write a macro that doesn't split a queue in
> two, but simply removes everything up to a given element?

Yeah, though I figured that in the common case you'd have to free those
elements or otherwise process them.  But I left this patch last because
I wasn't sure about the API.  Feel free to ignore it, also given the
above comment about EAGAIN.

Paolo

> Anyway, if you really want to implement a split operation, I think you
> also need to break the actual chain, i.e. (head1)->sqh_last.sqe_next =
> NULL.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]