-From 69a3f26bdbe445ce01f096b9d5e1aaf45ad98b81 Mon Sep 17 00:00:00 2001
+From bb18514bdcb93d9b2906bfb2a8aa9fd6c2265710 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
+Subject: [PATCH v3 4/6] introduce new vma archive format
This is a very simple archive format, see docs/specs/vma_spec.txt
Makefile.objs | 2 +-
blockdev.c | 6 +-
docs/specs/vma_spec.txt | 24 ++
- vma-reader.c | 801 ++++++++++++++++++++++++++++++++++++++++
- vma-writer.c | 931 +++++++++++++++++++++++++++++++++++++++++++++++
- vma.c | 561 ++++++++++++++++++++++++++++
- vma.h | 146 ++++++++
- 8 files changed, 2470 insertions(+), 4 deletions(-)
+ vma-reader.c | 801 +++++++++++++++++++++++++++++++++++++++++
+ vma-writer.c | 914 +++++++++++++++++++++++++++++++++++++++++++++++
+ vma.c | 561 +++++++++++++++++++++++++++++
+ vma.h | 145 ++++++++
+ 8 files changed, 2452 insertions(+), 4 deletions(-)
create mode 100644 docs/specs/vma_spec.txt
create mode 100644 vma-reader.c
create mode 100644 vma-writer.c
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 37edb75..0632c57 100644
+index bd2198e..99f3e02 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -21,6 +21,7 @@
static QTAILQ_HEAD(drivelist, DriveInfo) drives = QTAILQ_HEAD_INITIALIZER(drives);
-@@ -1507,10 +1508,11 @@ char *qmp_backup(const char *backupfile, bool has_format, BackupFormat format,
+@@ -1508,10 +1509,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;
+
diff --git a/vma-writer.c b/vma-writer.c
new file mode 100644
-index 0000000..688af4b
+index 0000000..3f5bbd5
--- /dev/null
+++ b/vma-writer.c
-@@ -0,0 +1,931 @@
+@@ -0,0 +1,914 @@
+/*
+ * VMA: Virtual Machine Archive
+ *
+#include "qemu_socket.h"
+#include "qemu-coroutine.h"
+#include "qemu-aio.h"
-+#include "qemu/ratelimit.h"
+#include "vma.h"
+#include "block.h"
+#include "monitor.h"
+ CoMutex writer_lock;
+ CoMutex flush_lock;
+ Coroutine *co_writer;
-+ RateLimit limit;
+
+ /* drive informations */
+ VmaStreamInfo stream_info[256];
+ return bytes;
+}
+
-+VmaWriter *vma_writer_create(const char *filename, uuid_t uuid, int64_t speed,
-+ Error **errp)
++VmaWriter *vma_writer_create(const char *filename, uuid_t uuid, Error **errp)
+{
+ const char *p;
+
+
+ uuid_copy(vmaw->uuid, uuid);
+
-+ if (speed <= 0) {
-+ speed = 10*1024*1024*1024LLU; /* default 10GB/s */
-+ }
-+
-+ ratelimit_set_speed(&vmaw->limit, speed, 100000000ULL /* 0.1 sec */);
-+
+ return vmaw;
+
+err:
+
+ qemu_co_mutex_lock(&vmaw->flush_lock);
+
-+ /* rate limit */
-+ uint64_t delay_ns = ratelimit_calculate_delay(&vmaw->limit, bytes);
-+ if (delay_ns) {
-+ DPRINTF("DELAY %zd\n", delay_ns);
-+ co_sleep_ns(rt_clock, delay_ns);
-+ }
-+
+ /* wait until buffer is available */
+ while (vmaw->outbuf_count >= (VMA_BLOCKS_PER_EXTENT - 1)) {
+ ret = vma_writer_flush(vmaw);
+ return vma_writer_add_config(vmaw, name, data, data_len);
+}
+
-+static void *vma_open_cb(const char *filename, uuid_t uuid, int64_t speed,
-+ Error **errp)
++static void *vma_open_cb(const char *filename, uuid_t uuid, Error **errp)
+{
-+ return vma_writer_create(filename, uuid, speed, errp);
++ return vma_writer_create(filename, uuid, errp);
+}
+
+const BackupDriver backup_vma_driver = {
+
diff --git a/vma.c b/vma.c
new file mode 100644
-index 0000000..9b47b92
+index 0000000..5d13906
--- /dev/null
+++ b/vma.c
@@ -0,0 +1,561 @@
+ uuid_generate(uuid);
+
+ Error *local_err = NULL;
-+ VmaWriter *vmaw = vma_writer_create(archivename, uuid, 0, &local_err);
++ VmaWriter *vmaw = vma_writer_create(archivename, uuid, &local_err);
+
+ if (vmaw == NULL) {
+ g_error("%s", error_get_pretty(local_err));
+ bcb->dev_id = dev_id;
+
+ if (backup_job_create(bs, backup_dump_cb, backup_complete_cb,
-+ bcb) < 0) {
++ bcb, 0) < 0) {
+ unlink(archivename);
+ g_error("backup_job_start failed");
+ } else {
+}
diff --git a/vma.h b/vma.h
new file mode 100644
-index 0000000..689e639
+index 0000000..76d0dc8
--- /dev/null
+++ b/vma.h
-@@ -0,0 +1,146 @@
+@@ -0,0 +1,145 @@
+/*
+ * VMA: Virtual Machine Archive
+ *
+
+extern const BackupDriver backup_vma_driver;
+
-+VmaWriter *vma_writer_create(const char *filename, uuid_t uuid, int64_t speed,
-+ Error **errp);
++VmaWriter *vma_writer_create(const char *filename, uuid_t uuid, Error **errp);
+int vma_writer_close(VmaWriter *vmaw, Error **errp);
+void vma_writer_destroy(VmaWriter *vmaw);
+int vma_writer_add_config(VmaWriter *vmaw, const char *name, gpointer data,