Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 26 Feb 2020 15:47:41 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r358337 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Message-ID:  <202002261547.01QFlfVW035476@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Wed Feb 26 15:47:40 2020
New Revision: 358337
URL: https://svnweb.freebsd.org/changeset/base/358337

Log:
  MFZoL: Fix 2 small bugs with cached dsl_scan_phys_t
  
  This patch corrects 2 small bugs where scn->scn_phys_cached was
  not properly updated to match the primary copy when it needed to
  be. The first resulted in the pause state not being properly
  updated and the second resulted in the cached version being
  completely zeroed even if the primary was not.
  
  Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
  Reviewed-by: Serapheim Dimitropoulos <serapheim.dimitro@delphix.com>
  Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
  Signed-off-by: Tom Caputi <tcaputi@datto.com>
  Closes #8010
  zfsonlinux/zfs@8cb119e3dc0ac6c90b1517fbadc021b7e9741fc6
  
  MFC after:	1 week

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 Feb 26 15:45:04 2020	(r358336)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c	Wed Feb 26 15:47:40 2020	(r358337)
@@ -448,7 +448,6 @@ dsl_scan_init(dsl_pool_t *dp, uint64_t txg)
 	scn->scn_maxinflight_bytes = MAX(zfs_scan_vdev_limit *
 	    dsl_scan_count_leaves(spa->spa_root_vdev), 1ULL << 20);
 
-	bcopy(&scn->scn_phys, &scn->scn_phys_cached, sizeof (scn->scn_phys));
 	avl_create(&scn->scn_queue, scan_ds_queue_compare, sizeof (scan_ds_t),
 	    offsetof(scan_ds_t, sds_node));
 	avl_create(&scn->scn_prefetch_queue, scan_prefetch_queue_compare,
@@ -506,6 +505,8 @@ dsl_scan_init(dsl_pool_t *dp, uint64_t txg)
 		}
 	}
 
+	bcopy(&scn->scn_phys, &scn->scn_phys_cached, sizeof (scn->scn_phys));
+
 	/* reload the queue into the in-core state */
 	if (scn->scn_phys.scn_queue_obj != 0) {
 		zap_cursor_t zc;
@@ -928,6 +929,7 @@ dsl_scrub_pause_resume_sync(void *arg, dmu_tx_t *tx)
 		/* can't pause a scrub when there is no in-progress scrub */
 		spa->spa_scan_pass_scrub_pause = gethrestime_sec();
 		scn->scn_phys.scn_flags |= DSF_SCRUB_PAUSED;
+		scn->scn_phys_cached.scn_flags |= DSF_SCRUB_PAUSED;
 		dsl_scan_sync_state(scn, tx, SYNC_CACHED);
 		spa_event_notify(spa, NULL, NULL, ESC_ZFS_SCRUB_PAUSED);
 	} else {
@@ -942,6 +944,7 @@ dsl_scrub_pause_resume_sync(void *arg, dmu_tx_t *tx)
 			    gethrestime_sec() - spa->spa_scan_pass_scrub_pause;
 			spa->spa_scan_pass_scrub_pause = 0;
 			scn->scn_phys.scn_flags &= ~DSF_SCRUB_PAUSED;
+			scn->scn_phys_cached.scn_flags &= ~DSF_SCRUB_PAUSED;
 			dsl_scan_sync_state(scn, tx, SYNC_CACHED);
 		}
 	}



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