From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37730) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1avloY-00088f-7K for qemu-devel@nongnu.org; Thu, 28 Apr 2016 09:17:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1avloX-0005dY-5w for qemu-devel@nongnu.org; Thu, 28 Apr 2016 09:17:06 -0400 From: Kevin Wolf Date: Thu, 28 Apr 2016 15:16:29 +0200 Message-Id: <1461849406-29743-1-git-send-email-kwolf@redhat.com> Subject: [Qemu-devel] [PATCH v2 00/17] block: Convert .bdrv_read/write to .bdrv_preadv/pwritev List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-block@nongnu.org Cc: kwolf@redhat.com, mreitz@redhat.com, stefanha@redhat.com, famz@redhat.com, sw@weilnetz.de, qemu-devel@nongnu.org This series introduces a new BlockDriver interface, which will hopefully be the final one, or at least good enough for another few years: .bdrv_preadv/pwritev. It is based on coroutines, vectored, has flags and uses a byte granularity. This is now the preferred interface for new drivers. All drivers still using the legacy interface .bdrv_read/write are converted to the new interface and the emulation code we had for the old interface is removed. Most of the drivers become zero-copy with these patches as they are vectored now; only vvfat continues to allocate a bounce buffer. The less obscure formats (vmdk, vdi, vpc) also natively support byte-aligned requests now. The block layer is still enforcing a minimal alignment of 512, so this isn't actually used yet, but in a next step, we can lift this restriction for drivers that implement .bdrv_preadv/pwritev. v2: - Patch 3 ('block: Support AIO drivers in bdrv_driver_preadv/pwritev()') Removed bdrv_co_io_em in trace-event after removing its user [Eric] - Patch 4 ('block: Rename bdrv_co_do_preadv/writev to bdrv_co_preadv/writev') Fixed some indentations [Eric] - Patches 6, 7, 8, 12 (bochs, cloop, dmg, vmdk): Replaced returns by goto fail to fix missing unlock and qiov leaks [Stefan] - Patch 13 ('vmdk: Implement .bdrv_co_pwritev() interface') Use g_free() instead of free() [Stefan] Kevin Wolf (17): block: Introduce bdrv_driver_preadv() block: Introduce bdrv_driver_pwritev() block: Support AIO drivers in bdrv_driver_preadv/pwritev() block: Rename bdrv_co_do_preadv/writev to bdrv_co_preadv/writev block: Introduce .bdrv_co_preadv/pwritev BlockDriver function bochs: Implement .bdrv_co_preadv() interface cloop: Implement .bdrv_co_preadv() interface dmg: Implement .bdrv_co_preadv() interface vdi: Implement .bdrv_co_preadv() interface vdi: Implement .bdrv_co_pwritev() interface vmdk: Add vmdk_find_offset_in_cluster() vmdk: Implement .bdrv_co_preadv() interface vmdk: Implement .bdrv_co_pwritev() interface vpc: Implement .bdrv_co_preadv() interface vpc: Implement .bdrv_co_pwritev() interface vvfat: Implement .bdrv_co_preadv/pwritev interfaces block: Remove BlockDriver.bdrv_read/write block.c | 2 - block/block-backend.c | 4 +- block/bochs.c | 51 ++++--- block/cloop.c | 38 +++--- block/dmg.c | 40 +++--- block/io.c | 321 ++++++++++++++++++-------------------------- block/iscsi.c | 8 -- block/nbd.c | 9 -- block/raw_bsd.c | 12 +- block/vdi.c | 127 ++++++++++-------- block/vmdk.c | 330 ++++++++++++++++++++++++++++------------------ block/vpc.c | 165 ++++++++++++----------- block/vvfat.c | 55 ++++++-- hw/ide/macio.c | 4 +- include/block/block_int.h | 12 +- trace-events | 1 - 16 files changed, 629 insertions(+), 550 deletions(-) -- 1.8.3.1