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


Reply via email to