Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
Please login to access the resource
openSUSE:12.2
xen
snapshot-ioemu-restore.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File snapshot-ioemu-restore.patch of Package xen
Index: xen-4.1.2-testing/tools/ioemu-qemu-xen/xenstore.c =================================================================== --- xen-4.1.2-testing.orig/tools/ioemu-qemu-xen/xenstore.c +++ xen-4.1.2-testing/tools/ioemu-qemu-xen/xenstore.c @@ -103,6 +103,8 @@ int xenstore_watch_new_callback(const ch } +char* get_snapshot_name(int devid); + static int pasprintf(char **buf, const char *fmt, ...) { va_list ap; @@ -714,8 +716,33 @@ void xenstore_parse_domain_config(int hv fprintf(stderr, "Using file %s in read-%s mode\n", bs->filename, is_readonly ? "only" : "write"); - if (bdrv_open2(bs, params, flags, format) < 0) + if (bdrv_open2(bs, params, BDRV_O_CACHE_WB /* snapshot and write-back */, format) < 0) { fprintf(stderr, "qemu: could not open vbd '%s' or hard disk image '%s' (drv '%s' format '%s')\n", buf, params, drv ? drv : "?", format ? format->format_name : "0"); + } else { + char* snapshot = get_snapshot_name(atoi(e_danger[i])); + if (snapshot) { + fprintf(stderr, "Using snapshot %s\n", snapshot); + ret = bdrv_snapshot_goto(bs, snapshot); + switch (ret) { + case 0: + /* Success */ + break; + case -ENOTSUP: + /* Don't abort here (could be read-only ISO) */ + fprintf(stderr, "Snapshots are not supported for " + "this image file format\n"); + break; + case -ENOENT: + fprintf(stderr, "No such snapshot, skipping this " + "image file\n"); + continue; + default: + fprintf(stderr, "Could not load snapshot, skipping" + " this image file\n"); + continue; + } + } + } } #endif @@ -845,6 +872,23 @@ int xenstore_parse_disable_pf_config () return disable_pf; } + +char* get_snapshot_name(int devid) +{ + char* path = NULL; + char* name = NULL; + unsigned int len; + + if (pasprintf(&path, + "/local/domain/0/backend/tap/%u/%u/snapshot", domid, devid) == -1) + return NULL; + name = xs_read(xsh, XBT_NULL, path, &len); + + free(path); + return name; +} + + int xenstore_fd(void) { if (xsh)
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor