aboutsummaryrefslogtreecommitdiffstats
path: root/include/sys/fs/zfs.h
diff options
context:
space:
mode:
authorGeorge Amanakis <[email protected]>2021-12-17 21:35:28 +0100
committerBrian Behlendorf <[email protected]>2023-05-18 11:59:42 -0700
commit482eeef804f0f325faddb102f112c0f1ec86a1b6 (patch)
treef5b052e7fed06ad527285841ec6de2d7503d39ed /include/sys/fs/zfs.h
parente34e15ed6d1882d29e314321b7642305d99f1b78 (diff)
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 <[email protected]> Reviewed-by: Tony Hutter <[email protected]> Co-authored-by: TulsiJain [email protected] Signed-off-by: George Amanakis <[email protected]> Closes #8995 Closes #12355
Diffstat (limited to 'include/sys/fs/zfs.h')
-rw-r--r--include/sys/fs/zfs.h19
1 files changed, 18 insertions, 1 deletions
diff --git a/include/sys/fs/zfs.h b/include/sys/fs/zfs.h
index 4c2097fb8..93193fa14 100644
--- a/include/sys/fs/zfs.h
+++ b/include/sys/fs/zfs.h
@@ -1036,6 +1036,7 @@ typedef enum pool_scan_func {
POOL_SCAN_NONE,
POOL_SCAN_SCRUB,
POOL_SCAN_RESILVER,
+ POOL_SCAN_ERRORSCRUB,
POOL_SCAN_FUNCS
} pool_scan_func_t;
@@ -1099,6 +1100,20 @@ typedef struct pool_scan_stat {
uint64_t pss_pass_scrub_spent_paused;
uint64_t pss_pass_issued; /* issued bytes per scan pass */
uint64_t pss_issued; /* total bytes checked by scanner */
+
+ /* error scrub values stored on disk */
+ uint64_t pss_error_scrub_func; /* pool_scan_func_t */
+ uint64_t pss_error_scrub_state; /* dsl_scan_state_t */
+ uint64_t pss_error_scrub_start; /* error scrub start time */
+ uint64_t pss_error_scrub_end; /* error scrub end time */
+ uint64_t pss_error_scrub_examined; /* error blocks issued I/O */
+ /* error blocks to be issued I/O */
+ uint64_t pss_error_scrub_to_be_examined;
+
+ /* error scrub values not stored on disk */
+ /* error scrub pause time in milliseconds */
+ uint64_t pss_pass_error_scrub_pause;
+
} pool_scan_stat_t;
typedef struct pool_removal_stat {
@@ -1120,6 +1135,7 @@ typedef enum dsl_scan_state {
DSS_SCANNING,
DSS_FINISHED,
DSS_CANCELED,
+ DSS_ERRORSCRUBBING,
DSS_NUM_STATES
} dsl_scan_state_t;
@@ -1360,7 +1376,7 @@ typedef enum {
*/
typedef enum zfs_ioc {
/*
- * Core features - 81/128 numbers reserved.
+ * Core features - 88/128 numbers reserved.
*/
#ifdef __FreeBSD__
ZFS_IOC_FIRST = 0,
@@ -1455,6 +1471,7 @@ typedef enum zfs_ioc {
ZFS_IOC_WAIT_FS, /* 0x5a54 */
ZFS_IOC_VDEV_GET_PROPS, /* 0x5a55 */
ZFS_IOC_VDEV_SET_PROPS, /* 0x5a56 */
+ ZFS_IOC_POOL_SCRUB, /* 0x5a57 */
/*
* Per-platform (Optional) - 8/128 numbers reserved.