mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	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
							
								
									6059ba27c4
								
							
						
					
					
						commit
						c234706270
					
				| @ -1699,6 +1699,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. | ||||||
|  */ |  */ | ||||||
| @ -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); | 		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 | ||||||
| @ -3795,5 +3807,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
	
	Block a user
	 Tim Chase
						Tim Chase