Author: mav
Date: Tue Jul 31 01:02:22 2018
New Revision: 336961
URL: https://svnweb.freebsd.org/changeset/base/336961

Log:
  MFV r336960: 9256 zfs send space estimation off by > 10% on some datasets
  
  illumos/illummos-gate@df477c0afa111b5205c872dab36dbfde391656de
  
  Reviewed by: Matt Ahrens <[email protected]>
  Reviewed by: John Kennedy <[email protected]>
  Approved by: Richard Lowe <[email protected]>
  Author:     Paul Dagnelie <[email protected]>

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
Directory Properties:
  head/sys/cddl/contrib/opensolaris/   (props changed)

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c      Tue Jul 
31 01:00:46 2018        (r336960)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c      Tue Jul 
31 01:02:22 2018        (r336961)
@@ -76,6 +76,11 @@ TUNABLE_INT("vfs.zfs.send_set_freerecords_bit", &zfs_s
 static char *dmu_recv_tag = "dmu_recv_tag";
 const char *recv_clone_name = "%recv";
 
+/*
+ * Use this to override the recordsize calculation for fast zfs send estimates.
+ */
+uint64_t zfs_override_estimate_recordsize = 0;
+
 #define        BP_SPAN(datablkszsec, indblkshift, level) \
        (((uint64_t)datablkszsec) << (SPA_MINBLOCKSHIFT + \
        (level) * (indblkshift - SPA_BLKPTRSHIFT)))
@@ -1131,7 +1136,7 @@ static int
 dmu_adjust_send_estimate_for_indirects(dsl_dataset_t *ds, uint64_t 
uncompressed,
     uint64_t compressed, boolean_t stream_compressed, uint64_t *sizep)
 {
-       int err;
+       int err = 0;
        uint64_t size;
        /*
         * Assume that space (both on-disk and in-stream) is dominated by
@@ -1144,7 +1149,9 @@ dmu_adjust_send_estimate_for_indirects(dsl_dataset_t *
        VERIFY0(dmu_objset_from_ds(ds, &os));
 
        /* Assume all (uncompressed) blocks are recordsize. */
-       if (os->os_phys->os_type == DMU_OST_ZVOL) {
+       if (zfs_override_estimate_recordsize != 0) {
+               recordsize = zfs_override_estimate_recordsize;
+       } else if (os->os_phys->os_type == DMU_OST_ZVOL) {
                err = dsl_prop_get_int_ds(ds,
                    zfs_prop_to_name(ZFS_PROP_VOLBLOCKSIZE), &recordsize);
        } else {
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to