6878 Add scrub completion info to "zpool history"

illumos/illumos-gate@1825bc56e5
1825bc56e5

https://www.illumos.org/issues/6878
  Summary of changes:
      * Replace generic "scan done" message with "scan aborted, restarting",
        "scan cancelled", or "scan done"
      * Log number of errors using spa_get_errlog_size
      * Refactor scan restarting check into static function

Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Dan Kimmel <dan.kimmel@delphix.com>
Approved by: Dan McDonald <danmcd@omniti.com>
Author: Nav Ravindranath <nav@delphix.com>
This commit is contained in:
Andriy Gapon 2016-07-12 11:25:55 +00:00
parent 89ee42219a
commit 16af19f6c3
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/vendor-sys/illumos/dist/; revision=302645

View File

@ -56,7 +56,8 @@ typedef int (scan_cb_t)(dsl_pool_t *, const blkptr_t *,
static scan_cb_t dsl_scan_scrub_cb; static scan_cb_t dsl_scan_scrub_cb;
static void dsl_scan_cancel_sync(void *, dmu_tx_t *); static void dsl_scan_cancel_sync(void *, dmu_tx_t *);
static void dsl_scan_sync_state(dsl_scan_t *, dmu_tx_t *tx); static void dsl_scan_sync_state(dsl_scan_t *, dmu_tx_t *);
static boolean_t dsl_scan_restarting(dsl_scan_t *, dmu_tx_t *);
int zfs_top_maxinflight = 32; /* maximum I/Os per top-level */ int zfs_top_maxinflight = 32; /* maximum I/Os per top-level */
int zfs_resilver_delay = 2; /* number of ticks to delay resilver */ int zfs_resilver_delay = 2; /* number of ticks to delay resilver */
@ -293,8 +294,15 @@ dsl_scan_done(dsl_scan_t *scn, boolean_t complete, dmu_tx_t *tx)
else else
scn->scn_phys.scn_state = DSS_CANCELED; scn->scn_phys.scn_state = DSS_CANCELED;
if (dsl_scan_restarting(scn, tx))
spa_history_log_internal(spa, "scan aborted, restarting", tx,
"errors=%llu", spa_get_errlog_size(spa));
else if (!complete)
spa_history_log_internal(spa, "scan cancelled", tx,
"errors=%llu", spa_get_errlog_size(spa));
else
spa_history_log_internal(spa, "scan done", tx, spa_history_log_internal(spa, "scan done", tx,
"complete=%u", complete); "errors=%llu", spa_get_errlog_size(spa));
if (DSL_SCAN_IS_SCRUB_RESILVER(scn)) { if (DSL_SCAN_IS_SCRUB_RESILVER(scn)) {
mutex_enter(&spa->spa_scrub_lock); mutex_enter(&spa->spa_scrub_lock);
@ -1448,8 +1456,7 @@ dsl_scan_sync(dsl_pool_t *dp, dmu_tx_t *tx)
* that we can restart an old-style scan while the pool is being * that we can restart an old-style scan while the pool is being
* imported (see dsl_scan_init). * imported (see dsl_scan_init).
*/ */
if (scn->scn_restart_txg != 0 && if (dsl_scan_restarting(scn, tx)) {
scn->scn_restart_txg <= tx->tx_txg) {
pool_scan_func_t func = POOL_SCAN_SCRUB; pool_scan_func_t func = POOL_SCAN_SCRUB;
dsl_scan_done(scn, B_FALSE, tx); dsl_scan_done(scn, B_FALSE, tx);
if (vdev_resilver_needed(spa->spa_root_vdev, NULL, NULL)) if (vdev_resilver_needed(spa->spa_root_vdev, NULL, NULL))
@ -1875,3 +1882,10 @@ dsl_scan(dsl_pool_t *dp, pool_scan_func_t func)
return (dsl_sync_task(spa_name(spa), dsl_scan_setup_check, return (dsl_sync_task(spa_name(spa), dsl_scan_setup_check,
dsl_scan_setup_sync, &func, 0, ZFS_SPACE_CHECK_NONE)); dsl_scan_setup_sync, &func, 0, ZFS_SPACE_CHECK_NONE));
} }
static boolean_t
dsl_scan_restarting(dsl_scan_t *scn, dmu_tx_t *tx)
{
return (scn->scn_restart_txg != 0 &&
scn->scn_restart_txg <= tx->tx_txg);
}