From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39366) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZKLvx-0006PQ-Rm for qemu-devel@nongnu.org; Wed, 29 Jul 2015 03:37:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZKLvu-00005Q-Lg for qemu-devel@nongnu.org; Wed, 29 Jul 2015 03:37:49 -0400 Sender: Paolo Bonzini References: <1438144934-23619-1-git-send-email-famz@redhat.com> <1438144934-23619-12-git-send-email-famz@redhat.com> From: Paolo Bonzini Message-ID: <55B882C1.8070500@redhat.com> Date: Wed, 29 Jul 2015 09:37:37 +0200 MIME-Version: 1.0 In-Reply-To: <1438144934-23619-12-git-send-email-famz@redhat.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 11/11] block: Only poll block layer fds in bdrv_aio_poll List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Fam Zheng , qemu-devel@nongnu.org Cc: kwolf@redhat.com, qemu-block@nongnu.org, stefanha@redhat.com On 29/07/2015 06:42, Fam Zheng wrote: > @@ -2613,6 +2613,8 @@ bool bdrv_aio_poll(AioContext *ctx, bool blocking) > { > bool ret; > > + aio_disable_clients(ctx, AIO_CLIENT_DATAPLANE | AIO_CLIENT_NBD_SERVER); > ret = aio_poll(ctx, blocking); > + aio_enable_clients(ctx, AIO_CLIENT_DATAPLANE | AIO_CLIENT_NBD_SERVER); > return ret; This is not enough, because another thread's aio_poll can sneak in between calls to bdrv_aio_poll if the AioContext lock is released, and they will use the full set of clients. Similar to your v1, it works with the large critical sections we currently have, but it has the same problem in the longer term. The clients have to be disabled around calls to bdrv_drain, as you were doing when you had pause/resume notifiers. Patches 1-8 however are ok. Paolo