From c854115a5f9a762362e14b9c331b2d46e4bab551 Mon Sep 17 00:00:00 2001 From: Wolfgang Bumiller Date: Fri, 23 Feb 2018 10:31:40 +0100 Subject: [PATCH] merge: qemu-img dd: add isize parameter to write small images from stdin to bigger destinations Signed-off-by: Wolfgang Bumiller --- ...0029-qemu-img-dd-add-isize-parameter.patch | 102 ++++++++++++++++++ debian/patches/series | 1 + 2 files changed, 103 insertions(+) create mode 100644 debian/patches/pve/0029-qemu-img-dd-add-isize-parameter.patch diff --git a/debian/patches/pve/0029-qemu-img-dd-add-isize-parameter.patch b/debian/patches/pve/0029-qemu-img-dd-add-isize-parameter.patch new file mode 100644 index 0000000..7e08ba2 --- /dev/null +++ b/debian/patches/pve/0029-qemu-img-dd-add-isize-parameter.patch @@ -0,0 +1,102 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Wolfgang Bumiller +Date: Fri, 23 Feb 2018 08:43:18 +0100 +Subject: [PATCH] qemu-img dd: add isize parameter + +for writing small images from stdin to bigger ones + +In order to distinguish between an actually unexpected and +an expected end of input. + +Signed-off-by: Wolfgang Bumiller +--- + qemu-img.c | 29 ++++++++++++++++++++++++++--- + 1 file changed, 26 insertions(+), 3 deletions(-) + +diff --git a/qemu-img.c b/qemu-img.c +index 876a3623a7..2605367c59 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -4089,11 +4089,13 @@ out: + #define C_OF 010 + #define C_SKIP 020 + #define C_OSIZE 040 ++#define C_ISIZE 0100 + + struct DdInfo { + unsigned int flags; + int64_t count; + int64_t osize; ++ int64_t isize; + }; + + struct DdIo { +@@ -4186,6 +4188,20 @@ static int img_dd_osize(const char *arg, + return 0; + } + ++static int img_dd_isize(const char *arg, ++ struct DdIo *in, struct DdIo *out, ++ struct DdInfo *dd) ++{ ++ dd->isize = cvtnum(arg); ++ ++ if (dd->isize < 0) { ++ error_report("invalid number: '%s'", arg); ++ return 1; ++ } ++ ++ return 0; ++} ++ + static int img_dd(int argc, char **argv) + { + int ret = 0; +@@ -4200,12 +4216,14 @@ static int img_dd(int argc, char **argv) + int c, i; + const char *out_fmt = "raw"; + const char *fmt = NULL; +- int64_t size = 0; ++ int64_t size = 0, readsize = 0; + int64_t block_count = 0, out_pos, in_pos; + bool force_share = false; + struct DdInfo dd = { + .flags = 0, + .count = 0, ++ .osize = 0, ++ .isize = -1, + }; + struct DdIo in = { + .bsz = 512, /* Block size is by default 512 bytes */ +@@ -4227,6 +4245,7 @@ static int img_dd(int argc, char **argv) + { "of", img_dd_of, C_OF }, + { "skip", img_dd_skip, C_SKIP }, + { "osize", img_dd_osize, C_OSIZE }, ++ { "isize", img_dd_isize, C_ISIZE }, + { NULL, NULL, 0 } + }; + const struct option long_options[] = { +@@ -4433,14 +4452,18 @@ static int img_dd(int argc, char **argv) + + in.buf = g_new(uint8_t, in.bsz); + +- for (out_pos = 0; in_pos < size; block_count++) { ++ readsize = (dd.isize > 0) ? dd.isize : size; ++ for (out_pos = 0; in_pos < readsize; block_count++) { + int in_ret, out_ret; +- size_t in_bsz = in_pos + in.bsz > size ? size - in_pos : in.bsz; ++ size_t in_bsz = in_pos + in.bsz > readsize ? readsize - in_pos : in.bsz; + if (blk1) { + in_ret = blk_pread(blk1, in_pos, in.buf, in_bsz); + } else { + in_ret = read(STDIN_FILENO, in.buf, in_bsz); + if (in_ret == 0) { ++ if (dd.isize == 0) { ++ goto out; ++ } + /* early EOF is considered an error */ + error_report("Input ended unexpectedly"); + ret = -1; +-- +2.11.0 + diff --git a/debian/patches/series b/debian/patches/series index c8c3090..6f5a6c7 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -26,5 +26,6 @@ pve/0025-backup-modify-job-api.patch pve/0026-backup-introduce-vma-archive-format.patch pve/0027-adding-old-vma-files.patch pve/0028-vma-add-throttling-options-to-drive-mapping-fifo-pro.patch +pve/0029-qemu-img-dd-add-isize-parameter.patch extra/0001-Revert-target-i386-disable-LINT0-after-reset.patch extra/0002-ratelimit-don-t-align-wait-time-with-slices.patch