Author: delphij
Date: Tue Jul  1 22:31:09 2014
New Revision: 268126
URL: http://svnweb.freebsd.org/changeset/base/268126

Log:
  MFV r268121:
  
  4924 LZ4 Compression for metadata
  
  illumos/illumos-gate@b8289d24d866c1af02d7007348f7f057693c15d3
  
  MFC after:    2 weeks

Modified:
  head/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7
  head/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
Directory Properties:
  head/cddl/contrib/opensolaris/   (props changed)
  head/sys/cddl/contrib/opensolaris/   (props changed)

Modified: head/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7
==============================================================================
--- head/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7    Tue Jul  1 
22:16:44 2014        (r268125)
+++ head/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7    Tue Jul  1 
22:31:09 2014        (r268126)
@@ -23,7 +23,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd June 30, 2014
+.Dd July 1, 2014
 .Dt ZPOOL-FEATURES 7
 .Os
 .Sh NAME
@@ -235,14 +235,11 @@ administrator can turn on
 compression on any dataset on the
 pool using the
 .Xr zfs 8
-command. Please note that doing so will
-immediately activate the
-.Sy lz4_compress
-feature on the underlying
-pool
-.Pq even before any data is written ,
-and the feature will not be
-deactivated.
+command.
+Also, all newly written metadata
+will be compressed with
+.Sy lz4
+algorithm.
 Since this feature is not read-only compatible, this
 operation will render the pool unimportable on systems without support
 for the
@@ -251,6 +248,12 @@ feature.
 Booting off of
 .Sy lz4
 -compressed root pools is supported.
+.Pp
+This feature becomes
+.Sy active
+as soon as it is enabled and will
+never return to being
+.Sy enabled .
 .It Sy multi_vdev_crash_dump
 .Bl -column "READ\-ONLY COMPATIBLE" "com.joyent:multi_vdev_crash_dump"
 .It GUID Ta com.joyent:multi_vdev_crash_dump

Modified: head/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c      Tue Jul 
 1 22:16:44 2014        (r268125)
+++ head/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c      Tue Jul 
 1 22:31:09 2014        (r268126)
@@ -23,6 +23,7 @@
  * Copyright (c) 2013 by Delphix. All rights reserved.
  * Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
  * Copyright (c) 2013, Joyent, Inc. All rights reserved.
+ * Copyright (c) 2014, Nexenta Systems, Inc. All rights reserved.
  */
 
 #ifdef _KERNEL
@@ -168,7 +169,7 @@ zpool_feature_init(void)
        zfeature_register(SPA_FEATURE_LZ4_COMPRESS,
            "org.illumos:lz4_compress", "lz4_compress",
            "LZ4 compression algorithm support.", B_FALSE, B_FALSE,
-           B_FALSE, NULL);
+           B_TRUE, NULL);
 
        zfeature_register(SPA_FEATURE_MULTI_VDEV_CRASH_DUMP,
            "com.joyent:multi_vdev_crash_dump", "multi_vdev_crash_dump",

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c   Tue Jul  1 
22:16:44 2014        (r268125)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c   Tue Jul  1 
22:31:09 2014        (r268126)
@@ -24,6 +24,7 @@
  */
 /* Copyright (c) 2013 by Saso Kiselkov. All rights reserved. */
 /* Copyright (c) 2013, Joyent, Inc. All rights reserved. */
+/* Copyright (c) 2014, Nexenta Systems, Inc. All rights reserved. */
 
 #include <sys/dmu.h>
 #include <sys/dmu_impl.h>
@@ -44,6 +45,7 @@
 #include <sys/zio_checksum.h>
 #include <sys/zio_compress.h>
 #include <sys/sa.h>
+#include <sys/zfeature.h>
 #ifdef _KERNEL
 #include <sys/vm.h>
 #include <sys/zfs_znode.h>
@@ -1705,8 +1707,16 @@ dmu_write_policy(objset_t *os, dnode_t *
                 * XXX -- we should design a compression algorithm
                 * that specializes in arrays of bps.
                 */
-               compress = zfs_mdcomp_disable ? ZIO_COMPRESS_EMPTY :
-                   ZIO_COMPRESS_LZJB;
+               boolean_t lz4_ac = spa_feature_is_active(os->os_spa,
+                   SPA_FEATURE_LZ4_COMPRESS);
+
+               if (zfs_mdcomp_disable) {
+                       compress = ZIO_COMPRESS_EMPTY;
+               } else if (lz4_ac) {
+                       compress = ZIO_COMPRESS_LZ4;
+               } else {
+                       compress = ZIO_COMPRESS_LZJB;
+               }
 
                /*
                 * Metadata always gets checksummed.  If the data

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c   Tue Jul  1 
22:16:44 2014        (r268125)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c   Tue Jul  1 
22:31:09 2014        (r268126)
@@ -22,7 +22,7 @@
 /*
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2011, 2014 by Delphix. All rights reserved.
- * Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
+ * Copyright (c) 2013, 2014, Nexenta Systems, Inc.  All rights reserved.
  * Copyright (c) 2013 Martin Matuska <m...@freebsd.org>. All rights reserved.
  */
 
@@ -6425,6 +6425,22 @@ spa_sync_upgrades(spa_t *spa, dmu_tx_t *
            spa->spa_uberblock.ub_version >= SPA_VERSION_FEATURES) {
                spa_feature_create_zap_objects(spa, tx);
        }
+
+       /*
+        * LZ4_COMPRESS feature's behaviour was changed to activate_on_enable
+        * when possibility to use lz4 compression for metadata was added
+        * Old pools that have this feature enabled must be upgraded to have
+        * this feature active
+        */
+       if (spa->spa_uberblock.ub_version >= SPA_VERSION_FEATURES) {
+               boolean_t lz4_en = spa_feature_is_enabled(spa,
+                   SPA_FEATURE_LZ4_COMPRESS);
+               boolean_t lz4_ac = spa_feature_is_active(spa,
+                   SPA_FEATURE_LZ4_COMPRESS);
+
+               if (lz4_en && !lz4_ac)
+                       spa_feature_incr(spa, SPA_FEATURE_LZ4_COMPRESS, tx);
+       }
        rrw_exit(&dp->dp_config_rwlock, FTAG);
 }
 

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c     Tue Jul 
 1 22:16:44 2014        (r268125)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c     Tue Jul 
 1 22:31:09 2014        (r268126)
@@ -30,6 +30,7 @@
  * Copyright (c) 2013 by Delphix. All rights reserved.
  * Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
  * Copyright (c) 2013 Steven Hartland. All rights reserved.
+ * Copyright (c) 2014, Nexenta Systems, Inc. All rights reserved.
  */
 
 /*
@@ -2504,37 +2505,6 @@ zfs_prop_set_special(const char *dsname,
                }
                break;
        }
-       case ZFS_PROP_COMPRESSION:
-       {
-               if (intval == ZIO_COMPRESS_LZ4) {
-                       spa_t *spa;
-
-                       if ((err = spa_open(dsname, &spa, FTAG)) != 0)
-                               return (err);
-
-                       /*
-                        * Setting the LZ4 compression algorithm activates
-                        * the feature.
-                        */
-                       if (!spa_feature_is_active(spa,
-                           SPA_FEATURE_LZ4_COMPRESS)) {
-                               if ((err = zfs_prop_activate_feature(spa,
-                                   SPA_FEATURE_LZ4_COMPRESS)) != 0) {
-                                       spa_close(spa, FTAG);
-                                       return (err);
-                               }
-                       }
-
-                       spa_close(spa, FTAG);
-               }
-               /*
-                * We still want the default set action to be performed in the
-                * caller, we only performed zfeature settings here.
-                */
-               err = -1;
-               break;
-       }
-
        default:
                err = -1;
        }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to