From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37028) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xz3hf-0001s5-4n for qemu-devel@nongnu.org; Thu, 11 Dec 2014 08:22:53 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Xz3hW-0006mq-LS for qemu-devel@nongnu.org; Thu, 11 Dec 2014 08:22:44 -0500 Received: from mx1.redhat.com ([209.132.183.28]:45082) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xz3hW-0006kc-DU for qemu-devel@nongnu.org; Thu, 11 Dec 2014 08:22:38 -0500 Date: Thu, 11 Dec 2014 14:22:13 +0100 From: Kevin Wolf Message-ID: <20141211132213.GD23351@noname.redhat.com> References: <1418223122-22481-1-git-send-email-pbonzini@redhat.com> <1418223122-22481-5-git-send-email-pbonzini@redhat.com> <20141211131336.GC23351@noname.redhat.com> <548998E6.9030408@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <548998E6.9030408@redhat.com> Subject: Re: [Qemu-devel] [PATCH 4/4] linux-aio: simplify removal of completed iocbs from the list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: ming.lei@canonical.com, pl@kamp.de, qemu-devel@nongnu.org, stefanha@redhat.com Am 11.12.2014 um 14:15 hat Paolo Bonzini geschrieben: > > > 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. I actually like the idea of this patch. > > 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. Can you please fix this one and send a v2? The EAGAIN thing doesn't need to be fixed because it's ignored anyway. A cleanup is unrelated and can be done later. As for the abort() in patch 2, I'll leave the decision to you. Overall it looks like a nice series. Kevin