Hello community,
here is the log from the commit of package virt-utils for openSUSE:Factory
checked in at Mon Jan 25 16:14:27 CET 2010.
--------
--- virt-utils/virt-utils.changes 2010-01-11 22:07:09.000000000 +0100
+++ virt-utils/virt-utils.changes 2010-01-18 17:58:11.000000000 +0100
@@ -1,0 +2,6 @@
+Mon Jan 18 16:57:50 UTC 2010 - brogers@novell.com
+
+- Include image rebase capability - much anticipated snapshot
+ supporting functionality.
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
New:
----
qemu-img-rebase_1.patch
qemu-img-rebase_2.patch
qemu-img-rebase_3.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ virt-utils.spec ++++++
--- /var/tmp/diff_new_pack.vtQZAw/_old 2010-01-25 16:12:40.000000000 +0100
+++ /var/tmp/diff_new_pack.vtQZAw/_new 2010-01-25 16:12:40.000000000 +0100
@@ -24,13 +24,16 @@
Name: virt-utils
BuildRequires: zlib-devel
Version: 1.1.0
-Release: 2
+Release: 3
License: GPLv2
Group: System/Kernel
Summary: Virtualization Utilities
Source0: qemu-0.12.1.tar.bz2
Source1: vm-snapshot-disk
Patch1: qemu-img-vmdk-scsi.patch
+Patch2: qemu-img-rebase_1.patch
+Patch3: qemu-img-rebase_2.patch
+Patch4: qemu-img-rebase_3.patch
Url: http://www.qemu.org/
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@@ -48,6 +51,9 @@
%if %{?qemu_utils}0
%setup -q -n qemu-0.12.1
%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
%endif
%build
++++++ qemu-img-rebase_1.patch ++++++
commit b783e409bf17b92f4af8dc5d6bd040d0092f33e0
Author: Kevin Wolf
Date: Tue Jan 12 12:55:16 2010 +0100
block: Introduce BDRV_O_NO_BACKING
If an image references a backing file that doesn't exist, qemu-img info fails
to open this image. Exactly in this case the info would be valuable, though:
the user might want to find out which file is missing.
This patch introduces a BDRV_O_NO_BACKING flag to ignore the backing file when
opening the image. qemu-img info is the first user and provides info now even
if the backing file is invalid.
Signed-off-by: Kevin Wolf
Signed-off-by: Anthony Liguori
Index: qemu-0.12.1/block.c
===================================================================
--- qemu-0.12.1.orig/block.c
+++ qemu-0.12.1/block.c
@@ -477,7 +477,7 @@ int bdrv_open2(BlockDriverState *bs, con
unlink(filename);
}
#endif
- if (bs->backing_file[0] != '\0') {
+ if ((flags & BDRV_O_NO_BACKING) == 0 && bs->backing_file[0] != '\0') {
/* if there is a backing file, use it */
BlockDriver *back_drv = NULL;
bs->backing_hd = bdrv_new("");
@@ -1352,7 +1352,7 @@ const char *bdrv_get_encrypted_filename(
void bdrv_get_backing_filename(BlockDriverState *bs,
char *filename, int filename_size)
{
- if (!bs->backing_hd) {
+ if (!bs->backing_file) {
pstrcpy(filename, filename_size, "");
} else {
pstrcpy(filename, filename_size, bs->backing_file);
Index: qemu-0.12.1/block.h
===================================================================
--- qemu-0.12.1.orig/block.h
+++ qemu-0.12.1/block.h
@@ -39,6 +39,7 @@ typedef struct QEMUSnapshotInfo {
#define BDRV_O_NOCACHE 0x0020 /* do not use the host page cache */
#define BDRV_O_CACHE_WB 0x0040 /* use write-back caching */
#define BDRV_O_NATIVE_AIO 0x0080 /* use native AIO instead of the thread pool */
+#define BDRV_O_NO_BACKING 0x0100 /* don't open the backing file */
#define BDRV_O_CACHE_MASK (BDRV_O_NOCACHE | BDRV_O_CACHE_WB)
Index: qemu-0.12.1/qemu-img.c
===================================================================
--- qemu-0.12.1.orig/qemu-img.c
+++ qemu-0.12.1/qemu-img.c
@@ -895,7 +895,7 @@ static int img_info(int argc, char **arg
} else {
drv = NULL;
}
- if (bdrv_open2(bs, filename, BRDV_O_FLAGS, drv) < 0) {
+ if (bdrv_open2(bs, filename, BRDV_O_FLAGS | BDRV_O_NO_BACKING, drv) < 0) {
error("Could not open '%s'", filename);
}
bdrv_get_format(bs, fmt_name, sizeof(fmt_name));
++++++ qemu-img-rebase_2.patch ++++++
commit 756e6736a12a46330d9532d5f861ba15b38886d8
Author: Kevin Wolf
Date: Tue Jan 12 12:55:17 2010 +0100
block: Add bdrv_change_backing_file
Introduce the functions needed to change the backing file of an image. The
function is implemented for qcow2.
Signed-off-by: Kevin Wolf
Signed-off-by: Anthony Liguori
Index: qemu-0.12.1/block.c
===================================================================
--- qemu-0.12.1.orig/block.c
+++ qemu-0.12.1/block.c
@@ -597,6 +597,26 @@ int bdrv_commit(BlockDriverState *bs)
return 0;
}
+/*
+ * Return values:
+ * 0 - success
+ * -EINVAL - backing format specified, but no file
+ * -ENOSPC - can't update the backing file because no space is left in the
+ * image file header
+ * -ENOTSUP - format driver doesn't support changing the backing file
+ */
+int bdrv_change_backing_file(BlockDriverState *bs,
+ const char *backing_file, const char *backing_fmt)
+{
+ BlockDriver *drv = bs->drv;
+
+ if (drv->bdrv_change_backing_file != NULL) {
+ return drv->bdrv_change_backing_file(bs, backing_file, backing_fmt);
+ } else {
+ return -ENOTSUP;
+ }
+}
+
static int bdrv_check_byte_request(BlockDriverState *bs, int64_t offset,
size_t size)
{
Index: qemu-0.12.1/block.h
===================================================================
--- qemu-0.12.1.orig/block.h
+++ qemu-0.12.1/block.h
@@ -83,6 +83,8 @@ int64_t bdrv_getlength(BlockDriverState
void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr);
void bdrv_guess_geometry(BlockDriverState *bs, int *pcyls, int *pheads, int *psecs);
int bdrv_commit(BlockDriverState *bs);
+int bdrv_change_backing_file(BlockDriverState *bs,
+ const char *backing_file, const char *backing_fmt);
void bdrv_register(BlockDriver *bdrv);
/* async block I/O */
Index: qemu-0.12.1/block/qcow2.c
===================================================================
--- qemu-0.12.1.orig/block/qcow2.c
+++ qemu-0.12.1/block/qcow2.c
@@ -658,6 +658,105 @@ static void qcow_close(BlockDriverState
bdrv_delete(s->hd);
}
+/*
+ * Updates the variable length parts of the qcow2 header, i.e. the backing file
+ * name and all extensions. qcow2 was not designed to allow such changes, so if
+ * we run out of space (we can only use the first cluster) this function may
+ * fail.
+ *
+ * Returns 0 on success, -errno in error cases.
+ */
+static int qcow2_update_ext_header(BlockDriverState *bs,
+ const char *backing_file, const char *backing_fmt)
+{
+ size_t backing_file_len = 0;
+ size_t backing_fmt_len = 0;
+ BDRVQcowState *s = bs->opaque;
+ QCowExtension ext_backing_fmt = {0, 0};
+ int ret;
+
+ /* Backing file format doesn't make sense without a backing file */
+ if (backing_fmt && !backing_file) {
+ return -EINVAL;
+ }
+
+ /* Prepare the backing file format extension if needed */
+ if (backing_fmt) {
+ ext_backing_fmt.len = cpu_to_be32(strlen(backing_fmt));
+ ext_backing_fmt.magic = cpu_to_be32(QCOW_EXT_MAGIC_BACKING_FORMAT);
+ backing_fmt_len = ((sizeof(ext_backing_fmt)
+ + strlen(backing_fmt) + 7) & ~7);
+ }
+
+ /* Check if we can fit the new header into the first cluster */
+ if (backing_file) {
+ backing_file_len = strlen(backing_file);
+ }
+
+ size_t header_size = sizeof(QCowHeader) + backing_file_len
+ + backing_fmt_len;
+
+ if (header_size > s->cluster_size) {
+ return -ENOSPC;
+ }
+
+ /* Rewrite backing file name and qcow2 extensions */
+ size_t ext_size = header_size - sizeof(QCowHeader);
+ uint8_t buf[ext_size];
+ size_t offset = 0;
+ size_t backing_file_offset = 0;
+
+ if (backing_file) {
+ if (backing_fmt) {
+ int padding = backing_fmt_len -
+ (sizeof(ext_backing_fmt) + strlen(backing_fmt));
+
+ memcpy(buf + offset, &ext_backing_fmt, sizeof(ext_backing_fmt));
+ offset += sizeof(ext_backing_fmt);
+
+ memcpy(buf + offset, backing_fmt, strlen(backing_fmt));
+ offset += strlen(backing_fmt);
+
+ memset(buf + offset, 0, padding);
+ offset += padding;
+ }
+
+ memcpy(buf + offset, backing_file, backing_file_len);
+ backing_file_offset = sizeof(QCowHeader) + offset;
+ }
+
+ ret = bdrv_pwrite(s->hd, sizeof(QCowHeader), buf, ext_size);
+ if (ret < 0) {
+ goto fail;
+ }
+
+ /* Update header fields */
+ uint64_t be_backing_file_offset = cpu_to_be64(backing_file_offset);
+ uint32_t be_backing_file_size = cpu_to_be32(backing_file_len);
+
+ ret = bdrv_pwrite(s->hd, offsetof(QCowHeader, backing_file_offset),
+ &be_backing_file_offset, sizeof(uint64_t));
+ if (ret < 0) {
+ goto fail;
+ }
+
+ ret = bdrv_pwrite(s->hd, offsetof(QCowHeader, backing_file_size),
+ &be_backing_file_size, sizeof(uint32_t));
+ if (ret < 0) {
+ goto fail;
+ }
+
+ ret = 0;
+fail:
+ return ret;
+}
+
+static int qcow2_change_backing_file(BlockDriverState *bs,
+ const char *backing_file, const char *backing_fmt)
+{
+ return qcow2_update_ext_header(bs, backing_file, backing_fmt);
+}
+
static int get_bits_from_size(size_t size)
{
int res = 0;
@@ -1137,6 +1236,8 @@ static BlockDriver bdrv_qcow2 = {
.bdrv_save_vmstate = qcow_save_vmstate,
.bdrv_load_vmstate = qcow_load_vmstate,
+ .bdrv_change_backing_file = qcow2_change_backing_file,
+
.create_options = qcow_create_options,
.bdrv_check = qcow_check,
};
Index: qemu-0.12.1/block_int.h
===================================================================
--- qemu-0.12.1.orig/block_int.h
+++ qemu-0.12.1/block_int.h
@@ -99,6 +99,9 @@ struct BlockDriver {
int (*bdrv_load_vmstate)(BlockDriverState *bs, uint8_t *buf,
int64_t pos, int size);
+ int (*bdrv_change_backing_file)(BlockDriverState *bs,
+ const char *backing_file, const char *backing_fmt);
+
/* removable device specific */
int (*bdrv_is_inserted)(BlockDriverState *bs);
int (*bdrv_media_changed)(BlockDriverState *bs);
++++++ qemu-img-rebase_3.patch ++++++
commit 3e85c6fd714af70e6a26096a08ee02c98b12ad51
Author: Kevin Wolf
Date: Tue Jan 12 12:55:18 2010 +0100
qemu-img rebase
This adds a rebase subcommand to qemu-img which allows to change the backing
file of an image.
In default mode, both the current and the new backing file need to exist, and
after the rebase, the COW image is guaranteed to have the same guest visible
content as before. To achieve this, old and new backing file are compared and,
if necessary, data is copied from the old backing file into the COW image.
With -u an unsafe mode is enabled that doesn't require the backing files to
exist. It merely changes the backing file reference in the COW image. This is
useful for renaming or moving the backing file. The user is responsible to make
sure that the new backing file has no changes compared to the old one, or
corruption may occur.
Signed-off-by: Kevin Wolf
Signed-off-by: Anthony Liguori
Index: qemu-0.12.1/qemu-img-cmds.hx
===================================================================
--- qemu-0.12.1.orig/qemu-img-cmds.hx
+++ qemu-0.12.1/qemu-img-cmds.hx
@@ -43,5 +43,11 @@ DEF("snapshot", img_snapshot,
"snapshot [-l | -a snapshot | -c snapshot | -d snapshot] filename")
STEXI
@item snapshot [-l | -a @var{snapshot} | -c @var{snapshot} | -d @var{snapshot}] @var{filename}
+ETEXI
+
+DEF("rebase", img_rebase,
+ "rebase [-u] -b backing_file [-F backing_fmt] filename")
+STEXI
+@item rebase [-u] -b @var{backing_file} [-F @var{backing_fmt}] @var{filename}
@end table
ETEXI
Index: qemu-0.12.1/qemu-img.c
===================================================================
--- qemu-0.12.1.orig/qemu-img.c
+++ qemu-0.12.1/qemu-img.c
@@ -81,6 +81,9 @@ static void help(void)
" name=value format. Use -o ? for an overview of the options supported by the\n"
" used format\n"
" '-c' indicates that target image must be compressed (qcow format only)\n"
+ " '-u' enables unsafe rebasing. It is assumed that old and new backing file\n"
+ " match exactly. The image doesn't need a working backing file before\n"
+ " rebasing in this case (useful for renaming the backing file)\n"
" '-h' with or without a command shows this help and lists the supported formats\n"
"\n"
"Parameters to snapshot subcommand:\n"
@@ -532,6 +535,37 @@ static int is_allocated_sectors(const ui
return v;
}
+/*
+ * Compares two buffers sector by sector. Returns 0 if the first sector of both
+ * buffers matches, non-zero otherwise.
+ *
+ * pnum is set to the number of sectors (including and immediately following
+ * the first one) that are known to have the same comparison result
+ */
+static int compare_sectors(const uint8_t *buf1, const uint8_t *buf2, int n,
+ int *pnum)
+{
+ int res, i;
+
+ if (n <= 0) {
+ *pnum = 0;
+ return 0;
+ }
+
+ res = !!memcmp(buf1, buf2, 512);
+ for(i = 1; i < n; i++) {
+ buf1 += 512;
+ buf2 += 512;
+
+ if (!!memcmp(buf1, buf2, 512) != res) {
+ break;
+ }
+ }
+
+ *pnum = i;
+ return res;
+}
+
#define IO_BUF_SIZE (2 * 1024 * 1024)
static int img_convert(int argc, char **argv)
@@ -1042,6 +1076,197 @@ static int img_snapshot(int argc, char *
bdrv_delete(bs);
return 0;
+}
+
+static int img_rebase(int argc, char **argv)
+{
+ BlockDriverState *bs, *bs_old_backing, *bs_new_backing;
+ BlockDriver *old_backing_drv, *new_backing_drv;
+ char *filename;
+ const char *out_basefmt, *out_baseimg;
+ int c, flags, ret;
+ int unsafe = 0;
+
+ /* Parse commandline parameters */
+ out_baseimg = NULL;
+ out_basefmt = NULL;
+
+ for(;;) {
+ c = getopt(argc, argv, "uhF:b:");
+ if (c == -1)
+ break;
+ switch(c) {
+ case 'h':
+ help();
+ return 0;
+ case 'F':
+ out_basefmt = optarg;
+ break;
+ case 'b':
+ out_baseimg = optarg;
+ break;
+ case 'u':
+ unsafe = 1;
+ break;
+ }
+ }
+
+ if ((optind >= argc) || !out_baseimg)
+ help();
+ filename = argv[optind++];
+
+ /*
+ * Open the images.
+ *
+ * Ignore the old backing file for unsafe rebase in case we want to correct
+ * the reference to a renamed or moved backing file.
+ */
+ bs = bdrv_new("");
+ if (!bs)
+ error("Not enough memory");
+
+ flags = BRDV_O_FLAGS | (unsafe ? BDRV_O_NO_BACKING : 0);
+ if (bdrv_open2(bs, filename, flags, NULL) < 0) {
+ error("Could not open '%s'", filename);
+ }
+
+ /* Find the right drivers for the backing files */
+ old_backing_drv = NULL;
+ new_backing_drv = NULL;
+
+ if (!unsafe && bs->backing_format[0] != '\0') {
+ old_backing_drv = bdrv_find_format(bs->backing_format);
+ if (old_backing_drv == NULL) {
+ error("Invalid format name: '%s'", bs->backing_format);
+ }
+ }
+
+ if (out_basefmt != NULL) {
+ new_backing_drv = bdrv_find_format(out_basefmt);
+ if (new_backing_drv == NULL) {
+ error("Invalid format name: '%s'", out_basefmt);
+ }
+ }
+
+ /* For safe rebasing we need to compare old and new backing file */
+ if (unsafe) {
+ /* Make the compiler happy */
+ bs_old_backing = NULL;
+ bs_new_backing = NULL;
+ } else {
+ char backing_name[1024];
+
+ bs_old_backing = bdrv_new("old_backing");
+ bdrv_get_backing_filename(bs, backing_name, sizeof(backing_name));
+ if (bdrv_open2(bs_old_backing, backing_name, BRDV_O_FLAGS,
+ old_backing_drv))
+ {
+ error("Could not open old backing file '%s'", backing_name);
+ return -1;
+ }
+
+ bs_new_backing = bdrv_new("new_backing");
+ if (bdrv_open2(bs_new_backing, out_baseimg, BRDV_O_FLAGS,
+ new_backing_drv))
+ {
+ error("Could not open new backing file '%s'", backing_name);
+ return -1;
+ }
+ }
+
+ /*
+ * Check each unallocated cluster in the COW file. If it is unallocated,
+ * accesses go to the backing file. We must therefore compare this cluster
+ * in the old and new backing file, and if they differ we need to copy it
+ * from the old backing file into the COW file.
+ *
+ * If qemu-img crashes during this step, no harm is done. The content of
+ * the image is the same as the original one at any time.
+ */
+ if (!unsafe) {
+ uint64_t num_sectors;
+ uint64_t sector;
+ int n, n1;
+ uint8_t buf_old[IO_BUF_SIZE];
+ uint8_t buf_new[IO_BUF_SIZE];
+
+ bdrv_get_geometry(bs, &num_sectors);
+
+ for (sector = 0; sector < num_sectors; sector += n) {
+
+ /* How many sectors can we handle with the next read? */
+ if (sector + (IO_BUF_SIZE / 512) <= num_sectors) {
+ n = (IO_BUF_SIZE / 512);
+ } else {
+ n = num_sectors - sector;
+ }
+
+ /* If the cluster is allocated, we don't need to take action */
+ if (bdrv_is_allocated(bs, sector, n, &n1)) {
+ n = n1;
+ continue;
+ }
+
+ /* Read old and new backing file */
+ if (bdrv_read(bs_old_backing, sector, buf_old, n) < 0) {
+ error("error while reading from old backing file");
+ }
+ if (bdrv_read(bs_new_backing, sector, buf_new, n) < 0) {
+ error("error while reading from new backing file");
+ }
+
+ /* If they differ, we need to write to the COW file */
+ uint64_t written = 0;
+
+ while (written < n) {
+ int pnum;
+
+ if (compare_sectors(buf_old + written * 512,
+ buf_new + written * 512, n, &pnum))
+ {
+ ret = bdrv_write(bs, sector + written,
+ buf_old + written * 512, pnum);
+ if (ret < 0) {
+ error("Error while writing to COW image: %s",
+ strerror(-ret));
+ }
+ }
+
+ written += pnum;
+ }
+ }
+ }
+
+ /*
+ * Change the backing file. All clusters that are different from the old
+ * backing file are overwritten in the COW file now, so the visible content
+ * doesn't change when we switch the backing file.
+ */
+ ret = bdrv_change_backing_file(bs, out_baseimg, out_basefmt);
+ if (ret == -ENOSPC) {
+ error("Could not change the backing file to '%s': No space left in "
+ "the file header", out_baseimg);
+ } else if (ret < 0) {
+ error("Could not change the backing file to '%s': %s",
+ out_baseimg, strerror(-ret));
+ }
+
+ /*
+ * TODO At this point it is possible to check if any clusters that are
+ * allocated in the COW file are the same in the backing file. If so, they
+ * could be dropped from the COW file. Don't do this before switching the
+ * backing file, in case of a crash this would lead to corruption.
+ */
+
+ /* Cleanup */
+ if (!unsafe) {
+ bdrv_delete(bs_old_backing);
+ bdrv_delete(bs_new_backing);
+ }
+
+ bdrv_delete(bs);
+
+ return 0;
}
static const img_cmd_t img_cmds[] = {
++++++ qemu-img-vmdk-scsi.patch ++++++
--- /var/tmp/diff_new_pack.vtQZAw/_old 2010-01-25 16:12:41.000000000 +0100
+++ /var/tmp/diff_new_pack.vtQZAw/_new 2010-01-25 16:12:41.000000000 +0100
@@ -13,11 +13,11 @@
qemu-img.c | 15 +++++++++++++--
4 files changed, 21 insertions(+), 8 deletions(-)
-diff --git a/block/vmdk.c b/block/vmdk.c
-index 4e48622..b7a15c7 100644
---- a/block/vmdk.c
-+++ b/block/vmdk.c
-@@ -710,7 +710,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options)
+Index: qemu-0.12.1/block/vmdk.c
+===================================================================
+--- qemu-0.12.1.orig/block/vmdk.c
++++ qemu-0.12.1/block/vmdk.c
+@@ -710,7 +710,7 @@ static int vmdk_create(const char *filen
"ddb.geometry.cylinders = \"%" PRId64 "\"\n"
"ddb.geometry.heads = \"16\"\n"
"ddb.geometry.sectors = \"63\"\n"
@@ -26,7 +26,7 @@
char desc[1024];
const char *real_filename, *temp_str;
int64_t total_size = 0;
-@@ -800,7 +800,8 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options)
+@@ -800,7 +800,8 @@ static int vmdk_create(const char *filen
snprintf(desc, sizeof(desc), desc_template, (unsigned int)time(NULL),
total_size, real_filename,
(flags & BLOCK_FLAG_COMPAT6 ? 6 : 4),
@@ -36,10 +36,10 @@
/* write the descriptor */
lseek(fd, le64_to_cpu(header.desc_offset) << 9, SEEK_SET);
-diff --git a/block_int.h b/block_int.h
-index 8898d91..d482050 100644
---- a/block_int.h
-+++ b/block_int.h
+Index: qemu-0.12.1/block_int.h
+===================================================================
+--- qemu-0.12.1.orig/block_int.h
++++ qemu-0.12.1/block_int.h
@@ -30,6 +30,7 @@
#define BLOCK_FLAG_ENCRYPT 1
#define BLOCK_FLAG_COMPRESS 2
@@ -48,10 +48,10 @@
#define BLOCK_OPT_SIZE "size"
#define BLOCK_OPT_ENCRYPT "encryption"
-diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx
-index ddb86f0..be94d22 100644
---- a/qemu-img-cmds.hx
-+++ b/qemu-img-cmds.hx
+Index: qemu-0.12.1/qemu-img-cmds.hx
+===================================================================
+--- qemu-0.12.1.orig/qemu-img-cmds.hx
++++ qemu-0.12.1/qemu-img-cmds.hx
@@ -16,9 +16,9 @@ STEXI
ETEXI
@@ -76,11 +76,11 @@
ETEXI
DEF("info", img_info,
-diff --git a/qemu-img.c b/qemu-img.c
-index 070fe2e..2adeb56 100644
---- a/qemu-img.c
-+++ b/qemu-img.c
-@@ -259,7 +259,7 @@ static int img_create(int argc, char **argv)
+Index: qemu-0.12.1/qemu-img.c
+===================================================================
+--- qemu-0.12.1.orig/qemu-img.c
++++ qemu-0.12.1/qemu-img.c
+@@ -253,7 +253,7 @@ static int img_create(int argc, char **a
flags = 0;
for(;;) {
@@ -89,7 +89,7 @@
if (c == -1)
break;
switch(c) {
-@@ -278,6 +278,9 @@ static int img_create(int argc, char **argv)
+@@ -272,6 +272,9 @@ static int img_create(int argc, char **a
case 'e':
flags |= BLOCK_FLAG_ENCRYPT;
break;
@@ -99,7 +99,7 @@
case '6':
flags |= BLOCK_FLAG_COMPAT6;
break;
-@@ -357,6 +360,8 @@ static int img_create(int argc, char **argv)
+@@ -354,6 +357,8 @@ static int img_create(int argc, char **a
printf("Formatting '%s', fmt=%s ", filename, fmt);
print_option_parameters(param);
@@ -108,7 +108,7 @@
puts("");
ret = bdrv_create(drv, filename, param);
-@@ -551,7 +556,7 @@ static int img_convert(int argc, char **argv)
+@@ -548,7 +553,7 @@ static int img_convert(int argc, char **
out_baseimg = NULL;
flags = 0;
for(;;) {
@@ -117,7 +117,7 @@
if (c == -1)
break;
switch(c) {
-@@ -573,6 +578,9 @@ static int img_convert(int argc, char **argv)
+@@ -570,6 +575,9 @@ static int img_convert(int argc, char **
case 'e':
flags |= BLOCK_FLAG_ENCRYPT;
break;
@@ -127,7 +127,7 @@
case '6':
flags |= BLOCK_FLAG_COMPAT6;
break;
-@@ -639,6 +647,9 @@ static int img_convert(int argc, char **argv)
+@@ -637,6 +645,9 @@ static int img_convert(int argc, char **
}
}
@@ -137,6 +137,3 @@
/* Create the new image */
ret = bdrv_create(drv, out_filename, param);
free_option_parameters(param);
---
-1.6.2.1
-
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org