summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSean Eric Fagan <[email protected]>2017-11-06 15:13:23 -0800
committerBrian Behlendorf <[email protected]>2018-01-17 10:31:00 -0800
commit43cb30b3ce6ee3c3041276c93594ae61e7daaf86 (patch)
tree4fab0a8086bd6742c2e3615c883762999fda3c0b
parent3da3488e6339ff2dc5c7f3da8c8a0c552d018d68 (diff)
OpenZFS 8959 - Add notifications when a scrub is paused or resumed
Authored by: Sean Eric Fagan <[email protected]> Reviewed by: Alek Pinchuk <[email protected]> Reviewed by: Matthew Ahrens <[email protected]> Reviewed-by: George Melikov <[email protected]> Reviewed-by: Tony Hutter <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Approved by: Gordon Ross <[email protected]> Ported-by: Giuseppe Di Natale <[email protected]> Porting Notes: - Brought #defines in eventdefs.h in line with ZFS on Linux format. - Updated zfs-events.5 with the new events. OpenZFS-issue: https://www.illumos.org/issues/8959 OpenZFS-commit: https://github.com/openzfs/openzfs/commit/c862b93eea Closes #7049
-rw-r--r--include/sys/sysevent/eventdefs.h3
-rw-r--r--man/man5/zfs-events.529
-rw-r--r--module/zfs/dsl_scan.c6
3 files changed, 36 insertions, 2 deletions
diff --git a/include/sys/sysevent/eventdefs.h b/include/sys/sysevent/eventdefs.h
index 825d88a7b..aa13bd505 100644
--- a/include/sys/sysevent/eventdefs.h
+++ b/include/sys/sysevent/eventdefs.h
@@ -110,6 +110,9 @@ extern "C" {
#define ESC_ZFS_CONFIG_SYNC "config_sync"
#define ESC_ZFS_SCRUB_START "scrub_start"
#define ESC_ZFS_SCRUB_FINISH "scrub_finish"
+#define ESC_ZFS_SCRUB_ABORT "scrub_abort"
+#define ESC_ZFS_SCRUB_RESUME "scrub_resume"
+#define ESC_ZFS_SCRUB_PAUSED "scrub_paused"
#define ESC_ZFS_VDEV_SPARE "vdev_spare"
#define ESC_ZFS_VDEV_AUTOEXPAND "vdev_autoexpand"
#define ESC_ZFS_BOOTFS_VDEV_ATTACH "bootfs_vdev_attach"
diff --git a/man/man5/zfs-events.5 b/man/man5/zfs-events.5
index 398ea8ad1..5cef4f539 100644
--- a/man/man5/zfs-events.5
+++ b/man/man5/zfs-events.5
@@ -328,7 +328,34 @@ Issued when a scrub is started on a pool.
\fBscrub.finish\fR
.ad
.RS 12n
-Issued when a pool have finished scrubbing.
+Issued when a pool has finished scrubbing.
+.RE
+
+.sp
+.ne 2
+.na
+\fBscrub.abort\fR
+.ad
+.RS 12n
+Issued when a scrub is aborted on a pool.
+.RE
+
+.sp
+.ne 2
+.na
+\fBscrub.resume\fR
+.ad
+.RS 12n
+Issued when a scrub is resumed on a pool.
+.RE
+
+.sp
+.ne 2
+.na
+\fBscrub.paused\fR
+.ad
+.RS 12n
+Issued when a scrub is paused on a pool.
.RE
.sp
diff --git a/module/zfs/dsl_scan.c b/module/zfs/dsl_scan.c
index de579d1c7..2231ef1c0 100644
--- a/module/zfs/dsl_scan.c
+++ b/module/zfs/dsl_scan.c
@@ -714,8 +714,10 @@ dsl_scan(dsl_pool_t *dp, pool_scan_func_t func)
/* got scrub start cmd, resume paused scrub */
int err = dsl_scrub_set_pause_resume(scn->scn_dp,
POOL_SCRUB_NORMAL);
- if (err == 0)
+ if (err == 0) {
+ spa_event_notify(spa, NULL, NULL, ESC_ZFS_SCRUB_RESUME);
return (ECANCELED);
+ }
return (SET_ERROR(err));
}
@@ -842,6 +844,7 @@ dsl_scan_cancel_sync(void *arg, dmu_tx_t *tx)
dsl_scan_done(scn, B_FALSE, tx);
dsl_scan_sync_state(scn, tx, SYNC_MANDATORY);
+ spa_event_notify(scn->scn_dp->dp_spa, NULL, NULL, ESC_ZFS_SCRUB_ABORT);
}
int
@@ -886,6 +889,7 @@ dsl_scrub_pause_resume_sync(void *arg, dmu_tx_t *tx)
spa->spa_scan_pass_scrub_pause = gethrestime_sec();
scn->scn_phys.scn_flags |= DSF_SCRUB_PAUSED;
dsl_scan_sync_state(scn, tx, SYNC_CACHED);
+ spa_event_notify(spa, NULL, NULL, ESC_ZFS_SCRUB_PAUSED);
} else {
ASSERT3U(*cmd, ==, POOL_SCRUB_NORMAL);
if (dsl_scan_is_paused_scrub(scn)) {