qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v5 0/7] Drop in_use from BlockDriverState and enable


From: Fam Zheng
Subject: [Qemu-devel] [PATCH v5 0/7] Drop in_use from BlockDriverState and enable point-in-time snapshot exporting over NBD
Date: Tue, 26 Nov 2013 12:05:21 +0800

This series adds for point-in-time snapshot NBD exporting based on
blockdev-backup (variant of drive-backup with existing device as target).

We get a thin point-in-time snapshot by COW mechanism of drive-backup, and
export it through built in NBD server. The steps are as below:

 1. (SHELL) qemu-img create -f qcow2 BACKUP.qcow2 <source size here>

    (Alternatively we can use -o backing_file=RUNNING-VM.img to omit explicitly
    providing the size by ourselves, but it's risky because RUNNING-VM.qcow2 is
    used r/w by guest. Whether or not setting backing file in the image file
    doesn't matter, as we are going to override the backing hd in the next
    step)

 2. (QMP) blockdev-add backing=source-drive file.driver=file 
file.filename=BACKUP.qcow2 id=target0 if=none driver=qcow2

    (where ide0-hd0 is the running BlockDriverState name for
    RUNNING-VM.img. This patch implements "backing=" option to override
    backing_hd for added drive)

 3. (QMP) blockdev-backup device=source-drive sync=none target=target0

    (this is the QMP command introduced by this series, which use a named
    device as target of drive-backup)

 4. (QMP) nbd-server-add device=target0

When image fleecing done:

 1. (QMP) block-job-complete device=ide0-hd0

 2. (HMP) drive_del target0

 3. (SHELL) rm BACKUP.qcow2

v5: Address reviewer comments:
    [01/07] qapi: Add BlockOperationType enum
            Add comments for types. (Eric)
            Remove "nbd-server-add", "passwd" and "set-io-throttle".
            
    [02/07] block: Introduce op_blockers to BlockDriverState
            Fix wording of commit message. (Kevin)
            Fix spacing and compiler error for assertion. (Kevin)
            Allow NULL errp in bdrv_op_is_blocked. (Stefan)
            
    [03/07] block: Replace in_use with operation blocker
            Separate "source" and "target" for backup operation check. (Kevin)
            
    [04/07] block: Add checks of blocker in block operations
            Removed checks for nbd, passwd and throttle. (Paolo)
            
    [05/07] block: Parse "backing" option to reference existing BDS
            Moved backing reference code to bdrv_open_backing_file. (Kevin)
            Unblock and free blocker in bdrv_close unconditionally. (Kevin)
            
    [06/07] qmp: add command 'blockdev-backup'
            Check op blocker before creating target in qmp_drive_backup.
            Fix "." in EOL. (Eric)
            Fix (Since 1.8). (Eric)
            Fix comment indent, remove "mode" in hmp-commands.hx. (Kevin)

    [07/07] block: Allow backup on referenced named BlockDriverState
            Only allow "source" on backing referenced BDS. (Kevin)

    Experimental for reviewers: the side by side diff against previous series:

        http://goo.gl/x6s2cI

v4: Dropping RFC, this series tries to address the crashing cases with an added
    safety mechanics.
    
    In the first half of series, replace the in_use flag with an operation
    blocker list, and block all operations on named backing hd:

    [01/07] qapi: Add BlockOperationType enum
    [02/07] block: Introduce op_blockers to BlockDriverState
    [03/07] block: Replace in_use with operation blocker
    [04/07] block: Add checks of blocker in block operations

    The second half enables point in time snapshot over NBD, with fixes from
    last revision:

    [05/07] block: Parse "backing" option to reference existing BDS
            Fix NULL dereference if device not found.
    [06/07] qmp: add command 'blockdev-backup'
            Moved some checks into backup_run. (Paolo)
    [07/07] block: Allow backup on referenced named BlockDriverState
            New. Removes one specific blocker on backing referenced BDS, so we
            can start a backup job on it.

Fam Zheng (7):
  qapi: Add BlockOperationType enum
  block: Introduce op_blockers to BlockDriverState
  block: Replace in_use with operation blocker
  block: Add checks of blocker in block operations
  block: Parse "backing" option to reference existing BDS
  qmp: add command 'blockdev-backup'
  block: Allow backup on referenced named BlockDriverState

 block-migration.c               |   8 ++-
 block.c                         | 120 +++++++++++++++++++++++++++++++++++-----
 block/backup.c                  |  21 +++++++
 block/mirror.c                  |   2 +-
 blockdev.c                      |  93 +++++++++++++++++++++++++++----
 blockjob.c                      |  12 ++--
 hw/block/dataplane/virtio-blk.c |  16 ++++--
 include/block/block.h           |  11 +++-
 include/block/block_int.h       |   9 ++-
 include/block/blockjob.h        |   3 +
 qapi-schema.json                |  98 ++++++++++++++++++++++++++++++++
 qmp-commands.hx                 |  44 +++++++++++++++
 12 files changed, 395 insertions(+), 42 deletions(-)

-- 
1.8.4.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]