]> git.proxmox.com Git - pve-qemu-kvm.git/commitdiff
update backup patches
authorDietmar Maurer <dietmar@proxmox.com>
Fri, 18 Jan 2013 09:53:50 +0000 (10:53 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 18 Jan 2013 09:53:50 +0000 (10:53 +0100)
bump version to 1.3-14

Makefile
debian/changelog
debian/patches/0003-add-backup-related-monitor-commands.patch
debian/patches/0004-introduce-new-vma-archive-format.patch
debian/patches/0005-add-regression-tests-for-backup.patch
debian/patches/0006-add-vm-state-to-backups.patch
debian/patches/0007-use-extra-thread-for-vma-writer.patch

index ac518eb167b17a8ecd04c95da589efe69d9e5eb0..f12de5008a618e04b120d3f28f28a910d4eb3ba1 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@ RELEASE=2.3
 
 # also update debian/changelog
 KVMVER=1.3
-KVMPKGREL=13
+KVMPKGREL=14
 
 KVMPACKAGE=pve-qemu-kvm
 KVMDIR=qemu-kvm
index def4dc04e181ac971bd9330c563526b78ec423ad..206a51e0caff73c6c9297684c42625217346b6fb 100644 (file)
@@ -1,3 +1,9 @@
+pve-qemu-kvm (1.3-14) unstable; urgency=low
+
+  * update backup patches
+
+ -- Proxmox Support Team <support@proxmox.com>  Fri, 18 Jan 2013 10:53:21 +0100
+
 pve-qemu-kvm (1.3-13) unstable; urgency=low
 
   * fix DSA-2608-1 qemu -- buffer overflow (see 
index 6c57ee94cf80a5e091a071905075777becd1a8ea..184c8db7d44ffb069865c980416c28e5defe81dd 100644 (file)
@@ -1,4 +1,4 @@
-From 7bab4498b955ced91ad838fb711e013d9b7ed81f Mon Sep 17 00:00:00 2001
+From 7d2906f7da677d2f2533d1455453dc328cb65590 Mon Sep 17 00:00:00 2001
 From: Dietmar Maurer <dietmar@proxmox.com>
 Date: Tue, 13 Nov 2012 11:27:56 +0100
 Subject: [PATCH v3 3/7] add backup related monitor commands
@@ -13,14 +13,14 @@ could move the whole archive format related code out of qemu.
 Signed-off-by: Dietmar Maurer <dietmar@proxmox.com>
 ---
  backup.h         |   13 ++
- blockdev.c       |  396 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
- hmp-commands.hx  |   31 +++++
+ blockdev.c       |  410 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ hmp-commands.hx  |   31 ++++
  hmp.c            |   63 +++++++++
  hmp.h            |    3 +
  monitor.c        |    7 +
- qapi-schema.json |   91 +++++++++++++
+ qapi-schema.json |   91 ++++++++++++
  qmp-commands.hx  |   27 ++++
- 8 files changed, 631 insertions(+), 0 deletions(-)
+ 8 files changed, 645 insertions(+), 0 deletions(-)
 
 diff --git a/backup.h b/backup.h
 index 87b9942..c6e5d3c 100644
@@ -45,7 +45,7 @@ index 87b9942..c6e5d3c 100644
 +
  #endif /* QEMU_BACKUP_H */
 diff --git a/blockdev.c b/blockdev.c
-index e73fd6e..68a8c55 100644
+index e73fd6e..37edb75 100644
 --- a/blockdev.c
 +++ b/blockdev.c
 @@ -20,6 +20,7 @@
@@ -56,7 +56,7 @@ index e73fd6e..68a8c55 100644
  
  static QTAILQ_HEAD(drivelist, DriveInfo) drives = QTAILQ_HEAD_INITIALIZER(drives);
  
-@@ -1321,6 +1322,401 @@ void qmp_drive_mirror(const char *device, const char *target,
+@@ -1321,6 +1322,415 @@ void qmp_drive_mirror(const char *device, const char *target,
      drive_get_ref(drive_get_by_blockdev(bs));
  }
  
@@ -82,6 +82,8 @@ index e73fd6e..68a8c55 100644
 +typedef struct BackupCB {
 +    BlockDriverState *bs;
 +    uint8_t dev_id;
++    bool started;
++    bool completed;
 +    size_t size;
 +    size_t transferred;
 +    size_t zero_bytes;
@@ -121,18 +123,19 @@ index e73fd6e..68a8c55 100644
 +        backup_state.driver->close_cb(backup_state.writer, &local_err);
 +        error_propagate(&backup_state.error, local_err);
 +        backup_state.writer = NULL;
-+
 +    }
 +
-+    GList *l = backup_state.bcb_list;
-+    while (l) {
-+        BackupCB *bcb = l->data;
-+        drive_put_ref_bh_schedule(drive_get_by_blockdev(bcb->bs));
-+        g_free(l->data);
-+        l = g_list_next(l);
++    if (backup_state.bcb_list) {
++        GList *l = backup_state.bcb_list;
++        while (l) {
++            BackupCB *bcb = l->data;
++            l = g_list_next(l);
++            drive_put_ref_bh_schedule(drive_get_by_blockdev(bcb->bs));
++            g_free(bcb);
++        }
++        g_list_free(backup_state.bcb_list);
++        backup_state.bcb_list = NULL;
 +    }
-+    g_list_free(backup_state.bcb_list);
-+    backup_state.bcb_list = NULL;
 +}
 +
 +static void backup_complete_cb(void *opaque, int ret)
@@ -144,61 +147,73 @@ index e73fd6e..68a8c55 100644
 +    assert(backup_state.driver->complete_cb);
 +    assert(backup_state.driver->close_cb);
 +
-+    drive_put_ref_bh_schedule(drive_get_by_blockdev(bcb->bs));
-+
-+    backup_state.bcb_list = g_list_remove(backup_state.bcb_list, bcb);
++    bcb->completed = true;
 +
 +    backup_state.driver->complete_cb(backup_state.writer, bcb->dev_id, ret);
 +
-+    if (g_list_length(backup_state.bcb_list) == 0) {
-+        backup_cleanup();
-+    } else {
-+        backup_run_next_job();
-+    }
-+
-+    g_free(bcb);
++    backup_run_next_job();
 +}
 +
 +static void backup_cancel(void)
 +{
-+    GList *l = backup_state.bcb_list;
-+    int job_count = 0;
++    if (!backup_state.error) {
++        error_setg(&backup_state.error, "backup cancelled");
++    }
++
++    /* we only need to cancel the running job - backup_run_next_job() cancels
++     * the other jobs */
 +
++    GList *l = backup_state.bcb_list;
 +    while (l) {
 +        BackupCB *bcb = l->data;
 +        l = g_list_next(l);
-+        if (bcb->bs->job) {
-+            block_job_cancel(bcb->bs->job);
-+            job_count++;
-+        }
++      BlockJob *job = bcb->bs->job;
++        if (!bcb->completed && job) {
++            block_job_cancel(job);
++            /* make sure we call the complete callback */
++            if (!job->co) {
++                block_job_completed(job, -1);
++            }
++            break;
++       }
 +    }
 +
-+    if (!job_count) {
++    if (!l) { /* all jobs completed */
 +        backup_cleanup();
 +    }
 +}
 +
 +void qmp_backup_cancel(Error **errp)
 +{
-+    if (!backup_state.error) {
-+        error_setg(&backup_state.error, "backup cancelled");
-+    }
-+
 +    backup_cancel();
 +}
 +
 +static void backup_run_next_job(void) 
 +{
 +    GList *l = backup_state.bcb_list;
-+    if (l) {
++    while(l) {
 +        BackupCB *bcb = l->data;
-+        backup_job_start(bcb->bs);
++        l = g_list_next(l);
++
++        if (bcb->bs && bcb->bs->job && !bcb->completed) {
++            if (!bcb->started) {
++                bcb->started = true;
++                if (!backup_state.error) {
++                    backup_job_start(bcb->bs);
++                } else {
++                    block_job_completed(bcb->bs->job, -1);
++                }
++            }
++            return;
++        }
 +    }
++
++    backup_cleanup();
 +}
 +
 +static void backup_start_jobs(void)
 +{
-+    /* start all jobs (one for each device) */
++    /* create all jobs (one for each device), start first one */
 +    GList *l = backup_state.bcb_list;
 +    while (l) {
 +        BackupCB *bcb = l->data;
@@ -206,14 +221,13 @@ index e73fd6e..68a8c55 100644
 +
 +        if (backup_job_create(bcb->bs, backup_dump_cb, backup_complete_cb,
 +                              bcb) != 0) {
++            error_setg(&backup_state.error, "backup_job_create failed");
 +            backup_cancel();
-+            break;
++            return;
 +        }
 +    }
 +
-+    if (!l) { /* no errors */
-+        backup_run_next_job();
-+    }
++    backup_run_next_job();
 +}
 +
 +char *qmp_backup(const char *backupfile, bool has_format, BackupFormat format,
index 29fa10e4c69dc4fcc3a6ecd692416b1f86aa0cad..5be20d37c97f68c769c0618b7ebb4660cde3b969 100644 (file)
@@ -1,4 +1,4 @@
-From 77a6564c9985c37990c3e90f558f2ef48d6d5f15 Mon Sep 17 00:00:00 2001
+From 69a3f26bdbe445ce01f096b9d5e1aaf45ad98b81 Mon Sep 17 00:00:00 2001
 From: Dietmar Maurer <dietmar@proxmox.com>
 Date: Tue, 13 Nov 2012 11:11:38 +0100
 Subject: [PATCH v3 4/7] introduce new vma archive format
@@ -57,7 +57,7 @@ index cb46be5..b5732e2 100644
  block-obj-$(CONFIG_POSIX) += event_notifier-posix.o aio-posix.o
  block-obj-$(CONFIG_WIN32) += event_notifier-win32.o aio-win32.o
 diff --git a/blockdev.c b/blockdev.c
-index 68a8c55..80cb04d 100644
+index 37edb75..0632c57 100644
 --- a/blockdev.c
 +++ b/blockdev.c
 @@ -21,6 +21,7 @@
@@ -68,7 +68,7 @@ index 68a8c55..80cb04d 100644
  
  static QTAILQ_HEAD(drivelist, DriveInfo) drives = QTAILQ_HEAD_INITIALIZER(drives);
  
-@@ -1493,10 +1494,11 @@ char *qmp_backup(const char *backupfile, bool has_format, BackupFormat format,
+@@ -1507,10 +1508,11 @@ char *qmp_backup(const char *backupfile, bool has_format, BackupFormat format,
      /* Todo: try to auto-detect format based on file name */
      format = has_format ? format : BACKUP_FORMAT_VMA;
  
index 7f9545ad6949220fb4415642c51b3de75f8b7938..43b37f08a542e6e2e61c7e9b32414ccdb5c10dd7 100644 (file)
@@ -1,4 +1,4 @@
-From 37ec0e0badcbf3cc6d3959f1867b8a1d6db3be13 Mon Sep 17 00:00:00 2001
+From 6df0d37601a8dd765bb30ae456e194155a85d0a4 Mon Sep 17 00:00:00 2001
 From: Dietmar Maurer <dietmar@proxmox.com>
 Date: Wed, 14 Nov 2012 09:57:04 +0100
 Subject: [PATCH v3 5/7] add regression tests for backup
index 5842e1e4092f364df06832c9438558808586fe96..c27ac7f5ce5f82ce36c242df963a4cc9df2b67d0 100644 (file)
@@ -1,4 +1,4 @@
-From 9c8e193692a2f96116793ddbe3fa89650985f272 Mon Sep 17 00:00:00 2001
+From 4f629e5e088e63ea8e73d69e4e4beabc251d31a1 Mon Sep 17 00:00:00 2001
 From: Dietmar Maurer <dietmar@proxmox.com>
 Date: Thu, 29 Nov 2012 10:46:49 +0100
 Subject: [PATCH v3 6/7] add vm state to backups
@@ -12,7 +12,7 @@ Signed-off-by: Dietmar Maurer <dietmar@proxmox.com>
  3 files changed, 200 insertions(+), 5 deletions(-)
 
 diff --git a/blockdev.c b/blockdev.c
-index 80cb04d..96d7a3b 100644
+index 0632c57..f19eb02 100644
 --- a/blockdev.c
 +++ b/blockdev.c
 @@ -22,6 +22,8 @@
@@ -35,8 +35,8 @@ index 80cb04d..96d7a3b 100644
  } backup_state;
  
  typedef struct BackupCB {
-@@ -1479,10 +1485,170 @@ static void backup_start_jobs(void)
-     }
+@@ -1493,10 +1499,170 @@ static void backup_start_jobs(void)
+     backup_run_next_job();
  }
  
 +static int backup_state_close(void *opaque)
@@ -207,7 +207,7 @@ index 80cb04d..96d7a3b 100644
  {
      BlockDriverState *bs;
      Error *local_err = NULL;
-@@ -1491,6 +1657,8 @@ char *qmp_backup(const char *backupfile, bool has_format, BackupFormat format,
+@@ -1505,6 +1671,8 @@ char *qmp_backup(const char *backupfile, bool has_format, BackupFormat format,
      gchar **devs = NULL;
      GList *bcblist = NULL;
  
@@ -216,7 +216,7 @@ index 80cb04d..96d7a3b 100644
      /* Todo: try to auto-detect format based on file name */
      format = has_format ? format : BACKUP_FORMAT_VMA;
  
-@@ -1572,6 +1740,22 @@ char *qmp_backup(const char *backupfile, bool has_format, BackupFormat format,
+@@ -1586,6 +1754,22 @@ char *qmp_backup(const char *backupfile, bool has_format, BackupFormat format,
      size_t total = 0;
  
      /* register all devices for vma writer */
@@ -239,7 +239,7 @@ index 80cb04d..96d7a3b 100644
      l = bcblist;
      while (l) {
          BackupCB *bcb = l->data;
-@@ -1635,6 +1819,9 @@ char *qmp_backup(const char *backupfile, bool has_format, BackupFormat format,
+@@ -1649,6 +1833,9 @@ char *qmp_backup(const char *backupfile, bool has_format, BackupFormat format,
      backup_state.total = total;
      backup_state.transferred = 0;
      backup_state.zero_bytes = 0;
@@ -249,7 +249,7 @@ index 80cb04d..96d7a3b 100644
  
      /* Grab a reference so hotplug does not delete the
       * BlockDriverState from underneath us.
-@@ -1646,7 +1833,12 @@ char *qmp_backup(const char *backupfile, bool has_format, BackupFormat format,
+@@ -1660,7 +1847,12 @@ char *qmp_backup(const char *backupfile, bool has_format, BackupFormat format,
          drive_get_ref(drive_get_by_blockdev(bcb->bs));
      }
  
index f7836c1c5729309ab7994fd43ec99ce8935c03f6..10dba436fca31e2d0adebb4fc61abcf548f229ff 100644 (file)
@@ -1,4 +1,4 @@
-From 9cf799746fb3b21362fd62574cd76bfa14a24070 Mon Sep 17 00:00:00 2001
+From a6f324d47b810809de2a6106849527c6a9590175 Mon Sep 17 00:00:00 2001
 From: Dietmar Maurer <dietmar@proxmox.com>
 Date: Mon, 14 Jan 2013 08:05:40 +0100
 Subject: [PATCH v3 7/7] use extra thread for vma writer