Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 3 Oct 2018 15:31:44 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r339148 - stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Message-ID:  <201810031531.w93FVi0c055550@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Wed Oct  3 15:31:44 2018
New Revision: 339148
URL: https://svnweb.freebsd.org/changeset/base/339148

Log:
  MFC r337870: Fix mismerge in r337196.
  
  ZoL did the same mistake, and fixed it with separate commit 863522b1f9:
  
  dsl_scan_scrub_cb: don't double-account non-embedded blocks
  
  We were doing count_block() twice inside this function, once
  unconditionally at the beginning (intended to catch the embedded block
  case) and once near the end after processing the block.
  
  The double-accounting caused the "zpool scrub" progress statistics in
  "zpool status" to climb from 0% to 200% instead of 0% to 100%, and
  showed double the I/O rate it was actually seeing.
  
  This was apparently a regression introduced in commit 00c405b4b5e8,
  which was an incorrect port of this OpenZFS commit:
  
      https://github.com/openzfs/openzfs/commit/d8a447a7
  
  Reviewed by: Thomas Caputi <tcaputi@datto.com>
  Reviewed by: Matt Ahrens <matt@delphix.com>
  Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
  Reviewed-by: George Melikov <mail@gmelikov.ru>
  Signed-off-by: Steven Noonan <steven@uplinklabs.net>
  Closes #7720
  Closes #7738

Modified:
  stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c
==============================================================================
--- stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c	Wed Oct  3 14:59:39 2018	(r339147)
+++ stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c	Wed Oct  3 15:31:44 2018	(r339148)
@@ -3551,12 +3551,12 @@ dsl_scan_scrub_cb(dsl_pool_t *dp,
 	boolean_t needs_io;
 	int zio_flags = ZIO_FLAG_SCAN_THREAD | ZIO_FLAG_RAW | ZIO_FLAG_CANFAIL;
 	int d;
-	
-	count_block(scn, dp->dp_blkstats, bp);
 
 	if (phys_birth <= scn->scn_phys.scn_min_txg ||
-	    phys_birth >= scn->scn_phys.scn_max_txg)
+	    phys_birth >= scn->scn_phys.scn_max_txg) {
+		count_block(scn, dp->dp_blkstats, bp);
 		return (0);
+	}
 
 	/* Embedded BP's have phys_birth==0, so we reject them above. */
 	ASSERT(!BP_IS_EMBEDDED(bp));



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201810031531.w93FVi0c055550>