From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:51702) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RyQHF-00031a-5v for qemu-devel@nongnu.org; Fri, 17 Feb 2012 11:03:22 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RyQH9-0002hn-9H for qemu-devel@nongnu.org; Fri, 17 Feb 2012 11:03:17 -0500 Received: from mail-pw0-f45.google.com ([209.85.160.45]:61791) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RyQH9-0002hA-4e for qemu-devel@nongnu.org; Fri, 17 Feb 2012 11:03:11 -0500 Received: by pbbro12 with SMTP id ro12so4686407pbb.4 for ; Fri, 17 Feb 2012 08:03:08 -0800 (PST) Message-ID: <4F3E7A37.3020108@codemonkey.ws> Date: Fri, 17 Feb 2012 10:03:03 -0600 From: Anthony Liguori MIME-Version: 1.0 References: <1326472445-25966-1-git-send-email-pbonzini@redhat.com> <1326472445-25966-6-git-send-email-pbonzini@redhat.com> In-Reply-To: <1326472445-25966-6-git-send-email-pbonzini@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 5/5] block: use QSLIST for the AIO free list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: Kevin Wolf , qemu-devel@nongnu.org On 01/13/2012 10:34 AM, Paolo Bonzini wrote: > QSLIST is equivalent to an open-coded free list, use it. > > Signed-off-by: Paolo Bonzini Surprisingly enough, this breaks hotplug (causes QEMU to segv). I'll drop this patch and you can bring the next one in through Kevin's queue to make sure it gets adequate review. Regards, Anthony Liguori > --- > block.c | 9 ++++----- > block_int.h | 4 ++-- > 2 files changed, 6 insertions(+), 7 deletions(-) > > diff --git a/block.c b/block.c > index 3f072f6..acb54b1 100644 > --- a/block.c > +++ b/block.c > @@ -3242,9 +3242,9 @@ void *qemu_aio_get(AIOPool *pool, BlockDriverState *bs, > { > BlockDriverAIOCB *acb; > > - if (pool->free_aiocb) { > - acb = pool->free_aiocb; > - pool->free_aiocb = acb->next; > + if (!QSLIST_EMPTY(pool->free_aiocb)) { > + acb = QSLIST_FIRST(pool->free_aiocb); > + QSLIST_REMOVE_HEAD(pool->free_aiocb, next); > } else { > acb = g_malloc0(pool->aiocb_size); > acb->pool = pool; > @@ -3259,8 +3259,7 @@ void qemu_aio_release(void *p) > { > BlockDriverAIOCB *acb = (BlockDriverAIOCB *)p; > AIOPool *pool = acb->pool; > - acb->next = pool->free_aiocb; > - pool->free_aiocb = acb; > + QSLIST_INSERT_HEAD(pool->free_aiocb, acb, next); > } > > /**************************************************************/ > diff --git a/block_int.h b/block_int.h > index 311bd2a..c592e54 100644 > --- a/block_int.h > +++ b/block_int.h > @@ -56,7 +56,7 @@ typedef struct BdrvTrackedRequest BdrvTrackedRequest; > typedef struct AIOPool { > void (*cancel)(BlockDriverAIOCB *acb); > int aiocb_size; > - BlockDriverAIOCB *free_aiocb; > + QSLIST_HEAD(, BlockDriverAIOCB) *free_aiocb; > } AIOPool; > > typedef struct BlockIOLimit { > @@ -268,7 +268,7 @@ struct BlockDriverAIOCB { > BlockDriverState *bs; > BlockDriverCompletionFunc *cb; > void *opaque; > - BlockDriverAIOCB *next; > + QSLIST_ENTRY(BlockDriverAIOCB) next; > }; > > void get_tmp_filename(char *filename, int size);