Hello community, here is the log from the commit of package xen for openSUSE:Factory checked in at Fri Jun 12 20:43:20 CEST 2009. -------- --- xen/xen.changes 2009-04-29 22:09:21.000000000 +0200 +++ xen/xen.changes 2009-06-11 23:26:11.000000000 +0200 @@ -1,0 +2,33 @@ +Thu Jun 11 14:17:22 MDT 2009 - carnold@novell.com + +- Update to Xen 3.4.1 RC2 c/s 19648. + +------------------------------------------------------------------- +Tue Jun 9 13:52:07 CST 2009 - wkong@novell.com +- bnc#504491 - drop write data when set read only disk in xen config + bdrv_open2_fix_flags.patch + bdrv_open2_flags_2.patch + +------------------------------------------------------------------- +Mon May 18 15:03:29 MDT 2009 - carnold@novell.com + +- Update to Xen 3.4.0 FCS c/s 19607 + +------------------------------------------------------------------- +Mon May 17 17:15:57 CST 2009 - wkong@novell.com +-bnc#485770 - check exsit file for save and snapshot-create + xm-save-check-file.patch + snapshot-xend.patch + +------------------------------------------------------------------- +Thu May 14 12:00:09 MDT 2009 - jfehlig@novell.com + +- bnc#503332 - Remove useless qcow tools + /usr/sbin/{qcow-create,img2qcow,qcow2raw} from xen-tools package. + +------------------------------------------------------------------- +Mon May 11 18:49:50 CST 2009 - wkong@novell.com +- bnc#477892 - snapshot windows can't accomplish. + snapshot-xend.patch + +------------------------------------------------------------------- calling whatdependson for head-i586 Old: ---- python2.6-fixes.patch New: ---- bdrv_open2_fix_flags.patch bdrv_open2_flags_2.patch xm-save-check-file.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xen.spec ++++++ --- /var/tmp/diff_new_pack.Q28305/_old 2009-06-12 20:42:01.000000000 +0200 +++ /var/tmp/diff_new_pack.Q28305/_new 2009-06-12 20:42:01.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package xen (Version 3.4.0_19590_01) +# spec file for package xen (Version 3.4.0_19648_01) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -22,7 +22,7 @@ ExclusiveArch: %ix86 x86_64 %define xvers 3.4 %define xvermaj 3 -%define changeset 19590 +%define changeset 19648 %define xen_build_dir xen-3.4.0-testing %define with_kmp 0 BuildRequires: LibVNCServer-devel SDL-devel automake bin86 curl-devel dev86 graphviz latex2html libjpeg-devel libxml2-devel ncurses-devel openssl openssl-devel pciutils-devel python-devel texinfo transfig @@ -37,7 +37,7 @@ %if %{?with_kmp}0 BuildRequires: kernel-source kernel-syms module-init-tools xorg-x11 %endif -Version: 3.4.0_19590_01 +Version: 3.4.0_19648_01 Release: 1 License: GPL v2 only Group: System/Kernel @@ -113,13 +113,13 @@ Patch159: tools-gdbserver-build.diff Patch160: network-route.patch # Needs to go upstream sometime, when python 2.6 is widespread -Patch161: python2.6-fixes.patch -Patch162: udev-rules.patch -Patch163: ioemu-vnc-resize.patch +Patch161: udev-rules.patch +Patch162: ioemu-vnc-resize.patch # Needs to go upstream -Patch164: checkpoint-rename.patch -Patch165: network-nat.patch -Patch166: ioemu-debuginfo.patch +Patch163: checkpoint-rename.patch +Patch164: network-nat.patch +Patch165: ioemu-debuginfo.patch +Patch166: xm-save-check-file.patch # Patches for snapshot support Patch200: snapshot-ioemu-save.patch Patch201: snapshot-ioemu-restore.patch @@ -136,6 +136,8 @@ Patch220: qemu-dm-segfault.patch Patch221: blktapctrl-default-to-ioemu.patch Patch222: ioemu-blktap-barriers.patch +Patch223: bdrv_open2_fix_flags.patch +Patch224: bdrv_open2_flags_2.patch # Jim's domain lock patch Patch300: xend-domain-lock.patch # Patches from Jan @@ -556,6 +558,8 @@ %patch220 -p1 %patch221 -p1 %patch222 -p1 +%patch223 -p1 +%patch224 -p1 %patch300 -p1 #%patch340 -p1 - Port Later if needed %patch341 -p1 @@ -660,6 +664,7 @@ make -C tools install \ DESTDIR=$RPM_BUILD_ROOT MANDIR=%{_mandir} cp tools/debugger/gdb/gdb-6.2.1-linux-i386-xen/gdb/gdbserver/gdbserver-xen $RPM_BUILD_ROOT/usr/bin/gdbserver-xen +rm -f $RPM_BUILD_ROOT/usr/sbin/{qcow-create,img2qcow,qcow2raw} make -C tools/misc/serial-split install \ DESTDIR=$RPM_BUILD_ROOT MANDIR=%{_mandir} %ifarch x86_64 @@ -704,7 +709,7 @@ # scripts rm -f $RPM_BUILD_ROOT/etc/xen/scripts/block-*nbd install -m755 %SOURCE11 %SOURCE12 %SOURCE13 %SOURCE16 %SOURCE17 $RPM_BUILD_ROOT/etc/xen/scripts/ -ln -s /etc/xen/scripts/xen-monitor $RPM_BUILD_ROOT/etc/xen/scripts/set-lock +ln -s /etc/xen/scripts/vm-monitor $RPM_BUILD_ROOT/etc/xen/scripts/set-lock # Xen API remote authentication files install -d $RPM_BUILD_ROOT/etc/pam.d install -m644 %SOURCE23 $RPM_BUILD_ROOT/etc/pam.d/xen-api @@ -788,9 +793,6 @@ /usr/bin/gdbserver-xen /usr/sbin/blktapctrl /usr/sbin/flask-loadpolicy -/usr/sbin/img2qcow -/usr/sbin/qcow-create -/usr/sbin/qcow2raw /usr/sbin/rcxend /usr/sbin/rcxendomains /usr/sbin/tapdisk @@ -936,6 +938,24 @@ /sbin/ldconfig %changelog +* Thu Jun 11 2009 carnold@novell.com +- Update to Xen 3.4.1 RC2 c/s 19648. +* Tue Jun 09 2009 wkong@novell.com +- bnc#504491 - drop write data when set read only disk in xen config + bdrv_open2_fix_flags.patch + bdrv_open2_flags_2.patch +* Mon May 18 2009 carnold@novell.com +- Update to Xen 3.4.0 FCS c/s 19607 +* Sun May 17 2009 wkong@novell.com +-bnc#485770 - check exsit file for save and snapshot-create + xm-save-check-file.patch + snapshot-xend.patch +* Thu May 14 2009 jfehlig@novell.com +- bnc#503332 - Remove useless qcow tools + /usr/sbin/{qcow-create,img2qcow,qcow2raw} from xen-tools package. +* Mon May 11 2009 wkong@novell.com +- bnc#477892 - snapshot windows can't accomplish. + snapshot-xend.patch * Wed Apr 22 2009 wkong@novell.com - Backport two qcow2 patches from qemu org ioemu-6816-qcow2-revert-6404-6405-6407.patch ++++++ 32on64-extra-mem.patch ++++++ --- /var/tmp/diff_new_pack.Q28305/_old 2009-06-12 20:42:01.000000000 +0200 +++ /var/tmp/diff_new_pack.Q28305/_new 2009-06-12 20:42:01.000000000 +0200 @@ -2,7 +2,7 @@ =================================================================== --- xen-3.4.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -2559,7 +2559,7 @@ class XendDomainInfo: +@@ -2560,7 +2560,7 @@ class XendDomainInfo: vtd_mem = ((vtd_mem + 1023) / 1024) * 1024 # Make sure there's enough RAM available for the domain ++++++ bdrv_open2_fix_flags.patch ++++++ diff -uNrp xen-3.4.0-testing.orig/tools/ioemu-remote/block.c xen-3.4.0-testing/tools/ioemu-remote/block.c --- xen-3.4.0-testing.orig/tools/ioemu-remote/block.c 2009-06-09 14:02:11.000000000 +0800 +++ xen-3.4.0-testing/tools/ioemu-remote/block.c 2009-06-09 14:07:40.000000000 +0800 @@ -347,7 +347,7 @@ int bdrv_file_open(BlockDriverState **pb int bdrv_open(BlockDriverState *bs, const char *filename, int flags) { - return bdrv_open2(bs, filename, flags, NULL); + return bdrv_open2(bs, filename, flags|BDRV_O_RDWR, NULL); } int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, @@ -416,12 +416,13 @@ int bdrv_open2(BlockDriverState *bs, con } bs->drv = drv; bs->opaque = qemu_mallocz(drv->instance_size); - /* Note: for compatibility, we open disk image files as RDWR, and - RDONLY as fallback */ if (!(flags & BDRV_O_FILE)) - open_flags = BDRV_O_RDWR | (flags & BDRV_O_CACHE_MASK); + open_flags = flags & BDRV_O_CACHE_MASK; else open_flags = flags & ~(BDRV_O_FILE | BDRV_O_SNAPSHOT); + if (!(open_flags & BDRV_O_RDWR)) + bs->read_only = 1; + ret = drv->bdrv_open(bs, filename, open_flags); if ((ret == -EACCES || ret == -EPERM) && !(flags & BDRV_O_FILE)) { ret = drv->bdrv_open(bs, filename, open_flags & ~BDRV_O_RDWR); diff -uNrp xen-3.4.0-testing.orig/tools/ioemu-remote/hw/usb-msd.c xen-3.4.0-testing/tools/ioemu-remote/hw/usb-msd.c --- xen-3.4.0-testing.orig/tools/ioemu-remote/hw/usb-msd.c 2009-06-09 14:02:11.000000000 +0800 +++ xen-3.4.0-testing/tools/ioemu-remote/hw/usb-msd.c 2009-06-09 14:06:50.000000000 +0800 @@ -551,7 +551,7 @@ USBDevice *usb_msd_init(const char *file s = qemu_mallocz(sizeof(MSDState)); bdrv = bdrv_new("usb"); - if (bdrv_open2(bdrv, filename, 0, drv) < 0) + if (bdrv_open2(bdrv, filename, BDRV_O_RDWR, drv) < 0) goto fail; s->bs = bdrv; *pbs = bdrv; diff -uNrp xen-3.4.0-testing.orig/tools/ioemu-remote/qemu-img.c xen-3.4.0-testing/tools/ioemu-remote/qemu-img.c --- xen-3.4.0-testing.orig/tools/ioemu-remote/qemu-img.c 2009-06-09 14:02:11.000000000 +0800 +++ xen-3.4.0-testing/tools/ioemu-remote/qemu-img.c 2009-06-09 14:06:32.000000000 +0800 @@ -32,7 +32,7 @@ #endif /* Default to cache=writeback as data integrity is not important for qemu-tcg. */ -#define BRDV_O_FLAGS BDRV_O_CACHE_WB +#define BDRV_O_FLAGS BDRV_O_CACHE_WB static void QEMU_NORETURN error(const char *fmt, ...) { @@ -185,7 +185,7 @@ static int read_password(char *buf, int #endif static BlockDriverState *bdrv_new_open(const char *filename, - const char *fmt) + const char *fmt, int flags) { BlockDriverState *bs; BlockDriver *drv; @@ -201,7 +201,7 @@ static BlockDriverState *bdrv_new_open(c } else { drv = &bdrv_raw; } - if (bdrv_open2(bs, filename, BRDV_O_FLAGS, drv) < 0) { + if (bdrv_open2(bs, filename, flags, drv) < 0) { error("Could not open '%s'", filename); } if (bdrv_is_encrypted(bs)) { @@ -253,7 +253,7 @@ static int img_create(int argc, char **a size = 0; if (base_filename) { BlockDriverState *bs; - bs = bdrv_new_open(base_filename, NULL); + bs = bdrv_new_open(base_filename, NULL, BDRV_O_RDWR); bdrv_get_geometry(bs, &size); size *= 512; bdrv_delete(bs); @@ -332,7 +332,7 @@ static int img_commit(int argc, char **a } else { drv = NULL; } - if (bdrv_open2(bs, filename, BRDV_O_FLAGS, drv) < 0) { + if (bdrv_open2(bs, filename, BDRV_O_RDWR, drv) < 0) { error("Could not open '%s'", filename); } ret = bdrv_commit(bs); @@ -455,7 +455,8 @@ static int img_convert(int argc, char ** total_sectors = 0; for (bs_i = 0; bs_i < bs_n; bs_i++) { - bs[bs_i] = bdrv_new_open(argv[optind + bs_i], fmt); + bs[bs_i] = bdrv_new_open(argv[optind + bs_i], fmt, + BDRV_O_CACHE_WB|BDRV_O_RDONLY); if (!bs[bs_i]) error("Could not open '%s'", argv[optind + bs_i]); bdrv_get_geometry(bs[bs_i], &bs_sectors); @@ -483,7 +484,7 @@ static int img_convert(int argc, char ** } } - out_bs = bdrv_new_open(out_filename, out_fmt); + out_bs = bdrv_new_open(out_filename, out_fmt, BDRV_O_CACHE_WB|BDRV_O_RDWR); bs_i = 0; bs_offset = 0; @@ -706,7 +707,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, BDRV_O_FLAGS|BDRV_O_RDWR, drv) < 0) { error("Could not open '%s'", filename); } bdrv_get_format(bs, fmt_name, sizeof(fmt_name)); @@ -810,7 +811,7 @@ static void img_snapshot(int argc, char if (!bs) error("Not enough memory"); - if (bdrv_open2(bs, filename, 0, NULL) < 0) { + if (bdrv_open2(bs, filename, BDRV_O_RDWR, NULL) < 0) { error("Could not open '%s'", filename); } ++++++ bdrv_open2_flags_2.patch ++++++ diff -uNrp xen-3.4.0-testing.orig.2/tools/ioemu-remote/hw/xen_blktap.c xen-3.4.0-testing/tools/ioemu-remote/hw/xen_blktap.c --- xen-3.4.0-testing.orig.2/tools/ioemu-remote/hw/xen_blktap.c 2009-06-09 14:08:58.000000000 +0800 +++ xen-3.4.0-testing/tools/ioemu-remote/hw/xen_blktap.c 2009-06-09 14:09:08.000000000 +0800 @@ -227,6 +227,7 @@ static int open_disk(struct td_state *s, BlockDriver* drv; char* devname; static int devnumber = 0; + int flags = readonly ? BDRV_O_RDONLY : BDRV_O_RDWR; int i; DPRINTF("Opening %s as blktap%d\n", path, devnumber); @@ -249,7 +250,7 @@ static int open_disk(struct td_state *s, DPRINTF("%s driver specified\n", drv ? drv->format_name : "No"); /* Open the image */ - if (bdrv_open2(bs, path, 0, drv) != 0) { + if (bdrv_open2(bs, path, flags, drv) != 0) { fprintf(stderr, "Could not open image file %s\n", path); return -ENOMEM; } diff -uNrp xen-3.4.0-testing.orig.2/tools/ioemu-remote/xenstore.c xen-3.4.0-testing/tools/ioemu-remote/xenstore.c --- xen-3.4.0-testing.orig.2/tools/ioemu-remote/xenstore.c 2009-06-09 14:08:58.000000000 +0800 +++ xen-3.4.0-testing/tools/ioemu-remote/xenstore.c 2009-06-09 14:09:08.000000000 +0800 @@ -64,7 +64,8 @@ static void insert_media(void *opaque) for (i = 0; i < MAX_DRIVES + 1; i++) { bs = drives_table[i].bdrv; if (media_filename[i] && bs && bs->filename[0] == '\0') { - bdrv_open2(bs, media_filename[i], 0, &bdrv_raw); + /* Temporary BDRV_O_RDWR */ + bdrv_open2(bs, media_filename[i], BDRV_O_RDWR, &bdrv_raw); pstrcpy(bs->filename, sizeof(bs->filename), media_filename[i]); free(media_filename[i]); media_filename[i] = NULL; @@ -314,9 +315,9 @@ void xenstore_parse_domain_config(int hv { char **e_danger = NULL; char *buf = NULL; - char *fpath = NULL, *bpath = NULL, *btype = NULL, + char *fpath = NULL, *bpath = NULL, *btype = NULL, *mode = NULL, *dev = NULL, *params = NULL, *drv = NULL; - int i, j, any_hdN = 0, ret, is_tap; + int i, j, any_hdN = 0, ret, is_tap, flags; unsigned int len, num, hd_index, pci_devid = 0; BlockDriverState *bs; BlockDriver *format; @@ -378,7 +379,8 @@ void xenstore_parse_domain_config(int hv } for (i = 0; i < num; i++) { - format = NULL; /* don't know what the format is yet */ + flags = 0; + format = NULL; /* don't know what the format is yet */ /* read the backend path */ xenstore_get_backend_path(&bpath, "vbd", danger_path, hvm_domid, e_danger[i]); if (bpath == NULL) @@ -464,6 +466,17 @@ void xenstore_parse_domain_config(int hv format = &bdrv_raw; } + /* read the mode of the device */ + if (pasprintf(&buf, "%s/mode", bpath) == -1) + continue; + free(mode); + mode = xs_read(xsh, XBT_NULL, buf, &len); + + if (!strcmp(mode, "r") || !strcmp(mode, "ro")) + flags |= BDRV_O_RDONLY; + if (!strcmp(mode, "w") || !strcmp(mode, "rw")) + flags |= BDRV_O_RDWR; + #if 0 /* Phantom VBDs are disabled because the use of paths * from guest-controlled areas in xenstore is unsafe. @@ -509,7 +522,7 @@ void xenstore_parse_domain_config(int hv #ifdef CONFIG_STUBDOM if (pasprintf(&danger_buf, "%s/device/vbd/%s", danger_path, e_danger[i]) == -1) continue; - if (bdrv_open2(bs, danger_buf, BDRV_O_CACHE_WB /* snapshot and write-back */, &bdrv_raw) == 0) { + if (bdrv_open2(bs, danger_buf, flags|BDRV_O_CACHE_WB /* snapshot and write-back */, &bdrv_raw) == 0) { pstrcpy(bs->filename, sizeof(bs->filename), params); } else #endif @@ -535,7 +548,7 @@ void xenstore_parse_domain_config(int hv } } pstrcpy(bs->filename, sizeof(bs->filename), params); - if (bdrv_open2(bs, params, BDRV_O_CACHE_WB /* snapshot and write-back */, format) < 0) { + if (bdrv_open2(bs, params, flags|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])); ++++++ blktap.patch ++++++ --- /var/tmp/diff_new_pack.Q28305/_old 2009-06-12 20:42:01.000000000 +0200 +++ /var/tmp/diff_new_pack.Q28305/_new 2009-06-12 20:42:01.000000000 +0200 @@ -5,7 +5,7 @@ =================================================================== --- xen-3.4.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -2939,7 +2939,7 @@ class XendDomainInfo: +@@ -2940,7 +2940,7 @@ class XendDomainInfo: (fn, BOOTLOADER_LOOPBACK_DEVICE)) vbd = { ++++++ hv_xen_base.patch ++++++ --- /var/tmp/diff_new_pack.Q28305/_old 2009-06-12 20:42:02.000000000 +0200 +++ /var/tmp/diff_new_pack.Q28305/_new 2009-06-12 20:42:02.000000000 +0200 @@ -26,7 +26,7 @@ =================================================================== --- xen-3.4.0-testing.orig/xen/arch/x86/hvm/hvm.c +++ xen-3.4.0-testing/xen/arch/x86/hvm/hvm.c -@@ -45,6 +45,7 @@ +@@ -46,6 +46,7 @@ #include <asm/mc146818rtc.h> #include <asm/spinlock.h> #include <asm/hvm/hvm.h> @@ -34,7 +34,7 @@ #include <asm/hvm/vpt.h> #include <asm/hvm/support.h> #include <asm/hvm/cacheattr.h> -@@ -373,6 +374,7 @@ void hvm_domain_relinquish_resources(str +@@ -374,6 +375,7 @@ void hvm_domain_relinquish_resources(str void hvm_domain_destroy(struct domain *d) { @@ -42,7 +42,7 @@ hvm_funcs.domain_destroy(d); rtc_deinit(d); stdvga_deinit(d); -@@ -673,8 +675,14 @@ int hvm_vcpu_initialise(struct vcpu *v) +@@ -674,8 +676,14 @@ int hvm_vcpu_initialise(struct vcpu *v) { int rc; @@ -57,7 +57,7 @@ if ( (rc = hvm_funcs.vcpu_initialise(v)) != 0 ) goto fail2; -@@ -721,12 +729,14 @@ int hvm_vcpu_initialise(struct vcpu *v) +@@ -726,6 +734,7 @@ int hvm_vcpu_initialise(struct vcpu *v) hvm_funcs.vcpu_destroy(v); fail2: vlapic_destroy(v); @@ -65,14 +65,15 @@ fail1: return rc; } - +@@ -733,6 +742,7 @@ int hvm_vcpu_initialise(struct vcpu *v) void hvm_vcpu_destroy(struct vcpu *v) { + tasklet_kill(&v->arch.hvm_vcpu.assert_evtchn_irq_tasklet); + hyperx_intercept_vcpu_destroy(v); hvm_vcpu_cacheattr_destroy(v); vlapic_destroy(v); hvm_funcs.vcpu_destroy(v); -@@ -1678,7 +1688,7 @@ void hvm_cpuid(unsigned int input, unsig +@@ -1684,7 +1694,7 @@ void hvm_cpuid(unsigned int input, unsig return; if ( cpuid_hypervisor_leaves(input, eax, ebx, ecx, edx) ) @@ -81,7 +82,7 @@ domain_cpuid(v->domain, input, *ecx, eax, ebx, ecx, edx); -@@ -1690,6 +1700,8 @@ void hvm_cpuid(unsigned int input, unsig +@@ -1696,6 +1706,8 @@ void hvm_cpuid(unsigned int input, unsig if ( vlapic_hw_disabled(vcpu_vlapic(v)) ) __clear_bit(X86_FEATURE_APIC & 31, edx); } @@ -90,7 +91,7 @@ } void hvm_rdtsc_intercept(struct cpu_user_regs *regs) -@@ -1789,6 +1801,8 @@ int hvm_msr_read_intercept(struct cpu_us +@@ -1795,6 +1807,8 @@ int hvm_msr_read_intercept(struct cpu_us break; default: @@ -99,7 +100,7 @@ return hvm_funcs.msr_read_intercept(regs); } -@@ -1877,6 +1891,8 @@ int hvm_msr_write_intercept(struct cpu_u +@@ -1883,6 +1897,8 @@ int hvm_msr_write_intercept(struct cpu_u break; default: @@ -108,7 +109,7 @@ return hvm_funcs.msr_write_intercept(regs); } -@@ -2044,6 +2060,10 @@ int hvm_do_hypercall(struct cpu_user_reg +@@ -2050,6 +2066,10 @@ int hvm_do_hypercall(struct cpu_user_reg case 0: break; } @@ -119,7 +120,7 @@ if ( (eax & 0x80000000) && is_viridian_domain(curr->domain) ) return viridian_hypercall(regs); -@@ -2560,6 +2580,15 @@ long do_hvm_op(unsigned long op, XEN_GUE +@@ -2566,6 +2586,15 @@ long do_hvm_op(unsigned long op, XEN_GUE rc = -EINVAL; break; ++++++ init.xend ++++++ --- /var/tmp/diff_new_pack.Q28305/_old 2009-06-12 20:42:02.000000000 +0200 +++ /var/tmp/diff_new_pack.Q28305/_new 2009-06-12 20:42:02.000000000 +0200 @@ -21,7 +21,7 @@ . /etc/rc.status rc_reset -XEND=`pidofproc /usr/sbin/xend` +XEND=`pidof -x /usr/sbin/xend` await_daemons_up() { ++++++ init.xendomains ++++++ --- /var/tmp/diff_new_pack.Q28305/_old 2009-06-12 20:42:02.000000000 +0200 +++ /var/tmp/diff_new_pack.Q28305/_new 2009-06-12 20:42:02.000000000 +0200 @@ -55,8 +55,7 @@ check() { - XEND=`ps ax | grep -w xend | grep -w python | awk '{ print $1 }'` - XEND=`echo $XEND` + XEND=`pidof -x /usr/sbin/xend` if [ "$1" = status ]; then if [ ! -e /proc/xen/capabilities ] || [ ! -r "$XENDOM_CONFIG" ] || [ -z "$XEND" ]; then ++++++ snapshot-xend.patch ++++++ --- /var/tmp/diff_new_pack.Q28305/_old 2009-06-12 20:42:03.000000000 +0200 +++ /var/tmp/diff_new_pack.Q28305/_new 2009-06-12 20:42:03.000000000 +0200 @@ -115,7 +115,7 @@ try: if not os.path.isdir("/var/lib/xen"): os.makedirs("/var/lib/xen") -@@ -98,52 +98,59 @@ def save(fd, dominfo, network, live, dst +@@ -98,52 +98,61 @@ def save(fd, dominfo, network, live, dst image_cfg = dominfo.info.get('image', {}) hvm = dominfo.info.is_hvm() @@ -191,6 +191,8 @@ + domain_name) + if hvm: + dominfo.image.saveDeviceModel() ++ if name: ++ dominfo.image.resumeDeviceModel() + + if line == "suspend": + tochild.write("done\n") @@ -221,7 +223,7 @@ if checkpoint: dominfo.resumeDomain() -@@ -207,6 +214,71 @@ def restore(xd, fd, dominfo = None, paus +@@ -207,6 +216,71 @@ def restore(xd, fd, dominfo = None, paus if othervm is not None and othervm.domid is not None: raise VmError("Domain '%s' already exists with ID '%d'" % (domconfig["name_label"], othervm.domid)) @@ -293,7 +295,7 @@ if dominfo: dominfo.resume() else: -@@ -322,26 +394,7 @@ def restore(xd, fd, dominfo = None, paus +@@ -322,26 +396,7 @@ def restore(xd, fd, dominfo = None, paus dominfo.completeRestore(handler.store_mfn, handler.console_mfn) @@ -345,7 +347,7 @@ xc = xen.lowlevel.xc.xc() xoptions = XendOptions.instance() -@@ -1418,6 +1419,181 @@ class XendDomain: +@@ -1421,6 +1422,187 @@ class XendDomain: raise XendError("can't write guest state file %s: %s" % (dst, ex[1])) @@ -367,6 +369,12 @@ + if not dominfo: + raise XendInvalidDomain(str(domid)) + ++ snap_file = os.path.join(xoptions.get_xend_domains_path(), ++ dominfo.get_uuid(), "snapshots", name) ++ ++ if os.access(snap_file, os.F_OK): ++ raise XendError("Snapshot:%s exist for domain %s\n" % (name, str(domid))) ++ + if dominfo.getDomid() == DOM0_ID: + raise XendError("Cannot snapshot privileged domain %s" % str(domid)) + if dominfo._stateGet() != DOM_STATE_RUNNING: @@ -533,7 +541,7 @@ +++ xen-3.4.0-testing/tools/python/xen/xm/main.py @@ -120,6 +120,14 @@ SUBCOMMAND_HELP = { 'Restore a domain from a saved state.'), - 'save' : ('[-c] <Domain> <CheckpointFile>', + 'save' : ('[-c|-f] <Domain> <CheckpointFile>', 'Save a domain state to restore later.'), + 'snapshot-create' : ('[-d] <Domain> <SnapshotName>', + 'Snapshot a running domain.'), @@ -546,9 +554,9 @@ 'shutdown' : ('<Domain> [-waRH]', 'Shutdown a domain.'), 'top' : ('', 'Monitor a host and the domains in real time.'), 'unpause' : ('<Domain>', 'Unpause a paused domain.'), -@@ -276,6 +284,9 @@ SUBCOMMAND_OPTIONS = { - 'save': ( +@@ -277,6 +285,9 @@ SUBCOMMAND_OPTIONS = { ('-c', '--checkpoint', 'Leave domain running after creating snapshot'), + ('-f', '--force', 'Force to overwrite exist file'), ), + 'snapshot-create': ( + ('-d', '--diskonly', 'Perform disk only snapshot of domain'), @@ -556,7 +564,7 @@ 'restore': ( ('-p', '--paused', 'Do not unpause domain after restoring it'), ), -@@ -302,6 +313,10 @@ common_commands = [ +@@ -303,6 +314,10 @@ common_commands = [ "restore", "resume", "save", @@ -567,7 +575,7 @@ "shell", "shutdown", "start", -@@ -333,6 +348,10 @@ domain_commands = [ +@@ -334,6 +349,10 @@ domain_commands = [ "restore", "resume", "save", @@ -578,7 +586,7 @@ "shutdown", "start", "suspend", -@@ -724,6 +743,62 @@ def xm_event_monitor(args): +@@ -725,6 +744,62 @@ def xm_event_monitor(args): # ######################################################################### @@ -640,8 +648,8 @@ + def xm_save(args): - arg_check(args, "save", 2, 3) -@@ -2853,6 +2928,10 @@ commands = { + arg_check(args, "save", 2, 4) +@@ -2857,6 +2932,10 @@ commands = { "restore": xm_restore, "resume": xm_resume, "save": xm_save, ++++++ svm-lmsl.patch ++++++ --- /var/tmp/diff_new_pack.Q28305/_old 2009-06-12 20:42:03.000000000 +0200 +++ /var/tmp/diff_new_pack.Q28305/_new 2009-06-12 20:42:03.000000000 +0200 @@ -2,7 +2,7 @@ =================================================================== --- xen-3.4.0-testing.orig/xen/arch/x86/hvm/hvm.c +++ xen-3.4.0-testing/xen/arch/x86/hvm/hvm.c -@@ -537,11 +537,12 @@ static int hvm_load_cpu_ctxt(struct doma +@@ -538,11 +538,12 @@ static int hvm_load_cpu_ctxt(struct doma return -EINVAL; } @@ -16,7 +16,7 @@ (!cpu_has_ffxsr && (ctxt.msr_efer & EFER_FFXSE)) || ((ctxt.msr_efer & (EFER_LME|EFER_LMA)) == EFER_LMA) ) { -@@ -818,10 +819,11 @@ int hvm_set_efer(uint64_t value) +@@ -824,10 +825,11 @@ int hvm_set_efer(uint64_t value) value &= ~EFER_LMA; ++++++ x86-cpufreq-report.patch ++++++ --- /var/tmp/diff_new_pack.Q28305/_old 2009-06-12 20:42:03.000000000 +0200 +++ /var/tmp/diff_new_pack.Q28305/_new 2009-06-12 20:42:03.000000000 +0200 @@ -19,15 +19,7 @@ struct xen_platform_op curop, *op = &curop; if ( !IS_PRIV(current->domain) ) -@@ -313,7 +314,6 @@ ret_t do_platform_op(XEN_GUEST_HANDLE(xe - { - uint32_t cpu; - uint64_t idletime, now = NOW(); -- struct vcpu *v; - struct xenctl_cpumap ctlmap; - cpumask_t cpumap; - XEN_GUEST_HANDLE(uint8) cpumap_bitmap; -@@ -386,6 +386,20 @@ ret_t do_platform_op(XEN_GUEST_HANDLE(xe +@@ -385,6 +386,20 @@ ret_t do_platform_op(XEN_GUEST_HANDLE(xe break; } break; ++++++ x86-show-page-walk-early.patch ++++++ --- /var/tmp/diff_new_pack.Q28305/_old 2009-06-12 20:42:03.000000000 +0200 +++ /var/tmp/diff_new_pack.Q28305/_new 2009-06-12 20:42:03.000000000 +0200 @@ -134,7 +134,7 @@ =================================================================== --- xen-3.4.0-testing.orig/xen/include/asm-x86/mm.h +++ xen-3.4.0-testing/xen/include/asm-x86/mm.h -@@ -411,6 +411,7 @@ TYPE_SAFE(unsigned long,mfn); +@@ -412,6 +412,7 @@ TYPE_SAFE(unsigned long,mfn); #define machine_to_phys_mapping ((unsigned long *)RDWR_MPT_VIRT_START) #define INVALID_M2P_ENTRY (~0UL) #define VALID_M2P(_e) (!((_e) & (1UL<<(BITS_PER_LONG-1)))) ++++++ xen-3.4.0-testing-src.tar.bz2 ++++++ xen/xen-3.4.0-testing-src.tar.bz2 xen/xen-3.4.0-testing-src.tar.bz2 differ: byte 11, line 1 ++++++ xenapi-console-protocol.patch ++++++ --- /var/tmp/diff_new_pack.Q28305/_old 2009-06-12 20:42:03.000000000 +0200 +++ /var/tmp/diff_new_pack.Q28305/_new 2009-06-12 20:42:03.000000000 +0200 @@ -2,7 +2,7 @@ =================================================================== --- xen-3.4.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -3570,6 +3570,14 @@ class XendDomainInfo: +@@ -3571,6 +3571,14 @@ class XendDomainInfo: if not config.has_key('backend'): config['backend'] = "00000000-0000-0000-0000-000000000000" ++++++ xen-config.diff ++++++ --- /var/tmp/diff_new_pack.Q28305/_old 2009-06-12 20:42:03.000000000 +0200 +++ /var/tmp/diff_new_pack.Q28305/_new 2009-06-12 20:42:03.000000000 +0200 @@ -2,7 +2,7 @@ =================================================================== --- xen-3.4.0-testing.orig/Config.mk +++ xen-3.4.0-testing/Config.mk -@@ -117,14 +117,14 @@ QEMU_REMOTE=http://xenbits.xensource.com +@@ -124,14 +124,14 @@ QEMU_REMOTE=http://xenbits.xensource.com # Specify which qemu-dm to use. This may be `ioemu' to use the old # Mercurial in-tree version, or a local directory, or a git URL. # CONFIG_QEMU ?= ../qemu-xen.git ++++++ xend-core-dump-loc.diff ++++++ --- /var/tmp/diff_new_pack.Q28305/_old 2009-06-12 20:42:03.000000000 +0200 +++ /var/tmp/diff_new_pack.Q28305/_new 2009-06-12 20:42:03.000000000 +0200 @@ -2,7 +2,7 @@ =================================================================== --- xen-3.4.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -2117,7 +2117,7 @@ class XendDomainInfo: +@@ -2118,7 +2118,7 @@ class XendDomainInfo: if not corefile: this_time = time.strftime("%Y-%m%d-%H%M.%S", time.localtime()) ++++++ xend-domain-lock.patch ++++++ --- /var/tmp/diff_new_pack.Q28305/_old 2009-06-12 20:42:03.000000000 +0200 +++ /var/tmp/diff_new_pack.Q28305/_new 2009-06-12 20:42:03.000000000 +0200 @@ -94,7 +94,7 @@ XendTask.log_progress(0, 30, self._constructDomain) XendTask.log_progress(31, 60, self._initDomain) -@@ -2626,6 +2629,11 @@ class XendDomainInfo: +@@ -2627,6 +2630,11 @@ class XendDomainInfo: self._stateSet(DOM_STATE_HALTED) self.domid = None # Do not push into _stateSet()! @@ -106,7 +106,7 @@ finally: self.refresh_shutdown_lock.release() -@@ -3992,6 +4000,74 @@ class XendDomainInfo: +@@ -3993,6 +4001,74 @@ class XendDomainInfo: def has_device(self, dev_class, dev_uuid): return (dev_uuid in self.info['%s_refs' % dev_class.lower()]) @@ -203,7 +203,7 @@ def __init__(self): self.configure() -@@ -368,6 +379,19 @@ class XendOptions: +@@ -368,6 +379,24 @@ class XendOptions: return self.get_config_int("qemu-dm-logrotate-count", self.qemu_dm_logrotate_count) @@ -218,7 +218,12 @@ + return self.get_config_string("xend-domain-lock-path", self.xend_domain_lock_path_default) + + def get_xend_domain_lock_utility(self): -+ return self.get_config_string('xend-domain-lock-utility', self.xend_domain_lock_utility) ++ s = self.get_config_string('xend-domain-lock-utility') ++ ++ if s: ++ return os.path.join(osdep.scripts_dir, s) ++ else: ++ return self.xend_domain_lock_utility + class XendOptionsFile(XendOptions): @@ -235,7 +240,7 @@ dominfo.migrateDevices(network, dst, DEV_MIGRATE_STEP2, domain_name) log.info("Domain %d suspended.", dominfo.getDomid()) -@@ -399,6 +400,7 @@ def restore(xd, fd, dominfo = None, paus +@@ -401,6 +402,7 @@ def restore(xd, fd, dominfo = None, paus if not paused: dominfo.unpause() @@ -251,7 +256,7 @@ XEN_SCRIPTS += xen-hotplug-cleanup XEN_SCRIPTS += external-device-migrate XEN_SCRIPTS += vscsi -+XEN_SCRIPTS += domain-lock xen-monitor ++XEN_SCRIPTS += domain-lock vm-monitor XEN_SCRIPT_DATA = xen-script-common.sh locking.sh logging.sh XEN_SCRIPT_DATA += xen-hotplug-common.sh xen-network-common.sh vif-common.sh XEN_SCRIPT_DATA += block-common.sh vtpm-common.sh vtpm-hotplug-common.sh @@ -282,7 +287,7 @@ + local path=$1/lock + local name=$2 + -+ pid=`ps -efwww | grep xen-monitor | grep $name | awk '{print $2}'` ++ pid=`ps -efwww | grep vm-monitor | grep $name | awk '{print $2}'` + if [ -n "$pid" ]; then + kill $pid + rm -f $path @@ -343,10 +348,10 @@ + get_status $vm_path + ;; +esac -Index: xen-3.4.0-testing/tools/hotplug/Linux/xen-monitor +Index: xen-3.4.0-testing/tools/hotplug/Linux/vm-monitor =================================================================== --- /dev/null -+++ xen-3.4.0-testing/tools/hotplug/Linux/xen-monitor ++++ xen-3.4.0-testing/tools/hotplug/Linux/vm-monitor @@ -0,0 +1,41 @@ +#!/bin/bash + @@ -374,7 +379,7 @@ + local rc=0 + + [ -f $path ] || touch $path -+ flock -x -w $HA_TICK $path $basedir/xen-monitor $* ++ flock -x -w $HA_TICK $path $basedir/vm-monitor $* + rc=$? + if [ $rc -eq 1 ]; then + echo `cat $path` @@ -386,6 +391,6 @@ + +if [ $0 = "$basedir/set-lock" ]; then + create_lock $* -+elif [ $0 = "$basedir/xen-monitor" ]; then ++elif [ $0 = "$basedir/vm-monitor" ]; then + monitor $* +fi ++++++ xen-destdir.diff ++++++ --- /var/tmp/diff_new_pack.Q28305/_old 2009-06-12 20:42:03.000000000 +0200 +++ /var/tmp/diff_new_pack.Q28305/_new 2009-06-12 20:42:03.000000000 +0200 @@ -26,11 +26,13 @@ =================================================================== --- xen-3.4.0-testing.orig/tools/security/Makefile +++ xen-3.4.0-testing/tools/security/Makefile -@@ -61,7 +61,7 @@ install: all $(ACM_CONFIG_FILE) +@@ -60,8 +60,8 @@ install: all $(ACM_CONFIG_FILE) + $(INSTALL_DATA) $(ACM_INST_HTML) $(DESTDIR)$(ACM_SECGEN_HTMLDIR) $(INSTALL_DIR) $(DESTDIR)$(ACM_SECGEN_CGIDIR) $(INSTALL_PROG) $(ACM_INST_CGI) $(DESTDIR)$(ACM_SECGEN_CGIDIR) - python python/setup.py install \ -- --prefix="$(PREFIX)" --root="$(DESTDIR)" --force +- $(PYTHON) python/setup.py install $(PYTHON_PREFIX_ARG) \ +- --root="$(DESTDIR)" --force ++ $(PYTHON) python/setup.py install \ + --prefix="/usr" --root="$(DESTDIR)" --force else .PHONY: all @@ -42,8 +44,8 @@ @@ -11,7 +11,7 @@ build: .PHONY: install install: all - CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py install \ -- --prefix="$(PREFIX)" --root="$(DESTDIR)" --force + CC="$(CC)" CFLAGS="$(CFLAGS)" $(PYTHON) setup.py install \ +- $(PYTHON_PREFIX_ARG) --root="$(DESTDIR)" --force + --prefix="/usr" --root="$(DESTDIR)" --force $(INSTALL_DIR) $(DESTDIR)/var/run/xend/boot @@ -55,8 +57,8 @@ @@ -56,7 +56,7 @@ refresh-po: $(POTFILE) .PHONY: install install: install-messages install-dtd - CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py install \ -- --prefix="$(PREFIX)" --root="$(DESTDIR)" --force + CC="$(CC)" CFLAGS="$(CFLAGS)" $(PYTHON) setup.py install \ +- $(PYTHON_PREFIX_ARG) --root="$(DESTDIR)" --force + --prefix="/usr" --root="$(DESTDIR)" --force install-dtd: all ++++++ xen-domUloader.diff ++++++ --- /var/tmp/diff_new_pack.Q28305/_old 2009-06-12 20:42:03.000000000 +0200 +++ /var/tmp/diff_new_pack.Q28305/_new 2009-06-12 20:42:03.000000000 +0200 @@ -122,7 +122,7 @@ import xen.util.xsm.xsm as security from xen.util import xsconstants -@@ -2134,6 +2134,10 @@ class XendDomainInfo: +@@ -2135,6 +2135,10 @@ class XendDomainInfo: deviceClass, config = self.info['devices'].get(dev_uuid) self._waitForDevice(deviceClass, config['devid']) @@ -133,7 +133,7 @@ def _waitForDevice_destroy(self, deviceClass, devid, backpath): return self.getDeviceController(deviceClass).waitForDevice_destroy( devid, backpath) -@@ -2892,9 +2896,19 @@ class XendDomainInfo: +@@ -2893,9 +2897,19 @@ class XendDomainInfo: devtype = devinfo[0] disk = devinfo[1]['uname'] @@ -156,7 +156,7 @@ if mounted: # This is a file, not a device. pygrub can cope with a # file if it's raw, but if it's QCOW or other such formats -@@ -2910,7 +2924,9 @@ class XendDomainInfo: +@@ -2911,7 +2925,9 @@ class XendDomainInfo: from xen.xend import XendDomain dom0 = XendDomain.instance().privilegedDomain() @@ -167,7 +167,7 @@ fn = BOOTLOADER_LOOPBACK_DEVICE try: -@@ -2920,8 +2936,10 @@ class XendDomainInfo: +@@ -2921,8 +2937,10 @@ class XendDomainInfo: if mounted: log.info("Unmounting %s from %s." % (fn, BOOTLOADER_LOOPBACK_DEVICE)) ++++++ xen-max-free-mem.diff ++++++ --- /var/tmp/diff_new_pack.Q28305/_old 2009-06-12 20:42:04.000000000 +0200 +++ /var/tmp/diff_new_pack.Q28305/_new 2009-06-12 20:42:04.000000000 +0200 @@ -94,7 +94,7 @@ =================================================================== --- xen-3.4.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -1294,6 +1294,27 @@ class XendDomainInfo: +@@ -1295,6 +1295,27 @@ class XendDomainInfo: dev_str_list = dev_str_list + [dev_str] return dev_str_list ++++++ xen-xmexample-vti.diff ++++++ --- /var/tmp/diff_new_pack.Q28305/_old 2009-06-12 20:42:04.000000000 +0200 +++ /var/tmp/diff_new_pack.Q28305/_new 2009-06-12 20:42:04.000000000 +0200 @@ -2,8 +2,8 @@ =================================================================== --- xen-3.4.0-testing.orig/tools/examples/Makefile +++ xen-3.4.0-testing/tools/examples/Makefile -@@ -20,7 +20,6 @@ XEN_CONFIGS += xmexample.hvm-stubdom - XEN_CONFIGS += xmexample.hvm-dm +@@ -19,7 +19,6 @@ XEN_CONFIGS += xmexample.hvm + XEN_CONFIGS += xmexample.hvm-stubdom XEN_CONFIGS += xmexample.pv-grub XEN_CONFIGS += xmexample.nbd -XEN_CONFIGS += xmexample.vti ++++++ xmclone.sh ++++++ --- /var/tmp/diff_new_pack.Q28305/_old 2009-06-12 20:42:04.000000000 +0200 +++ /var/tmp/diff_new_pack.Q28305/_new 2009-06-12 20:42:04.000000000 +0200 @@ -679,7 +679,7 @@ # if [ -n "$MAC" ] then - if [ "$SLE10" -a -d etc/sysconfig/network/ ] + if [ -d etc/sysconfig/network/ ] then echo "Changing the Network configuration in the newly copied image." pushd "etc/sysconfig/network/" > /dev/null @@ -694,7 +694,13 @@ losetup -d $loopdev exit 1 fi - mv -f "$ETH0" ifcfg-eth-id-$MAC + if [ "$SLE10" ] + then + mv -f "$ETH0" ifcfg-eth-id-$MAC + else + sed -i -e "s,^LLADDR=.*$,LLADDR='$MAC'," \ + ifcfg-eth0 + fi popd > /dev/null fi @@ -732,7 +738,7 @@ sed -i -e "s,^IPADDR=.*$,IPADDR=$IP," \ ifcfg-eth-id-$MAC else - sed -i -e "s,^IPADDR=.*$,IPADDR=$IP/$MASK," \ + sed -i -e "s,^IPADDR=.*$,IPADDR=$IP/$MASK," \ ifcfg-eth0 fi popd > /dev/null ++++++ xm-save-check-file.patch ++++++ Index: xen-3.4.0-testing/tools/python/xen/xend/XendAPI.py =================================================================== --- xen-3.4.0-testing.orig/tools/python/xen/xend/XendAPI.py +++ xen-3.4.0-testing/tools/python/xen/xend/XendAPI.py @@ -1817,10 +1817,10 @@ class XendAPI(object): bool(live), port, node, ssl) return xen_api_success_void() - def VM_save(self, _, vm_ref, dest, checkpoint): + def VM_save(self, _, vm_ref, dest, checkpoint, force): xendom = XendDomain.instance() xeninfo = xendom.get_vm_by_uuid(vm_ref) - xendom.domain_save(xeninfo.getDomid(), dest, checkpoint) + xendom.domain_save(xeninfo.getDomid(), dest, checkpoint, force) return xen_api_success_void() def VM_restore(self, _, src, paused): Index: xen-3.4.0-testing/tools/python/xen/xend/XendDomain.py =================================================================== --- xen-3.4.0-testing.orig/tools/python/xen/xend/XendDomain.py +++ xen-3.4.0-testing/tools/python/xen/xend/XendDomain.py @@ -1380,7 +1380,7 @@ class XendDomain: finally: sock.close() - def domain_save(self, domid, dst, checkpoint=False): + def domain_save(self, domid, dst, checkpoint=False, force=False): """Start saving a domain to file. @param domid: Domain ID or Name @@ -1396,6 +1396,9 @@ class XendDomain: if not dominfo: raise XendInvalidDomain(str(domid)) + if os.access(dst, os.F_OK) and not force: + raise XendError("Save file:%s exist!\n" % dst) + if dominfo.getDomid() == DOM0_ID: raise XendError("Cannot save privileged domain %s" % str(domid)) if dominfo._stateGet() != DOM_STATE_RUNNING: Index: xen-3.4.0-testing/tools/python/xen/xm/main.py =================================================================== --- xen-3.4.0-testing.orig/tools/python/xen/xm/main.py +++ xen-3.4.0-testing/tools/python/xen/xm/main.py @@ -118,7 +118,7 @@ SUBCOMMAND_HELP = { 'reset' : ('<Domain>', 'Reset a domain.'), 'restore' : ('<CheckpointFile> [-p]', 'Restore a domain from a saved state.'), - 'save' : ('[-c] <Domain> <CheckpointFile>', + 'save' : ('[-c|-f] <Domain> <CheckpointFile>', 'Save a domain state to restore later.'), 'shutdown' : ('<Domain> [-waRH]', 'Shutdown a domain.'), 'top' : ('', 'Monitor a host and the domains in real time.'), @@ -275,6 +275,7 @@ SUBCOMMAND_OPTIONS = { ), 'save': ( ('-c', '--checkpoint', 'Leave domain running after creating snapshot'), + ('-f', '--force', 'Force to overwrite exist file'), ), 'restore': ( ('-p', '--paused', 'Do not unpause domain after restoring it'), @@ -726,18 +727,21 @@ def xm_event_monitor(args): def xm_save(args): - arg_check(args, "save", 2, 3) + arg_check(args, "save", 2, 4) try: - (options, params) = getopt.gnu_getopt(args, 'c', ['checkpoint']) + (options, params) = getopt.gnu_getopt(args, 'cf', ['checkpoint', 'force']) except getopt.GetoptError, opterr: err(opterr) usage('save') checkpoint = False + force = False for (k, v) in options: if k in ['-c', '--checkpoint']: checkpoint = True + if k in ['-f', '--force']: + force = True if len(params) != 2: err("Wrong number of parameters") @@ -751,9 +755,9 @@ def xm_save(args): sys.exit(1) if serverType == SERVER_XEN_API: - server.xenapi.VM.save(get_single_vm(dom), savefile, checkpoint) + server.xenapi.VM.save(get_single_vm(dom), savefile, checkpoint, force) else: - server.xend.domain.save(dom, savefile, checkpoint) + server.xend.domain.save(dom, savefile, checkpoint, force) def xm_restore(args): arg_check(args, "restore", 1, 2) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org