
On Wed, Nov 28, 2012 at 11:56:23AM +0100, Peter Krempa wrote:
On 11/20/12 19:47, Michal Privoznik wrote:
under domfstrim command. Since API doesn't support all parameters (some must be NULL or zero), don't expose these in virsh neither. --- tools/virsh-domain.c | 40 ++++++++++++++++++++++++++++++++++++++++ tools/virsh.pod | 12 ++++++++++++ 2 files changed, 52 insertions(+), 0 deletions(-)
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index cc47383..4ea08f4 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -8300,6 +8300,45 @@ cleanup: return ret; }
+static const vshCmdInfo info_domfstrim[] = { + {"help", N_("Invoke fstrim on domain's mounted filesystems.")}, + {"desc", N_("Invoke fstrim on domain's mounted filesystems.")}, + {NULL, NULL} +}; + +static const vshCmdOptDef opts_domfstrim[] = { + {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, + {"minimum", VSH_OT_INT, 0, N_("Just a hint to ignore contiguous " + "free ranges smaller than this (Bytes)")},
Wouldn't it make sense to expose the mount point argument right now? I know it's not implemented yet, but when somebody does implement that we will need to change this later.
+ {NULL, 0, 0, NULL} +}; +static bool +cmdDomFSTrim(vshControl *ctl, const vshCmd *cmd) +{ + virDomainPtr dom = NULL; + bool ret = false; + unsigned long long minimum = 0; + unsigned int flags = 0; + + if (!(dom = vshCommandOptDomain(ctl, cmd, NULL))) + goto cleanup; + + if (vshCommandOptULongLong(cmd, "minimum", &minimum) < 0) { + vshError(ctl, _("Unable to parse integer parameter"));
As you know what's the name of the parameter print it in the error message so the user is not left guessing where the error is.
+ goto cleanup; + } + + if (virDomainFSTrim(dom, NULL, minimum, flags) < 0) { + vshError(ctl, _("Unable to invoke fstrim")); + goto cleanup; + } + + ret = true; + +cleanup: + return ret; +} + const vshCmdDef domManagementCmds[] = { {"attach-device", cmdAttachDevice, opts_attach_device, info_attach_device, 0}, @@ -8332,6 +8371,7 @@ const vshCmdDef domManagementCmds[] = { {"detach-interface", cmdDetachInterface, opts_detach_interface, info_detach_interface, 0}, {"domdisplay", cmdDomDisplay, opts_domdisplay, info_domdisplay, 0}, + {"domfstrim", cmdDomFSTrim, opts_domfstrim, info_domfstrim, 0}, {"domhostname", cmdDomHostname, opts_domhostname, info_domhostname, 0}, {"domid", cmdDomid, opts_domid, info_domid, 0}, {"domif-setlink", cmdDomIfSetLink, opts_domif_setlink, info_domif_setlink, 0}, diff --git a/tools/virsh.pod b/tools/virsh.pod index 29be39e..c3fdcb7 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -878,6 +878,18 @@ Output a URI which can be used to connect to the graphical display of the domain via VNC, SPICE or RDP. If I<--include-password> is specified, the SPICE channel password will be included in the URI.
+=item B<domfstrim> I<domain> [I<--minimum> B<bytes>] + +Issue a fstrim command on all mounted filesystems within a running +domain. It discards blocks which are not in use by the filesystem. +If I<--minimum> B<bytes> is specified, it tells guest kernel length +of contiguous free range. Smaller than this may be ignored (this is +a hint and the guest may not respect it). By increasing this value, +the fstrim operation will complete more quickly for filesystems +with badly fragmented free space, although not all blocks will +be discarded. The default value is zero, meaning "discard +every free block". + =item B<domhostname> I<domain>
Returns the hostname of a domain, if the hypervisor makes it available.
I'd rather see this with the ability to specify mountpoint to the api even if it still isn't supported.
Agreed, we should not cripple virsh to suit a particular libvirtd feature set, because you have to bear in mind that we have an RPC system that allows an old virsh to talk to a new libvirtd. 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 :|