svn commit: r339110 - stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Alexander Motin
mav at FreeBSD.org
Wed Oct 3 02:14:39 UTC 2018
Author: mav
Date: Wed Oct 3 02:14:38 2018
New Revision: 339110
URL: https://svnweb.freebsd.org/changeset/base/339110
Log:
MFC r336961:
MFV r336960: 9256 zfs send space estimation off by > 10% on some datasets
illumos/illummos-gate at df477c0afa111b5205c872dab36dbfde391656de
Reviewed by: Matt Ahrens <matt at delphix.com>
Reviewed by: John Kennedy <john.kennedy at delphix.com>
Approved by: Richard Lowe <richlowe at richlowe.net>
Author: Paul Dagnelie <pcd at delphix.com>
Modified:
stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
==============================================================================
--- stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Wed Oct 3 02:13:42 2018 (r339109)
+++ stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Wed Oct 3 02:14:38 2018 (r339110)
@@ -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 {
More information about the svn-src-stable
mailing list