]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Introduce virDomainFSTrim() public API
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 20 Nov 2012 15:43:56 +0000 (16:43 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 28 Nov 2012 15:15:01 +0000 (16:15 +0100)
This will call FITRIM within guest. The API has 4 arguments,
however, only 2 will be used for now (@dom and @minumum).
The rest two are there if in future qemu guest agent learns them.

include/libvirt/libvirt.h.in
src/driver.h
src/libvirt.c
src/libvirt_public.syms

index 84dcde105e8e33b5eeb2e1f8494f590f2413744b..bd03315728dceb86bbf5cde0038ff82a82b34373 100644 (file)
@@ -4457,6 +4457,10 @@ int virDomainOpenGraphics(virDomainPtr dom,
 
 int virDomainInjectNMI(virDomainPtr domain, unsigned int flags);
 
+int virDomainFSTrim(virDomainPtr dom,
+                    const char *mountPoint,
+                    unsigned long long minimum,
+                    unsigned int flags);
 
 /**
  * virSchedParameterType:
index 7ba66adab7093d1bd8554dd0430ab499b18eaf47..5163840b5289ff63636069b3066c45528bbf6391 100644 (file)
@@ -903,6 +903,11 @@ typedef int
                            unsigned char **cpumap,
                            unsigned int *online,
                            unsigned int flags);
+typedef int
+    (*virDrvDomainFSTrim)(virDomainPtr dom,
+                          const char *mountPoint,
+                          unsigned long long minimum,
+                          unsigned int flags);
 
 /**
  * _virDriver:
@@ -1094,6 +1099,7 @@ struct _virDriver {
     virDrvNodeGetMemoryParameters       nodeGetMemoryParameters;
     virDrvNodeSetMemoryParameters       nodeSetMemoryParameters;
     virDrvNodeGetCPUMap                 nodeGetCPUMap;
+    virDrvDomainFSTrim                  domainFSTrim;
 };
 
 typedef int
index 4af6089a57fe8de0fb03c9d9fedccbe4c1a45f4c..23c36f97163089d5d9928d9c3458b6fb7f6f3417 100644 (file)
@@ -20224,3 +20224,58 @@ error:
     virDispatchError(conn);
     return -1;
 }
+
+/**
+ * virDomainFSTrim:
+ * @dom: a domain object
+ * @mountPoint: which mount point trim
+ * @minimum: Minimum contiguous free range to discard in bytes
+ * @flags: extra flags, not used yet, so callers should always pass 0
+ *
+ * Calls FITRIM within the guest (hence guest agent may be
+ * required depending on hypervisor used). Either call it on each
+ * mounted filesystem (@mountPoint is NULL) or just on specified
+ * @mountPoint. @minimum tell that free ranges 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.
+ *
+ * Returns 0 on success, -1 otherwise.
+ */
+int
+virDomainFSTrim(virDomainPtr dom,
+                const char *mountPoint,
+                unsigned long long minimum,
+                unsigned int flags)
+{
+    VIR_DOMAIN_DEBUG(dom, "mountPoint=%s, minimum=%llu, flags=%x",
+                     mountPoint, minimum, flags);
+
+    virResetLastError();
+
+    if (!VIR_IS_DOMAIN(dom)) {
+        virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
+        virDispatchError(NULL);
+        return -1;
+    }
+
+    if (dom->conn->flags & VIR_CONNECT_RO) {
+        virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
+        goto error;
+    }
+
+    if (dom->conn->driver->domainFSTrim) {
+        int ret = dom->conn->driver->domainFSTrim(dom, mountPoint,
+                                                  minimum, flags);
+        if (ret < 0)
+            goto error;
+        return ret;
+    }
+
+    virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
+
+error:
+    virDispatchError(dom->conn);
+    return -1;
+}
index f494821be2f2c7f41bf3f3a891eaea61df44cb81..f699e93cf979e2075d2578c1ab81583fd33caa6e 100644 (file)
@@ -574,4 +574,9 @@ LIBVIRT_1.0.0 {
         virNodeGetCPUMap;
 } LIBVIRT_0.10.2;
 
+LIBVIRT_1.0.1 {
+    global:
+        virDomainFSTrim;
+} LIBVIRT_1.0.0;
+
 # .... define new API here using predicted next version number ....