qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Fam Zheng <famz@redhat.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, hbrock@redhat.com, rjones@redhat.com,
	imain@redhat.com, stefanha@redhat.com, pbonzini@redhat.com
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	[thread overview]
Message-ID: <1385438728-17924-1-git-send-email-famz@redhat.com> (raw)

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	other threads:[~2013-11-26  4:05 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-26  4:05 Fam Zheng [this message]
2013-11-26  4:05 ` [Qemu-devel] [PATCH v5 1/7] qapi: Add BlockOperationType enum Fam Zheng
2013-11-26 16:21   ` Paolo Bonzini
2013-11-26  4:05 ` [Qemu-devel] [PATCH v5 2/7] block: Introduce op_blockers to BlockDriverState Fam Zheng
2013-11-26  4:05 ` [Qemu-devel] [PATCH v5 3/7] block: Replace in_use with operation blocker Fam Zheng
2013-11-26  4:05 ` [Qemu-devel] [PATCH v5 4/7] block: Add checks of blocker in block operations Fam Zheng
2013-11-26 16:13   ` Paolo Bonzini
2013-11-28  3:39     ` Fam Zheng
2013-11-26  4:05 ` [Qemu-devel] [PATCH v5 5/7] block: Parse "backing" option to reference existing BDS Fam Zheng
2013-11-26 16:18   ` Paolo Bonzini
2013-11-27  0:56     ` Fam Zheng
2013-11-26  4:05 ` [Qemu-devel] [PATCH v5 6/7] qmp: add command 'blockdev-backup' Fam Zheng
2013-11-26  4:05 ` [Qemu-devel] [PATCH v5 7/7] block: Allow backup on referenced named BlockDriverState Fam Zheng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1385438728-17924-1-git-send-email-famz@redhat.com \
    --to=famz@redhat.com \
    --cc=hbrock@redhat.com \
    --cc=imain@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rjones@redhat.com \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).