From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:33701) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RTDfl-0002So-DP for qemu-devel@nongnu.org; Wed, 23 Nov 2011 09:19:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RTDff-0001Xq-Ls for qemu-devel@nongnu.org; Wed, 23 Nov 2011 09:19:37 -0500 Received: from mx1.redhat.com ([209.132.183.28]:61301) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RTDff-0001Xk-4U for qemu-devel@nongnu.org; Wed, 23 Nov 2011 09:19:31 -0500 Message-ID: <4ECD01AB.7090508@redhat.com> Date: Wed, 23 Nov 2011 15:22:35 +0100 From: Kevin Wolf MIME-Version: 1.0 References: <1321274666-14041-1-git-send-email-stefanha@linux.vnet.ibm.com> In-Reply-To: <1321274666-14041-1-git-send-email-stefanha@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 0/9] block: replace .bdrv_is_allocated() with .bdrv_co_is_allocated() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi Cc: Paolo Bonzini , Marcelo Tosatti , qemu-devel@nongnu.org Am 14.11.2011 13:44, schrieb Stefan Hajnoczi: > The bdrv_is_allocated() interface is not suitable for use while the VM is > running. It is a synchronous interface so it may block the running VM for > arbitrary amounts of time. It also assumes it is the only block driver > operation and there is a risk that internal state could be corrupted if > asynchronous I/O is currently pending. > > This patch series refactors the block layer so that the bdrv_is_allocated() > operation is performed internally in coroutine context. We can then introduce > a new public bdrv_co_is_allocated() function that is suitable for use when the > VM is running. > > Making these changes without breaking git bisect means we need to first > introduce BlockDriver .bdrv_co_is_allocated() and add wrapper code into > bdrv_is_allocated() so existing callers can use converted BlockDrivers. > > After converting all block drivers there are no .bdrv_is_allocated() functions > left and the interface can be removed from BlockDriver. > > Finally, we can add the new public bdrv_co_is_allocated() public interface and > turn the old bdrv_is_allocated() into a wrapper. > > This series is a prerequisite for copy-on-read, which needs to check whether > sectors are allocated while the VM is running. > > v2: > * Rebased on kevin/block and resolved conflicts > > Stefan Hajnoczi (9): > block: use public bdrv_is_allocated() interface > block: add .bdrv_co_is_allocated() > qed: convert to .bdrv_co_is_allocated() > block: convert qcow2, qcow2, and vmdk to .bdrv_co_is_allocated() > vvfat: convert to .bdrv_co_is_allocated() > vdi: convert to .bdrv_co_is_allocated() > cow: convert to .bdrv_co_is_allocated() > block: drop .bdrv_is_allocated() interface > block: add bdrv_co_is_allocated() interface > > block.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++----- > block.h | 2 + > block/cow.c | 8 +++--- > block/qcow.c | 8 ++++-- > block/qcow2.c | 13 +++++++---- > block/qed.c | 15 ++++++++++--- > block/vdi.c | 6 ++-- > block/vmdk.c | 8 ++++-- > block/vvfat.c | 4 +- > block_int.h | 4 +- > 10 files changed, 94 insertions(+), 32 deletions(-) Thanks, applied all to the block branch (for 1.1) Kevin