]> git.proxmox.com Git - mirror_zfs.git/blobdiff - module/zfs/zio_compress.c
Illumos 5661 - ZFS: "compression = on" should use lz4 if feature is enabled
[mirror_zfs.git] / module / zfs / zio_compress.c
index 07446234922b63e92d1214483b0251ef0230d417..6b8d6c39bd912b98e5e19f4e58bc43a15afb6447 100644 (file)
@@ -34,6 +34,7 @@
 #include <sys/zfs_context.h>
 #include <sys/compress.h>
 #include <sys/spa.h>
+#include <sys/zfeature.h>
 #include <sys/zio.h>
 #include <sys/zio_compress.h>
 
@@ -61,19 +62,27 @@ zio_compress_info_t zio_compress_table[ZIO_COMPRESS_FUNCTIONS] = {
 };
 
 enum zio_compress
-zio_compress_select(enum zio_compress child, enum zio_compress parent)
+zio_compress_select(spa_t *spa, enum zio_compress child,
+    enum zio_compress parent)
 {
+       enum zio_compress result;
+
        ASSERT(child < ZIO_COMPRESS_FUNCTIONS);
        ASSERT(parent < ZIO_COMPRESS_FUNCTIONS);
-       ASSERT(parent != ZIO_COMPRESS_INHERIT && parent != ZIO_COMPRESS_ON);
+       ASSERT(parent != ZIO_COMPRESS_INHERIT);
 
-       if (child == ZIO_COMPRESS_INHERIT)
-               return (parent);
+       result = child;
+       if (result == ZIO_COMPRESS_INHERIT)
+               result = parent;
 
-       if (child == ZIO_COMPRESS_ON)
-               return (ZIO_COMPRESS_ON_VALUE);
+       if (result == ZIO_COMPRESS_ON) {
+               if (spa_feature_is_active(spa, SPA_FEATURE_LZ4_COMPRESS))
+                       result = ZIO_COMPRESS_LZ4_ON_VALUE;
+               else
+                       result = ZIO_COMPRESS_LEGACY_ON_VALUE;
+       }
 
-       return (child);
+       return (result);
 }
 
 size_t