}
typedef enum {
- VSH_CMD_BLOCK_JOB_PULL,
VSH_CMD_BLOCK_JOB_COMMIT,
} vshCmdBlockJobMode;
goto cleanup;
switch (mode) {
- case VSH_CMD_BLOCK_JOB_PULL:
- if (vshCommandOptStringReq(ctl, cmd, "base", &base) < 0)
- goto cleanup;
- if (vshCommandOptBool(cmd, "keep-relative"))
- flags |= VIR_DOMAIN_BLOCK_REBASE_RELATIVE;
-
- if (base || flags) {
- if (virDomainBlockRebase(dom, path, base, bandwidth, flags) < 0)
- goto cleanup;
- } else {
- if (virDomainBlockPull(dom, path, bandwidth, 0) < 0)
- goto cleanup;
- }
-
- break;
case VSH_CMD_BLOCK_JOB_COMMIT:
if (vshCommandOptStringReq(ctl, cmd, "base", &base) < 0 ||
vshCommandOptStringReq(ctl, cmd, "top", &top) < 0)
struct timeval start;
struct timeval curr;
const char *path = NULL;
+ const char *base = NULL;
+ unsigned long bandwidth = 0;
bool quit = false;
int abort_flags = 0;
int status = -1;
int cb_id = -1;
+ unsigned int flags = 0;
+
+ if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0)
+ return false;
+
+ if (vshCommandOptStringReq(ctl, cmd, "base", &base) < 0)
+ return false;
+
+ if (vshCommandOptULWrap(ctl, cmd, "bandwidth", &bandwidth) < 0)
+ return false;
+
+ if (vshCommandOptBool(cmd, "keep-relative"))
+ flags |= VIR_DOMAIN_BLOCK_REBASE_RELATIVE;
if (blocking) {
if (vshCommandOptTimeoutToMs(ctl, cmd, &timeout) < 0)
return false;
- if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0)
- return false;
if (vshCommandOptBool(cmd, "async"))
abort_flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC;
return false;
}
+ if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
+ return false;
+
virConnectDomainEventGenericCallback cb =
VIR_DOMAIN_EVENT_CALLBACK(vshBlockJobStatusHandler);
NULL)) < 0)
vshResetLibvirtError();
- if (!blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_PULL, &dom))
- goto cleanup;
+ if (base || flags) {
+ if (virDomainBlockRebase(dom, path, base, bandwidth, flags) < 0)
+ goto cleanup;
+ } else {
+ if (virDomainBlockPull(dom, path, bandwidth, 0) < 0)
+ goto cleanup;
+ }
if (!blocking) {
vshPrint(ctl, "%s", _("Block Pull started"));
ret = true;
cleanup:
- if (dom)
- virDomainFree(dom);
+ virDomainFree(dom);
if (blocking)
sigaction(SIGINT, &old_sig_action, NULL);
if (cb_id >= 0)