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:
parent
83362e8e67
commit
02638a30ef
|
@ -1712,6 +1712,20 @@ at least this much time working on a resilver between txg flushes.
|
||||||
Default value: \fB3,000\fR.
|
Default value: \fB3,000\fR.
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
|
.sp
|
||||||
|
.ne 2
|
||||||
|
.na
|
||||||
|
\fBzfs_scan_ignore_errors\fR (int)
|
||||||
|
.ad
|
||||||
|
.RS 12n
|
||||||
|
If set to a nonzero value, remove the DTL (dirty time list) upon
|
||||||
|
completion of a pool scan (scrub) even if there were unrepairable
|
||||||
|
errors. It is intended to be used during pool repair or recovery to
|
||||||
|
stop resilvering when the pool is next imported.
|
||||||
|
.sp
|
||||||
|
Default value: \fB0\fR.
|
||||||
|
.RE
|
||||||
|
|
||||||
.sp
|
.sp
|
||||||
.ne 2
|
.ne 2
|
||||||
.na
|
.na
|
||||||
|
|
|
@ -66,6 +66,12 @@ unsigned int zfs_delays_per_second = 20;
|
||||||
*/
|
*/
|
||||||
unsigned int zfs_checksums_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.
|
* Virtual device management.
|
||||||
*/
|
*/
|
||||||
|
@ -1963,6 +1969,12 @@ vdev_dtl_reassess(vdev_t *vd, uint64_t txg, uint64_t scrub_txg, int scrub_done)
|
||||||
|
|
||||||
mutex_enter(&vd->vdev_dtl_lock);
|
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 we've completed a scan cleanly then determine
|
||||||
* if this vdev should remove any DTLs. We only want to
|
* if this vdev should remove any DTLs. We only want to
|
||||||
|
@ -3777,5 +3789,9 @@ module_param(zfs_checksums_per_second, uint, 0644);
|
||||||
MODULE_PARM_DESC(zfs_checksums_per_second, "Rate limit checksum events "
|
MODULE_PARM_DESC(zfs_checksums_per_second, "Rate limit checksum events "
|
||||||
"to this many checksum errors per second (do not set below zed"
|
"to this many checksum errors per second (do not set below zed"
|
||||||
"threshold).");
|
"threshold).");
|
||||||
|
|
||||||
|
module_param(zfs_scan_ignore_errors, int, 0644);
|
||||||
|
MODULE_PARM_DESC(zfs_scan_ignore_errors,
|
||||||
|
"Ignore errors during resilver/scrub");
|
||||||
/* END CSTYLED */
|
/* END CSTYLED */
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue