From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47275) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZrSjm-00016k-Ds for qemu-devel@nongnu.org; Wed, 28 Oct 2015 11:34:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZrSjh-00047e-1V for qemu-devel@nongnu.org; Wed, 28 Oct 2015 11:34:06 -0400 From: Juan Quintela In-Reply-To: <1446044465-19312-5-git-send-email-den@openvz.org> (Denis V. Lunev's message of "Wed, 28 Oct 2015 18:01:05 +0300") References: <1446044465-19312-1-git-send-email-den@openvz.org> <1446044465-19312-5-git-send-email-den@openvz.org> Date: Wed, 28 Oct 2015 16:33:58 +0100 Message-ID: <871tcf80t5.fsf@neno.neno> MIME-Version: 1.0 Content-Type: text/plain Subject: Re: [Qemu-devel] [PATCH 4/4] migration: add missed aio_context_acquire into HMP snapshot code Reply-To: quintela@redhat.com List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Denis V. Lunev" Cc: Amit Shah , Paolo Bonzini , qemu-devel@nongnu.org, Stefan Hajnoczi , qemu-stable@nongnu.org "Denis V. Lunev" wrote: > aio_context should be locked in the similar way as was done in QMP > snapshot creation in the other case there are a lot of possible > troubles if native AIO mode is enabled for disk. > > - the command can hang (HMP thread) with missed wakeup (the operation is > actually complete) > io_submit > ioq_submit > laio_submit > raw_aio_submit > raw_aio_readv > bdrv_co_io_em > bdrv_co_readv_em > bdrv_aligned_preadv > bdrv_co_do_preadv > bdrv_co_do_readv > bdrv_co_readv > qcow2_co_readv > bdrv_aligned_preadv > bdrv_co_do_pwritev > bdrv_rw_co_entry > > - QEMU can assert in coroutine re-enter > __GI_abort > qemu_coroutine_enter > bdrv_co_io_em_complete > qemu_laio_process_completion > qemu_laio_completion_bh > aio_bh_poll > aio_dispatch > aio_poll > iothread_run > > qemu_fopen_bdrv and bdrv_fclose are used in real snapshot operations only > along with block drivers. This change should influence only HMP snapshot > operations. > > AioContext lock is reqursive. Thus nested locking should not be a problem. > > Signed-off-by: Denis V. Lunev > CC: Stefan Hajnoczi > CC: Paolo Bonzini > CC: Juan Quintela > CC: Amit Shah Reviewed-by: Juan Quintela Should this one go through the block layer? I guess that the block layer, but otherwise, I will get it. > - return bdrv_flush(opaque); > + BlockDriverState *bs = (BlockDriverState *)opaque; Cast not needed. BlockDriverState * bs = opaque; is even better. Thanks, Juan.