Add zfs_scan_ignore_errors tunable

When it's set, a DTL range will be cleared even if its scan/scrub had
errors.  This allows to work around resilver/scrub upon import when the
pool has errors.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tim Chase <tim@chase2k.com>
Closes #7293
This commit is contained in:
Tim Chase
2018-03-13 12:43:14 -05:00
committed by Tony Hutter
parent 6059ba27c4
commit c234706270
2 changed files with 30 additions and 0 deletions
+16
View File
@@ -66,6 +66,12 @@ unsigned int zfs_delays_per_second = 20;
*/
unsigned int zfs_checksums_per_second = 20;
/*
* Ignore errors during scrub/resilver. Allows to work around resilver
* upon import when there are pool errors.
*/
int zfs_scan_ignore_errors = 0;
/*
* Virtual device management.
*/
@@ -1961,6 +1967,12 @@ vdev_dtl_reassess(vdev_t *vd, uint64_t txg, uint64_t scrub_txg, int scrub_done)
mutex_enter(&vd->vdev_dtl_lock);
/*
* If requested, pretend the scan completed cleanly.
*/
if (zfs_scan_ignore_errors && scn)
scn->scn_phys.scn_errors = 0;
/*
* If we've completed a scan cleanly then determine
* if this vdev should remove any DTLs. We only want to
@@ -3795,5 +3807,9 @@ module_param(zfs_checksums_per_second, uint, 0644);
MODULE_PARM_DESC(zfs_checksums_per_second, "Rate limit checksum events "
"to this many checksum errors per second (do not set below zed"
"threshold).");
module_param(zfs_scan_ignore_errors, int, 0644);
MODULE_PARM_DESC(zfs_scan_ignore_errors,
"Ignore errors during resilver/scrub");
/* END CSTYLED */
#endif