On 05.12.2012 11:48, Ján Tomko wrote:
Add --prealloc-metadata flag to these commands:
vol-clone
vol-create
vol-create-as
vol-create-from
---
tools/virsh-volume.c | 25 +++++++++++++++++++++----
tools/virsh.pod | 23 ++++++++++++++++++++---
2 files changed, 41 insertions(+), 7 deletions(-)
diff --git a/tools/virsh-volume.c b/tools/virsh-volume.c
index f219de9..1ba0188 100644
--- a/tools/virsh-volume.c
+++ b/tools/virsh-volume.c
@@ -124,6 +124,7 @@ static const vshCmdOptDef opts_vol_create_as[] = {
N_("the backing volume if taking a snapshot")},
{"backing-vol-format", VSH_OT_STRING, 0,
N_("format of backing volume if taking a snapshot")},
+ {"prealloc-metadata", VSH_OT_BOOL, 0, N_("preallocate metadata (for
qcow2 instead of full allocation)")},
{NULL, 0, 0, NULL}
};
@@ -146,7 +147,10 @@ cmdVolCreateAs(vshControl *ctl, const vshCmd *cmd)
const char *snapshotStrVol = NULL, *snapshotStrFormat = NULL;
unsigned long long capacity, allocation = 0;
virBuffer buf = VIR_BUFFER_INITIALIZER;
+ unsigned long flags = 0;
+ if (vshCommandOptBool(cmd, "prealloc-metadata"))
+ flags = VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
While this works for now, I'd rather do it as:
flags |= VIR_STORAGE_..._METADATA;
since this maybe easily overlooked, and reduces a future patch size if
somebody invents a new flag and add its conditional setting in the front
of yours.
Otherwise looking good. ACK with this squashed in:
diff --git a/tools/virsh-volume.c b/tools/virsh-volume.c
index 1ba0188..145953b 100644
--- a/tools/virsh-volume.c
+++ b/tools/virsh-volume.c
@@ -150,7 +150,7 @@ cmdVolCreateAs(vshControl *ctl, const vshCmd *cmd)
unsigned long flags = 0;
if (vshCommandOptBool(cmd, "prealloc-metadata"))
- flags = VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
+ flags |= VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
if (!(pool = vshCommandOptPoolBy(ctl, cmd, "pool", NULL,
VSH_BYNAME)))
return false;
@@ -306,7 +306,7 @@ cmdVolCreate(vshControl *ctl, const vshCmd *cmd)
char *buffer;
if (vshCommandOptBool(cmd, "prealloc-metadata"))
- flags = VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
+ flags |= VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
if (!(pool = vshCommandOptPoolBy(ctl, cmd, "pool", NULL,
VSH_BYNAME)))
return false;
@@ -369,7 +369,7 @@ cmdVolCreateFrom(vshControl *ctl, const vshCmd *cmd)
goto cleanup;
if (vshCommandOptBool(cmd, "prealloc-metadata"))
- flags = VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
+ flags |= VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
if (vshCommandOptString(cmd, "file", &from) <= 0) {
goto cleanup;
}
@@ -465,7 +465,7 @@ cmdVolClone(vshControl *ctl, const vshCmd *cmd)
goto cleanup;
if (vshCommandOptBool(cmd, "prealloc-metadata"))
- flags = VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
+ flags |= VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
origpool = virStoragePoolLookupByVolume(origvol);
if (!origpool) {
Michal