On Thu, Feb 27, 2014 at 03:56:42PM +0800, qiaonuohan wrote: > --memory-only option is introduced without compression supported. Therefore, > this is a freature regression of virsh dump. Now qemu has support dumping memory > in kdump-compressed format. This patch is adding new virDomainMemoryDump API, > so that the format in which qemu dump domain's memory can be specified. > > Signed-off-by: Qiao Nuohan <qiaonuohan@xxxxxxxxxxxxxx>_ > --- > include/libvirt/libvirt.h.in | 21 ++++++++++ > src/access/viraccessperm.c | 2 +- > src/access/viraccessperm.h | 6 +++ > src/driver.h | 7 ++++ > src/libvirt.c | 95 ++++++++++++++++++++++++++++++++++++++++++++ > src/libvirt_public.syms | 5 +++ > src/remote/remote_driver.c | 1 + > src/remote/remote_protocol.x | 15 ++++++- > src/remote_protocol-structs | 7 ++++ > src/test/test_driver.c | 17 +++++++- > 10 files changed, 172 insertions(+), 4 deletions(-) > > diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in > index 295d551..ab6efca 100644 > --- a/include/libvirt/libvirt.h.in > +++ b/include/libvirt/libvirt.h.in > @@ -1180,6 +1180,19 @@ typedef enum { > VIR_DUMP_MEMORY_ONLY = (1 << 4), /* use dump-guest-memory */ > } virDomainCoreDumpFlags; > > +/* Domain memory dump's format */ > +typedef enum { > + VIR_MEMORY_DUMP_COMPRESS_ZLIB = 1, /* dump guest memory in > + kdump-compressed format, with > + zlib-compressed */ > + VIR_MEMORY_DUMP_COMPRESS_LZO = 2, /* dump guest memory in > + kdump-compressed format, with > + lzo-compressed */ > + VIR_MEMORY_DUMP_COMPRESS_SNAPPY = 3, /* dump guest memory in > + kdump-compressed format, with > + snappy-compressed */ > +} virMemoryDumpFormat; s/virMemoryDumpFormat/virDomainCoreDumpFormat/ No need to assign values to each entry here since this is a plain enum, not bitflags. Also s/MEMORY_COMPRESS/DOMAIN_CORE_FORMAT/ for every member And add VIR_MEMORY_DUMP_FORMAT_RAW for the non-compressed format, which probably ought to be the default (ie first). > + > /* Domain migration flags. */ > typedef enum { > VIR_MIGRATE_LIVE = (1 << 0), /* live migration */ > @@ -1731,6 +1744,14 @@ int virDomainCoreDump (virDomainPtr domain, > unsigned int flags); > > /* > + * Domain core dump > + */ > +int virDomainMemoryDump (virDomainPtr domain, > + const char *to, > + unsigned int flags, > + unsigned int dumpformat); Convention is that the 'flags' parameter should always be the very last one. The name would be better as virDomainCoreDumpWithFormat IMHO to show it is an extension of virDomainCoreDump. > diff --git a/src/access/viraccessperm.h b/src/access/viraccessperm.h > index 6d14f05..2537fbf 100644 > --- a/src/access/viraccessperm.h > +++ b/src/access/viraccessperm.h > @@ -205,6 +205,12 @@ typedef enum { > VIR_ACCESS_PERM_DOMAIN_CORE_DUMP, /* Dump guest core */ > > /** > + * @desc: Dump domain's memory only > + * @message: Dumping domain's memory requires authorization > + */ > + VIR_ACCESS_PERM_DOMAIN_MEMORY_DUMP, /* Dump guest's memory only */ > + > + /** There's no point in inventing a new permission - the same permission as the existing API is more than OK. > +/** > + * virDomainMemoryDump: > + * @domain: a domain object > + * @to: path for the core file > + * @flags: bitwise-OR of virDomainCoreDumpFlags > + * @dumpformat: format of domain memory's dump > + * > + * This method will only dump the memory of a domain on a given file for > + * analysis, so @flag must includes VIR_DUMP_MEMORY_ONLY. This restricton seems rather dubious. This new method's functionality should be a super-set of virDomainCoreDump - ie everything that the old method could do, should be possible in the new method. All we do is add the ability to choose between formats. Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list