Author: mav
Date: Wed Aug 15 21:01:57 2018
New Revision: 337870
URL: https://svnweb.freebsd.org/changeset/base/337870

Log:
  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 <tcap...@datto.com>
  Reviewed by: Matt Ahrens <m...@delphix.com>
  Reviewed-by: Brian Behlendorf <behlendo...@llnl.gov>
  Reviewed-by: George Melikov <m...@gmelikov.ru>
  Signed-off-by: Steven Noonan <ste...@uplinklabs.net>
  Closes #7720
  Closes #7738
  
  Reported by:  sef

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c      Wed Aug 
15 20:50:38 2018        (r337869)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c      Wed Aug 
15 21:01:57 2018        (r337870)
@@ -3555,12 +3555,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));
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to