From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Wolfgang Bumiller <w.bumiller@proxmox.com>
-Date: Thu, 17 Mar 2016 11:33:37 +0100
+Date: Mon, 6 Apr 2020 12:16:47 +0200
Subject: [PATCH] PVE: block: add the zeroinit block driver filter
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
---
block/Makefile.objs | 1 +
- block/zeroinit.c | 203 ++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 204 insertions(+)
+ block/zeroinit.c | 197 ++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 198 insertions(+)
create mode 100644 block/zeroinit.c
diff --git a/block/Makefile.objs b/block/Makefile.objs
-index 7a81892a52..03b5763bfa 100644
+index 3635b6b4c1..1282445672 100644
--- a/block/Makefile.objs
+++ b/block/Makefile.objs
@@ -11,6 +11,7 @@ block-obj-$(CONFIG_QED) += qed.o qed-l2-cache.o qed-table.o qed-cluster.o
block-obj-y += blklogwrites.o
diff --git a/block/zeroinit.c b/block/zeroinit.c
new file mode 100644
-index 0000000000..64c49ad0e0
+index 0000000000..ff38388d94
--- /dev/null
+++ b/block/zeroinit.c
-@@ -0,0 +1,203 @@
+@@ -0,0 +1,197 @@
+/*
+ * Filter to fake a zero-initialized block device.
+ *
+#include "qapi/qmp/qstring.h"
+#include "qemu/cutils.h"
+#include "qemu/option.h"
++#include "qemu/module.h"
+
+typedef struct {
+ bool has_zero_init;
+ return bdrv_co_pwritev(bs->file, offset, bytes, qiov, flags);
+}
+
-+static bool zeroinit_recurse_is_first_non_filter(BlockDriverState *bs,
-+ BlockDriverState *candidate)
-+{
-+ return bdrv_recurse_is_first_non_filter(bs->file->bs, candidate);
-+}
-+
+static coroutine_fn int zeroinit_co_flush(BlockDriverState *bs)
+{
+ return bdrv_co_flush(bs->file->bs);
+}
+
+static int zeroinit_co_truncate(BlockDriverState *bs, int64_t offset,
-+ PreallocMode prealloc, Error **errp)
++ _Bool exact, PreallocMode prealloc, Error **errp)
+{
-+ return bdrv_co_truncate(bs->file, offset, prealloc, errp);
++ return bdrv_co_truncate(bs->file, offset, exact, prealloc, errp);
+}
+
+static int zeroinit_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
+ .bdrv_co_flush = zeroinit_co_flush,
+
+ .is_filter = true,
-+ .bdrv_recurse_is_first_non_filter = zeroinit_recurse_is_first_non_filter,
+
+ .bdrv_has_zero_init = zeroinit_has_zero_init,
+
+}
+
+block_init(bdrv_zeroinit_init);
---
-2.20.1
-