mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-23 19:04:45 +03:00
Teach zpool scrub to scrub only blocks in error log
Added a flag '-e' in zpool scrub to scrub only blocks in error log. A user can pause, resume and cancel the error scrub by passing additional command line arguments -p -s just like a regular scrub. This involves adding a new flag, creating new libzfs interfaces, a new ioctl, and the actual iteration and read-issuing logic. Error scrubbing is executed in multiple txg to make sure pool performance is not affected. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Tony Hutter <hutter2@llnl.gov> Co-authored-by: TulsiJain tulsi.jain@delphix.com Signed-off-by: George Amanakis <gamanakis@gmail.com> Closes #8995 Closes #12355
This commit is contained in:
committed by
Brian Behlendorf
parent
e34e15ed6d
commit
482eeef804
@@ -8173,6 +8173,7 @@ spa_scan_stop(spa_t *spa)
|
||||
ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == 0);
|
||||
if (dsl_scan_resilvering(spa->spa_dsl_pool))
|
||||
return (SET_ERROR(EBUSY));
|
||||
|
||||
return (dsl_scan_cancel(spa->spa_dsl_pool));
|
||||
}
|
||||
|
||||
@@ -8198,6 +8199,10 @@ spa_scan(spa_t *spa, pool_scan_func_t func)
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (func == POOL_SCAN_ERRORSCRUB &&
|
||||
!spa_feature_is_enabled(spa, SPA_FEATURE_HEAD_ERRLOG))
|
||||
return (SET_ERROR(ENOTSUP));
|
||||
|
||||
return (dsl_scan(spa->spa_dsl_pool, func));
|
||||
}
|
||||
|
||||
@@ -9249,6 +9254,7 @@ spa_sync_iterate_to_convergence(spa_t *spa, dmu_tx_t *tx)
|
||||
brt_sync(spa, txg);
|
||||
ddt_sync(spa, txg);
|
||||
dsl_scan_sync(dp, tx);
|
||||
dsl_errorscrub_sync(dp, tx);
|
||||
svr_sync(spa, tx);
|
||||
spa_sync_upgrades(spa, tx);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user