mbox series

[v9,00/13] backup-top filter driver for backup

Message ID 20190826161312.489398-1-vsementsov@virtuozzo.com
Headers show
Series backup-top filter driver for backup | expand

Message

Vladimir Sementsov-Ogievskiy Aug. 26, 2019, 4:12 p.m. UTC
Hi all!

These series introduce backup-top driver. It's a filter-node, which
do copy-before-write operation. Mirror uses filter-node for handling
guest writes, let's move to filter-node (from write-notifiers) for
backup too.

I decided to postpone all these "preparation" and "improvement"
series, as it seems we will never do the core thing in such way.

v9:

01: rebased, it's from "backup improvements" series

02-05: new patches, introduction of block-copy

06: unchanged

07-08: new iotests preparation

10-11: unchanged

12:
backup-top filter is simplified: it don't do copy operation
by hands but through block-copy, and it don't have second "target"
child anymore. So the state is reduced to only two fields: 
block-copy state and "active".

What else?
1. filter-node-name parameter added
2. "active" parameter. I failed on my way to make bdrv_append
firstly do bdrv_replace_node and then bdrv_set_backing_hd, as it
leads to much problems, block-layer is unprepared for child-less
filters. So, it's a lot simpler to cheat a bit with permissions,
and don't require unshared WRITE during appending.
3. filter is not finished in this patch, as block_copy is not
finished too, you can see a TODO and abort() in backup_top_cbw.

13:
- filter-node-name added
- backup_clean simplified: don't bother with keeping block job
  blk on backup-top filter, it's not necessary.
- locking is all done in block-copy code
- itests changed in different manner
- I'm afraid that's not a full list, patch really changed
  significantly.

The series also needs one small fix:
  "[PATCH] block: fix permission update in bdrv_replace_node"
Based-on: <20190824100740.61635-1-vsementsov@virtuozzo.com>

Vladimir Sementsov-Ogievskiy (13):
  block/backup: fix backup_cow_with_offload for last cluster
  block/backup: split shareable copying part from backup_do_cow
  block/backup: introduce BlockCopyState
  block/backup: adjust block-copy functions style
  block: move block_copy from block/backup.c to separate file
  block: teach bdrv_debug_breakpoint skip filters with backing
  iotests: prepare 124 and 257 bitmap querying for backup-top filter
  iotests: 257: drop unused Drive.device field
  iotests: 257: drop device_add
  block/io: refactor wait_serialising_requests
  block: add lock/unlock range functions
  block: introduce backup-top filter driver
  block/backup: use backup-top instead of write notifiers

 qapi/block-core.json          |   8 +-
 block/backup-top.h            |  37 ++
 include/block/block-copy.h    |  59 +++
 include/block/block_int.h     |   5 +
 block.c                       |  34 +-
 block/backup-top.c            | 241 ++++++++++++
 block/backup.c                | 411 +++----------------
 block/block-copy.c            | 320 +++++++++++++++
 block/io.c                    |  68 +++-
 block/replication.c           |   2 +-
 blockdev.c                    |   1 +
 block/Makefile.objs           |   3 +
 block/trace-events            |  14 +-
 tests/qemu-iotests/056        |   2 +-
 tests/qemu-iotests/124        |   3 +-
 tests/qemu-iotests/257        |  81 ++--
 tests/qemu-iotests/257.out    | 714 ++++++++++++++--------------------
 tests/qemu-iotests/iotests.py |  22 ++
 18 files changed, 1163 insertions(+), 862 deletions(-)
 create mode 100644 block/backup-top.h
 create mode 100644 include/block/block-copy.h
 create mode 100644 block/backup-top.c
 create mode 100644 block/block-copy.c