]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
storage: attempt to disable COW by default
authorDaniel P. Berrangé <berrange@redhat.com>
Fri, 17 Jul 2020 18:30:48 +0000 (19:30 +0100)
committerDaniel P. Berrangé <berrange@redhat.com>
Thu, 23 Jul 2020 15:18:09 +0000 (16:18 +0100)
This calls virFileSetCOW when building a pool with a request to attempt,
but not require, COW to be disabled. The effect is that nothing changes
on non-btrfs filesystems, but btrfs will get COW disabled on the
directory. This setting is then inherited by all newly created files in
the pool, avoiding the need for mgmt app to set "nocow" on a per-volume
basis.

Reviewed-by: Neal Gompa <ngompa13@gmail.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
src/storage/storage_util.c

index 2595162a618af9969be4bdebdaf288e8f2e41067..80b49bd1cf6de56611ef75b9e583bf4f2f8b6249 100644 (file)
@@ -2712,6 +2712,7 @@ virStorageBackendBuildLocal(virStoragePoolObjPtr pool)
     bool needs_create_as_uid;
     unsigned int dir_create_flags;
     g_autofree char *parent = NULL;
+    int ret;
 
     parent = g_strdup(def->target.path);
     if (!(p = strrchr(parent, '/'))) {
@@ -2745,11 +2746,19 @@ virStorageBackendBuildLocal(virStoragePoolObjPtr pool)
     /* Now create the final dir in the path with the uid/gid/mode
      * requested in the config. If the dir already exists, just set
      * the perms. */
-    return virDirCreate(def->target.path,
-                        mode,
-                        def->target.perms.uid,
-                        def->target.perms.gid,
-                        dir_create_flags);
+    ret = virDirCreate(def->target.path,
+                       mode,
+                       def->target.perms.uid,
+                       def->target.perms.gid,
+                       dir_create_flags);
+    if (ret < 0)
+        return -1;
+
+    if (virFileSetCOW(def->target.path,
+                      VIR_TRISTATE_BOOL_ABSENT) < 0)
+        return -1;
+
+    return 0;
 }